【网络通信】【ZeorTier】基于 zerotier 使用 Linux Kernel 设置转发代理
本文记录基于 zerotier 使用 Linux Kernel 设置转发代理.
学习研究 ZeroTier 的系列文章.
本文记录基于 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
net.ipv4.ip_forward = 0
编辑配置文件开启 Linxu 内核的 IP 数据转发:
sudo vim /etc/sysctl.conf
将第 28 行的注释去掉,设置 net.ipv4.ip_forward=1
net.ipv4.ip_forward=1 # lin 28
激活配置文件设置:
$ sudo sysctl -p
net.ipv4.ip_forward = 1
查看内核 IP 转发设置,1
表示开启状态:
$ sudo sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
查看网口信息
$ ifconfig
或
$ ip link show
可以发现,在 Ubuntu 上 enp123s0f0
用来接入真实物理网络,zt7u3fcxwr
用来接入 zerotier 虚拟网络. 注意后续命令中使用网口名称的地方~
使用 iptables
启用 enp123s0f0
的网络地址转换和 IP 伪装:
sudo iptables -t nat -A POSTROUTING -o enp123s0f0 -j MASQUERADE
允许流量转发和跟踪活动连接:
sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
接下来设置从zt7u3fcxwr
到 enp123s0f0
流量转发。 反向规则不是必需的,因为在本文所述场景下没有用到:
sudo iptables -A FORWARD -i zt7u3fcxwr -o enp123s0f0 -j ACCEPT
以上配置就完成了.
但是 iptables
规则在重新启动后就无效了. 将上面设置保存为配置文件中.
安装 iptables 配置存储工具:
$ sudo apt-get install iptables-persistent
保存 iptables 配置到文件:
$ sudo netfilter-persistent save
run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
查看 iptables 配置文件内容:
$ sudo iptables-save
# Generated by iptables-save v1.6.0 on Mon Aug 10 16:34:56 2020
*filter
:INPUT ACCEPT [847:52680]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [826:49425]
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i zt7u3fcxwr -o enp123s0f0 -j ACCEPT
COMMIT
# Completed on Mon Aug 10 16:34:56 2020
# Generated by iptables-save v1.6.0 on Mon Aug 10 16:34:56 2020
*nat
:PREROUTING ACCEPT [16:1248]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [984:59012]
:POSTROUTING ACCEPT [983:58980]
-A POSTROUTING -o enp123s0f0 -j MASQUERADE
COMMIT
# Completed on Mon Aug 10 16:34:56 2020
配置文件保存路径在 /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
net.ipv4.conf.all.rp_filter = 2
允许 ZeroTier One 转发全局流量
sudo zerotier-cli set NetworkID allowGlobal=1
开启转发代理:
sudo zerotier-cli set NetworkID 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/
更多推荐
所有评论(0)