相对于各种流量加密方式,个人偏好使用 IKEv2(Internet Key Exchange,因为众所周知的原因,下文以 IKE 代替)。iOS、macOS、Android 及 Windows 等原生支持 IKE 连接,且稳定性较高,支持断线重连,在大多数情况不易被干扰。据个人体验,在通过蜂窝数据使用 IKE 时的体验最佳。但在部分地方 ISP 网络下,IKE 连接可能遇到较为严重的阻断。

这种阻断是局部性的,属于地方 ISP 的独立行为,他们封禁了 IKE 连接使用的特定端口。这种阻断通常只针对与境外服务器的通讯。于是,我们可以利用未被阻断地区的境内机房进行 IKE 流量中转,达到防止 IKE 连接被阻断,甚至加速、提高稳定性的目的。

流量转发

概括起来,流量转发结构可以这样表示:

客户端 <- – UDP – -> 中转服务器 <- – UDP – -> 目标服务器

在这里,我们称境内服务器为“中转服务器” [R],称最终用作 IKE 节点的境外服务器为“目标服务器” [D]。

假定目标服务器 [D] 已使用 strongSwan 配置好 IKE 连接,可以在无阻断的环境下正常连接。(配置 strongSwan 挺坑的,如果希望搭建自己的 IKE 服务,可以使用这位大佬的一键脚本或参照其教程。)

我们使用各 Linux 发行版自带的 iptables 在中转服务器 [R] 上进行端口转发。默认情况下,IKEv2 连接使用 UDP 500 和 4500 端口。

IKE runs over UDP ports 500 and 4500, and implicitly sets up ESP and AH associations for the same IP addresses it runs over.

参见 RFC4306 – Section 2.11

IKE 还会发起 ESP 通讯,但如果我没有理解错的话,ESP 将在进行 UDP 协议后再建立。我进行转发配置时没有转发 ESP,但仍可进行正常连接。(如果连接不上可以尝试添加 ESP 转发。)

在本文中,发往中转服务器 [R] 的 UDP 500 和 4500 端口的流量被转发至目标服务器 [D] 的相同端口,目标服务器 [D] 处理完毕将数据发回中转服务器 [R]。客户端只需要和中转服务器 [R] 进行 UDP 连接。

iptables 转发

在中转服务器 [R] 上设置转发。该服务器的 iptables 应 ACCEPT 相关端口,或者无任何设置。

为方便操作,首先分别为中转服务器 [R] 和目标服务器 [D] 的公网 IP 地址设定环境变量 $RIP$DIP

export RIP="100.100.100.100"
export DIP="200.200.200.200"

顺带一提,可以使用 curl https://api.ip.sb/ip 来获取服务器公网 IP。

添加端口转发,使发送至此中转服务器 [R] 的 UDP 500 及 4500 端口的数据转发至目标服务器 [D]。

iptables -t nat -A PREROUTING -p udp -m udp --dport 500 -j DNAT --to-destination $DIP:500
iptables -t nat -A PREROUTING -p udp -m udp --dport 4500 -j DNAT --to-destination $DIP:4500

接收目标服务器 [D] 发回中转服务器 [R] 的数据。

iptables -t nat -A POSTROUTING -d $DIP -p udp -m udp --dport 500 -j SNAT --to-source $RIP
iptables -t nat -A POSTROUTING -d $DIP -p udp -m udp --dport 4500 -j SNAT --to-source $RIP

查看这四条规则是否生效,两个 IP 不要弄反了。

iptables -t nat -L

最后记得用你偏好的方法保存这些规则,以防重启后失效。

连接设置

客户端的设置和直接连接目标服务器时的设置基本相同,只是服务器地址发生变化,需要更改为中转服务器的地址。

切记 Left ID(在 iOS 及 macOS 上称为“远程 ID”)是目标服务器的 ID(通常是 FQDN),不要进行更改。

写在最后

此方法仅作记录和参考,可能不适用于所有情况。

要注意,经过中转,延迟和带宽都会有损失。在中转服务器上开启 TCP BRR 等 TCP 加速功能对 IKE 流量没有效果。

即使客户端和中转服务器间的连接正常,中转服务器和目标服务器的连接也可能出现被阻断的情况。但由于 ISP 对 IKE 的封禁通常只针对家庭网络,所以使用机房服务器进行中转的效果通常还不错。


本文欢迎转载和再创作,但请注明本文链接及作者,并使用相同的许可,谢谢。更多信息
本文地址:https://www.zhiwei.me/2018/08/forwarding-ikev2-connection-using-iptables/


广告 | 推荐 Adblock Plus