zerotier设置为默认路由记录

1:网关开启IPv4内核转发,增加防火墙规则,将zt网段来的流量转成本地网卡IP发出去的
2:增加路由规则,将一个CIRD地址指向一个网关地址,网关地址是zt网段的地址

1
2
3
iptables -t nat -A POSTROUTING -o eth1 -s 10.242.0.0/16 -j SNAT --to-source 192.168.1.220
iptables -t filter -A FORWARD -i zt+ -s 10.242.0.0/16 -d 0.0.0.0/0 -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -s 0.0.0.0/0 -d 10.242.0.0/16 -j ACCEPT

删除:
1
2
3
iptables -t nat -D POSTROUTING -o eth1 -s 10.242.0.0/16 -j SNAT --to-source 192.168.1.220
iptables -t filter -D FORWARD -i zt+ -s 10.242.0.0/16 -d 0.0.0.0/0 -j ACCEPT
iptables -t filter -D FORWARD -i eth1 -s 0.0.0.0/0 -d 10.242.0.0/16 -j ACCEPT

3:在终端机器上设置allowDefault,以便让终端机器的流量能走到zt的网关

  • 最后还是未成功,感觉是流量没走到zt网卡,还是走了原来的”以太网“接口,所以还是可以访问外网,还是访问不到内网
    但是手机上的情况不一样,手机上啥也访问不到,感觉就像是流量走到了zt网络的网关地址,但是网关没有转发流量

  • 另一台网络架构较为简单的windows虚拟机也重现了这个情况,也是zt网络ok,没有互联网

后续

看到一篇教程:https://www.howtoing.com/getting-started-software-defined-networking-creating-vpn-zerotier-one

于是又尝试了一次,这次在A网络(192.168.100.0/24)下新建了一台虚拟机(192.168.100.230)作为zt网络网关
在B网络(192.168.1.0/24)的一台虚拟机作为客户端

将两个机器都安装好zerotier和join到同一网络后

先在A机器配置网关

  1. 打开IP转发 vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p
  2. 查看本地网络和zt网络网卡名称 ip link show,我的是 eth0zt0
  3. 设置防火墙规则
    1
    2
    3
    4
    5
    6
    # 启用网络地址转换和IP伪装:
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    # 允许流量转发和跟踪活动连接:
    iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    # 允许从zt0到eth0流量转发。 反向规则不是必需的,因为在本教程中,假设客户端始终通过服务器调用,而不是其他方式:
    iptables -A FORWARD -i zt0 -o eth0 -j ACCEPT
  4. 保存防火墙规则 apt-get install iptables-persistent 询问你是否保存当前规则的时候,ipv4和ipv6都选是

在my.zerotier.com设置全局路由

Managed Routes 中添加一条 0.0.0.0/0 to B机器的zt网络IP 的路由规则

在B机器配置客户端
如果您的客户端正在运行Linux,则需要对其/etc/sysctl.conf文件进行手动更改。 此配置更改需要更改内核对您的客户端流量的可接受返回路径的看法。 由于配置了ZeroTier VPN,因此从您的服务器返回到您的客户端的流量有时可能来自与它发送到的网络地址不同的网络地址。 默认情况下,Linux内核将这些视为无效并丢弃它们,因此有必要覆盖该行为。

  1. vim /etc/sysctl.conf net.ipv4.conf.all.rp_filter = 2 sysctl -p
  2. 启用zt网络作为默认路由 zerotier-cli set NetworkID allowDefault=1

按照上面的步骤配置完成后,在B机器上就可以直接curl访问到A网络局域网内的机器了,例如 curl 192.168.100.1 就可以访问到A网络的路由器

后来发现不用设置全局路由

直接在路由规则处,添加 192.168.100.0/24 to A网关IP (注意一定要正确的CIDR IP格式)
如果添加成功了,会在1-3秒内在所有客户端执行 ip route 看到刚才添加的规则

客户端也不用设置DefaultRoute=1

就直接可以在B机器访问到A网络的路由器地址了

鄂ICP备14007840号-1