需求
两个Easytier网络,一个是172.16.255.0/24,一个是172.16.254.0/24,希望两个网络之间互通。
Easytier安装
首先找一个VPS(下称POP点),正常安装Easytier,在Linux环境下使用其官方一键脚本即可: wget -O /tmp/easytier.sh "https://raw.githubusercontent.com/EasyTier/EasyTier/main/script/install.sh" && bash /tmp/easytier.sh install
然后在 /opt/easytier/config/
目录下建立两个conf,一个是default (172.16.255.0/24),一个是oversea(172.16.254.0/24),并配置对应的节点。
子网代理
Easytier本身具备子网代理功能,我们需要让该VPS在172.16.255.0/24网络上广播自己能提供172.16.254.0/24的路由,在172.16.254.0/24网络上广播自己到172.16.255.0/24的路由,所以我们需要分别添加子网代理的相关配置,在default.conf添加:
[[proxy_network]]
cidr = "172.16.254.0/24"
在oveasea.conf添加:
[[proxy_network]]
cidr = "172.16.255.0/24"
为了避免端口冲突,我们需要在配置文件中调整easytier监听的端口。
首先是listeners,是easytier接收数据传输的端口,进行对应修改,确保端口不冲突。
listeners = [
"wss://0.0.0.0:11012/",
]
然后是 rpc_portal
选项,这个选项是给cli用的,这里编辑oversea.conf,将15888端口换成15889。
随后就可以通过以下指令启动服务:
service easytier@default restart # 此处是因为脚本会默认启动一次default
service easytier@oversea start
到这里,其实default (172.16.255.0/24)和oversea(172.16.254.0/24)已经完成互通,但是在跨子网的时候你会发现流量是从POP点的IP来的,这是因为Easytier对出站流量进行了NAT,如果需要让跨子网的时候不进行NAT,携带真实IP,还需要做以下步骤:
去除子网代理自带的NAT
首先确保Easytier版本是最新的,然后我们需要在配置项的flags中加入一项:
[flags]
proxy_forward_by_system = true
这一项开启后会关闭easytier出站的NAT,让内核处理流量转发的工作,所以我们需要打开POP点的IP转发功能,使用编辑器编辑 /etc/sysctl.conf
找到 net.ipv4.ip_forward=1
一行并解除注释,不同的系统模板这个文件并不完全一样,所以你可能要自行变通。
保存后,输入 sysctl -p /etc/sysctl.conf
或者重启服务器生效。
随后允许防火墙转发这两段流量:
iptables -A FORWARD -s 172.16.255.0/24 -j ACCEPT
iptables -A FORWARD -d 172.16.254.0/24 -j ACCEPT
iptables -A FORWARD -s 172.16.254.0/24 -j ACCEPT
iptables -A FORWARD -d 172.16.255.0/24 -j ACCEPT
然后你就可以使用tracert命令进行路由追踪了,此时路由信息应当正常显示,对端的服务也能正确解析来路IP。
总结
至此,你就可以通过easytier组建大内网了,可以让POP点处于优化线路从而实现加速访问的目的。
除开easytier,本方法或许也可以实现wireguard间组网、tailscale间组网、easytier/tailscale互通等高级玩法,此处仅作为方便远程办公的参考。