安装zerotier
通过官方的一键安装脚本安装
curl -s https://install.zerotier.com | sudo bash |
如果你是root用户,那么不需要加上sudo,去掉sudo即可,非root用户直接执行上述命令
检查是否安装成功
执行下面的命令,如果有返回则没问题
zerotier-one -v
加入你所在的zerotier账户网络
zerotier-cli join xxxxxx
把上面的xxxxxx换成你的网络id
允许新设备加入网络
对着新设备前面的红框单击,打上勾即可
打通两地nat后面的局域网设备
原理
先梳理一下两地的ip情况,两边都有一个由zerotier建立起来名称为zt开头的虚拟网卡,它们下发的ip就是在zerotier管理页对应的ip,我们需要通过这个两个ip来访问到它们所属的局域网,实现打通两地局域网。
假设:A地的局域网ip段为192.168.123.0/24,zerotier的内网ip为10.118.10.1/24,B地的局域网ip段为10.10.10.0/24,zerotier的内网ip为10.118.10.2/24,前提是,两地做好了zerotier的路由,比如A地访问B的的局域网,那么路由就是Daddr=10.10.10.0/24,gateway=10.118.10.1,反过来,B地访问A地的局域网,就是Daar=192.168.123.0/24,gateway=10.118.10.2,如果是zerotier内网互相访问是没问题的,也就是10.118.10.0/24网段的ip互相访问,当A地的zerotier客户端访问B地的zerotier所在的局域网ip段,也就是192.168.123.0/24去访问10.10.10.0/24,它们就是通过zerotier组成的内网ip去互相访问的,但绝对不跟两地的局域网同网段,这时候A地的出口ip就是10.118.10.1,但是在B地不认得这个ip,10.118.10.1跟10.10.10.0/24没有任何关系,那么我们就需要用到它了!没错,它,防火墙,源地址转换,我将用nftables防火墙做解释,iptables原理同样,操作也更简单,先看下面的示例:
nft add table inet nat \ |
我来解释一下,第一行,创建一个inet(ipv4+ipv6)名为nat的表
第二行,创建链,在名为nat表上创建一个名为postrouting的类型为nat的链
第三行,创建规则,在名为nat表,名为postrouting链上建立一个规则,将源地址为10.118.10.0/24的ip,目的地址为10.10.10.0/24的ip进行masquerade,也就是ip地址伪装,这个是重点,只有这个做出来,我们的局域网才认得被另一地的ip所访问
最后
保存防火墙规则,不要使用目的网卡为zt开头的网卡作为目的地址,因为当nft防火墙起来的时候,zerotier服务还没起来,就没有zt这个虚拟网卡,会导致nft防火墙起不来,报错。
nft list ruleset > /etc/nftables.conf |