Home zerotier配置
Post
Cancel

zerotier配置

本文主要介绍如何使用zerotier进行虚拟局域网的搭建。内容包含zerotier下载安装,moon节点搭建,router配置

zerotier下载安装

zerotier的官方下载地址: https://www.zerotier.com/download/ 大部分操作平台可以在这直接下载,对于以下部分平台有代替软件或者需要额外配置

android

建议使用ZerotierFix代替,此软件支持配置Moon节点

qnap

在升级到qnap 5.0.1之后zerotier 1.10.1会启动报错,需要按照以下方式配置,如果后续qnap或者zerotier升级修复,则无需关注

https://forum.qnap.com/viewtopic.php?t=167752

Moon节点搭建

网上教程较多,不赘述,需要一台公网服务器,随意找一个教程搭建即可

https://www.cnblogs.com/Yogile/p/12642423.html

router配置

假设你家有一台路由器(lan-ip: 192.168.2.1),一台nas(lan-ip:192.168.2.2) 此时你希望手机能直接连接到家里的nas,那么需要将nas和手机同时加入到zerotier的虚拟局域网中

nas(lan-ip:192.168.2.2, zt-ip:192.168.192.2), phone(zt-ip:192.168.192.100)

均加入zerotier之后,手机可以通过zt-ip来访问nas

这样虽然能访问,但是有两个缺点:

  • 如果家里局域网有多个设备需要加入到zerotier,那每个设备都需要安装/配置zerotier,非常繁琐,甚至有的设备不能安装zerotier
  • 手机连接局域网设备需要两套配置,在局域网内配置一套lan-ip,在外面的zt网络配置配置zt-ip,每次需要切换,不能无感切换

设想一下,假如我们把一台局域网的设备加入zerotier网络,并将该设备作为路由(router),所有访问局域网内其他设备的流量均由这台路由代理,那么局域网内设备就无需加入zerotier网络。 并且可以设置成手机访问局域网网段(192.168.2.x)也由这台路由代理,这样手机不论在局域网内,还是在外面的zt网络内,都可以通过nas的lan-ip来访问nas

linux配置

以支持iptables的linux设备为例,可以是你家的路由器、nas或树莓派。这台路由的ip假定为(lan-ip:192.168.2.1, zt-ip:192.168.192.3)

zerotier网络配置路由转发

将局域网的网段(192.168.2.0/24)全部由zerotier的ip转发

screenshot.png

配置路由网络转发

官方教程: 链接🔗

ssh进入到路由设备的后台

  1. 打开ipv4的路由转发

    1
    
     sudo sysctl -w net.ipv4.ip_forward=1
    
  2. 配置路由表

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
     # PHY_IFACE为物理网卡地址
     PHY_IFACE=eth0
    
     # ZT_IFACE为zerotier虚拟网卡地址
     ZT_IFACE=zt7nnig26
    
     # 这两个网卡地址可以通过 ip a 查看
    
     # 配置iptables转发规则
     sudo iptables -t nat -A POSTROUTING -o $PHY_IFACE -j MASQUERADE
     sudo iptables -A FORWARD -i $PHY_IFACE -o $ZT_IFACE -m state --state RELATED,ESTABLISHED -j ACCEPT
     sudo iptables -A FORWARD -i $ZT_IFACE -o $PHY_IFACE -j ACCEPT
    
     # 配置持久性,下次重启也生效(如果不支持该命令,自行查找解决)
     sudo apt install iptables-persistent
     sudo bash -c iptables-save > /etc/iptables/rules.v4
    
  3. Done

    此时应该已经生效了,试试用你的zerotier设备通过局域网ip访问家里的设备吧。

  4. 补充配置

    你应该可以通过lan-ip访问所有其他局域网设备,但唯独不能通过路由的lan-ip(192.168.2.1)访问路由。如果你没有这个需求你可以搁置不处理,但我这用的是nas作为路由,如果不能通过nas的lan-ip来访问nas,那么仍然没有解决上述的问题。

    原理不解释了,直接说结论。我们需要配置一下路由设备自身ip访问的DNAT

    1
    2
    3
    4
    
     iptables -t nat -I PREROUTING -i <zt-nic> -d <ROUTER-LAN-IP> -j DNAT --to-destination <ROUTER-ZT-IP>
    
     # 以上面这个例子,配置如下
     iptables -t nat -I PREROUTING -i $ZT_IFACE -d 192.168.2.1 -j DNAT --to-destination 192.168.192.3
    

    执行后,应该就能通过路由的lan-ip(192.168.2.1)直接访问路由设备了。

Mac作为路由配置

假如你使用Mac作为路由,由于其不支持iptables,而是使用的pfctl,因此配置上稍有不同

  1. 打开ipv4的路由转发

    1
    
     sysctl -w net.inet.ip.forwarding=1
    
  2. 配置pf

    新增/etc/pf.zerotier.conf,增加以下配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
     # PHY_IFACE为物理网卡地址
     PHY_IFACE=en0
    
     # ZT_IFACE为zerotier虚拟网卡地址
     ZT_IFACE=zt7nnig26
    
     # 这两个网卡地址可以通过 ip a 查看
    
     nat on $PHY_IFACE from $ZT_IFACE:network to any -> ($PHY_IFACE)
    
    
  3. 更新pf配置

    执行sudo pfctl -e -f /etc/pf.zerotier.conf

This post is licensed under CC BY 4.0 by the author.

qnap备忘录

-