【zerotier] 使用Linux Kernel设置转发代理
1. 场景
如图,园区网内(校园网或企业网)有台 Ubuntu 主机,家里有台 Windows 主机. 由于居家办公需求,使用 ZeroTier One 建立了虚拟局域网并自建 Moon 加速网络,Ubuntu 和 Windows 可以互联. 但是经过一段时间使用发现,还是有许多不便. 例如,需要获取园区网内资源时必须首先从 Windows 登录 Ubuntu,在 Ubuntu 上下载所需资源后再通过虚拟局域网传输到 Windows 本地.
这就产生了新的需求,能否通过转发代理让 Windows 直接连入 Ubuntu 所在的真实物理网络. 这样不仅可以让 Windows 直接访问园区网内资源,还可以让 Windows 以 Ubuntu 的公网 IP 访问互联网. 这样就能极大提高工作效率,避免频繁的数据传输工作.
通过调研发现:在上述条件下,仅使用 Ubuntu 上的 linux 内核的数据转发和 iptables 控制路由就能实现所需功能.
2. 配置
2.1 配置 Linux 的数据转发和路由控制
Linux 系统内核可以通过 sysctl
和 iptables
两个命令控制网络数据转.
查看内核 IP 转发设置,0 表示处于关闭状态:
sudo sysctl net.ipv4.ip_forward |
编辑配置文件开启 Linxu 内核的 IP 数据转发:
sudo vim /etc/sysctl.conf |
将第 28 行的注释去掉,设置 net.ipv4.ip_forward=1
net.ipv4.ip_forward=1 # lin 28 |
激活配置文件设置:
sudo sysctl -p |
查看内核 IP 转发设置,1 表示开启状态:
sudo sysctl net.ipv4.ip_forward |
查看网口信息
ifconfig |
或
ip link show |
可以发现,在 Ubuntu 上 enp123s0f0
用来接入真实物理网络,zt7u3fcxwr
用来接入 zerotier 虚拟网络. 注意后续命令中使用网口名称的地方~
使用 iptables
启用 enp123s0f0
的网络地址转换和 IP 伪装:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE |
允许流量转发和跟踪活动连接:
sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT |
接下来设置从zt7u3fcxwr
到 enp123s0f0
流量转发。 反向规则不是必需的,因为在本文所述场景下没有用到:
sudo iptables -A FORWARD -i ztq5qq26ql -o eth0 -j ACCEPT |
以上配置就完成了.
但是 iptables
规则在重新启动后就无效了. 将上面设置保存为配置文件中.
安装iptables
配置存储工具:
sudo apt-get install iptables-persistent |
保存 iptables 配置到文件:
sudo netfilter-persistent save |
查看 iptables 配置文件内容:
sudo iptables-save |
配置文件保存路径在 /etc/iptables/ 目录下.
2.2 配置 ZeroTier 网络路由管理
增加 1 条路由,Destination 填入 0.0.0.0/0
表示全网,(via) 填入 zt7u3fcxwr
的 IP 地址,点击 Submit 提交.
2.3 配置 Windows 客户端使用转发代理
Windows 可以使用客户端,需要勾选 Allow Global IP
.
开启转发代理:勾选
Allow Default Route
关闭转发代理:取消
Allow Default Route
2.4 配置 Linux 客户端使用转发代理
在 LInux 上启用 ZeroTIer转发代理需要设置内核,使内核允许发送数据的地址和接受数据的地址不同. 默认情况下,当发送地址与接受地址不一致的时候,内核会丢弃接收的数据.
编辑 /etc/sysctl.conf
文件
sudo vim /etc/sysctl.conf |
去掉第 20 行注释,并设置如下
net.ipv4.conf.all.rp_filter=2 # line 20 |
激活配置文件设置
sudo sysctl -p |
允许 ZeroTier One 转发全局流量
sudo zerotier-cli set bd9d193afc1440f7 allowGlobal=1 |
开启转发代理:
sudo zerotier-cli set bd9d193afc1440f7 allowDefault=1 |
关闭转发代理:
sudo zerotier-cli set NetworkID allowDefault=0 |
如果开启转代理后没有正常工作,可以尝试重启 ZeroTier One 服务或重启计算机.
3. 测试
在 Windows 上 ping Ubuntu 上的真实物理网络的 IP 地址,也就是 enp123s0f0
的 IP 地址. 如果 ping 通说明配置成功了.
也可以在 Ubuntu 和 Windows 上查询公网 IP. 如果 Windows 使用了 Ubuntu 的公网 IP,也说明成功了.
curl http://myip.ipip.net |
4. 原文链接
【网络通信】【ZeorTier】基于 zerotier 使用 Linux Kernel 设置转发代理_RadiantJeral的博客-CSDN博客_allow default route