多级 WireGuard: 路由链

有些时候,为了舒服的使用互联网,我们需要不止一台中继服务器,可能的原因包括隐私,安全,连通性,速度等。比如用户想访问某个网站,但是直接连接速度很慢,或者被防火墙阻断了,而又没有任何一台服务器可以同时快速连接客户与目标网站,这时就需要多级路由了。

类似功能的工具有 Tor,proxychains, 以及多级的 v2ray 等,今天用 WireGuard 实现这个过程。

关于 WireGuard 的安装,使用等,可以查看另一篇博客:WireGuard 搭建教程

说是 WireGuard 搭建多级代理,其实多级的核心是 iptables 完成的。在配置单极 WireGuard 的时候,服务器断的脚本有一句 iptables 的命令: iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE。 把流量通过 eth0 网卡发送出去。只要把这里的 eth0 改为 WireGuard 的虚拟网卡,即可拥有下一级 WireGuard 路由。而其他节点的配置无需任何修改。

贴一个中继节点的完整配置,中继服务器上有两个 WireGuard 虚拟网卡 ,一个虚拟网卡名为 cf,是 CloudFlare 的 WireGuard 服务,另一个配置如下。需要注意的是,多级路由不一定只有 2 个,可以有无数个中间节点。

[Interface]
# Name = Nearest Server
Address = 10.9.7.3/24, 2605:6400:40:11b::3/64
ListenPort = 12345
PrivateKey = <private key>
DNS = 8.8.8.8, 2001:4860:4860::8888
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o cf -j MASQUERADE
PostUp = ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o cf -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o cf -j MASQUERADE
PostDown = ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o cf -j MASQUERADE
[Peer]
# Name = Local Computer
PublicKey = <public key>
AllowedIPs = 10.9.7.123/32, 2605:6400:40:111b::123/128

需要注意的是,通常情况下应该先启动转发的中继网卡,在启动出站的目标网卡。