张火火和西西弗一起推石头

以执念对抗不完美

CentOS8部署zerotier异地组网

一、前言

本文在此前研究部署FRP进行内网穿透,但FRP是基于公网服务器的流量转发,上下行的速率取决于公网服务器的带宽,并且每启用一个服务都需要开放服务器的一个端口,在易用性和安全性上都有着一定的问题。
为解决内网穿透需求,了解到zerotier这个工具,可以实现异地组网的功能。
在zerotier中,每一台设备都是一个客户端,客户端之间通过p2p连接。每台设备上安装一个虚拟网卡,实现虚拟局域网,这样处于公网中的机器也能够像在局域网中一样互相访问。

二、部署

  1. 安装zerotier
    Linux端的一键安装命令:
    curl -s https://install.zerotier.com | sudo bash
    此外,卸载命令:

    dpkg -P zerotier-one
    rm -rf /var/lib/zerotier-one/
    
  2. 开启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
    再次重启。

  3. zerotier加入网络
    zerotier-cli join 需要加入的网络ID
    当出现200 join OK时,说明加入成功。

  4. 开启IP转发
    编辑/etc/sysctl.conf文件
    输入一下两行配置开启IP转发:

    net.ipv4.ip_forward=1
    net.ipv6.conf.all.forwarding=1
    

    解释:
    net.ipv4.ip_forwardnet.ipv6.conf.all.forwarding选项同理)该选项设置为 1 时,表示启用了IP转发功能。IP转发是指网络设备在接收到一个IP数据包后,根据目标IP地址对该数据包进行决策,并选择合适的网络接口将其转发出去。
    当配置的值为 1 时,系统将启用IP转发功能,允许将网络流量从一个接口转发到另一个接口,使得不同网络之间能够进行路由通信。这在充当网络路由器或防火墙的系统中非常常见。
    然而,需要注意的是,启用IP转发功能可能会对系统的安全性产生影响。因此,在应用中启用此功能之前,应仔细评估网络安全风险,并采取适当的安全措施来保护系统和网络。
    请谨慎使用IP转发功能并确保采取了适当的网络安全措施。

  5. zerotier配置路由表
    如图所示,格式为:
    内网网段 via 跳板机所分配地址

zerotier路由表.png

  1. 跳板机设置路由表
    输入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的路由表设置或是局域网内设备防火墙问题,需要进一步排查。

  2. 后续
    至此已经基本能够通过zerotier实现公内网下无缝访问单一设备,已经基本满足本文此前的需求,但还是没有实现公网无缝组网的功能。

三、展望

  1. 通过局域网内跳板机设置IP转发访问其他局域网内设备。
  2. 基于openwrt的软路由安装zerotier添加异地局域网实现组网。

参考

  1. 部署zerotier客户端(Linux版本)适用于CentOS、Ubuntu等系统
  2. ZeroTier 异地组网
  3. 异地旁路组网:zerotier
posted @ 2024-07-04 18:28  zbyisgudi  阅读(305)  评论(0编辑  收藏  举报