CentOS8部署zerotier异地组网
一、前言
本文在此前研究部署FRP进行内网穿透,但FRP是基于公网服务器的流量转发,上下行的速率取决于公网服务器的带宽,并且每启用一个服务都需要开放服务器的一个端口,在易用性和安全性上都有着一定的问题。
为解决内网穿透需求,了解到zerotier这个工具,可以实现异地组网的功能。
在zerotier中,每一台设备都是一个客户端,客户端之间通过p2p连接。每台设备上安装一个虚拟网卡,实现虚拟局域网,这样处于公网中的机器也能够像在局域网中一样互相访问。
二、部署
-
安装zerotier
Linux端的一键安装命令:
curl -s https://install.zerotier.com | sudo bash
此外,卸载命令:dpkg -P zerotier-one rm -rf /var/lib/zerotier-one/
-
开启zerotier
zerotier-one -d
若出现zerotier-one: fatal error: cannot bind to local control interface port 9993
则说明端口9993被占用,接下来查看端口占用信息。
netstat -lp | grep 9993
若是自己占用了,那么结束其进程:
killall -9 zerotier-one
反复运行,直到出现提示进程已全都结束。
若提示无killall
,安装:
yum install psmisc
再次启动zerotier。
若zerotier还是不能启动,则开启zerotier开机自启:
systemctl enable zerotier-one.service
再次重启。 -
zerotier加入网络
zerotier-cli join 需要加入的网络ID
当出现200 join OK
时,说明加入成功。 -
开启IP转发
编辑/etc/sysctl.conf
文件
输入一下两行配置开启IP转发:net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1
解释:
net.ipv4.ip_forward(net.ipv6.conf.all.forwarding选项同理)该选项设置为1
时,表示启用了IP转发功能。IP转发是指网络设备在接收到一个IP数据包后,根据目标IP地址对该数据包进行决策,并选择合适的网络接口将其转发出去。
当配置的值为1
时,系统将启用IP转发功能,允许将网络流量从一个接口转发到另一个接口,使得不同网络之间能够进行路由通信。这在充当网络路由器或防火墙的系统中非常常见。
然而,需要注意的是,启用IP转发功能可能会对系统的安全性产生影响。因此,在应用中启用此功能之前,应仔细评估网络安全风险,并采取适当的安全措施来保护系统和网络。
请谨慎使用IP转发功能并确保采取了适当的网络安全措施。 -
zerotier配置路由表
如图所示,格式为:
内网网段 via 跳板机所分配地址
-
跳板机设置路由表
输入ip addr
记录下连接局域网的物理网卡和zerotier的虚拟网卡(一般以zt开头)
将网卡名称导出为环境变量名:PHY_IFACE=物理网卡名称 ZT_IFACE=zerotier的虚拟网卡名称
更新路由表:
iptables -t nat -A POSTROUTING -o $PHY_IFACE -j MASQUERADE iptables -A FORWARD -i $PHY_IFACE -o $ZT_IFACE -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i $ZT_IFACE -o $PHY_IFACE -j ACCEPT iptables-save
持久化路由表:
mkdir -p /etc/sysconfig/ sh -c "iptables-save > /etc/sysconfig/iptables"
在
/etc/rc.local
文件最后添加一行:vi /etc/rc.local /sbin/iptables-restore < /etc/sysconfig/iptables
理论上在经过上述设置后开启zerotier则可以实现在公网通过跳板机访问局域网内设备,但在本文实践后发现只能访问跳板机的局域网内IP地址,并不能访问其余局域网内设备。不知是跳板机的路由表设置还是zerotier的路由表设置或是局域网内设备防火墙问题,需要进一步排查。
-
后续
至此已经基本能够通过zerotier实现公内网下无缝访问单一设备,已经基本满足本文此前的需求,但还是没有实现公网无缝组网的功能。
三、展望
- 通过局域网内跳板机设置IP转发访问其他局域网内设备。
- 基于openwrt的软路由安装zerotier添加异地局域网实现组网。