更改 iptables 命令以选择性转发

更改 iptables 命令以选择性转发

按照教程,我为一些朋友设置了 v2ray VPN。设置过程中,我们需要两台服务器:EU 和 IR。EU 服务器位于欧洲,v2ray 安装在该服务器上。IR 服务器位于国内,将所有流量转发到 EU 服务器。之所以需要它,是因为审查非常严格,有时您只能连接到国内服务器。

到目前为止一切运行良好,但我们需要添加更多 EU 服务器,IR 服务器应选择性地将流量转发到 EU1 或 EU2。我们计划为每个 EU 服务器指定一系列端口。因此,如果请求来自 v2ray 客户端,并且端口在 10000 到 19999 之间,那么我们希望将其转发到 EU1 服务器,如果端口在 20000 到 29999 之间,那么它将被转发到 EU2。

我们当前拥有的 iptables 命令如下:

sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to-destination IR_SERVER_IP
iptables -t nat -A PREROUTING -j DNAT --to-destination EU_SERVER_IP
iptables -t nat -A POSTROUTING -j MASQUERADE

我尝试理解这些命令,并理解-t nat选择 nat 表并-p tcp如果协议是 tcp。但这--dport 22让我很困惑。每个 v2ray 连接都有一个唯一的端口,该端口永远不会是 22。

我们需要对命令做哪些更改才能满足我们的需求?

答案1

答案很简单:无论您转发哪种流量,您仍然必须能够管理您的“IR”服务器。这是通过 ssh 完成的,默认情况下,ssh 监听端口 22。DNAT 规则可能存在,以避免端口 22 的流量与下一个规则匹配,该规则将目标 IP 无条件更改为您的 EU 服务器,无论使用哪种协议/端口。

规则iptables -t nat -A PREROUTING -p tcp --dport 22 -j ACCEPT会做同样的事情(并且使其意图更加明确)。如果您知道 v2ray 流量的目标端口在 10000 到 29999 之间,则可以删除此规则,并将这些约束添加到您的 DNAT 规则中。

我不熟悉 v2ray VPN,也不知道与 v2ray 通信的协议是 tcp 还是 udp - 我插入了两者以确保无误。根据您的描述,这些规则应该可以完成工作:

sysctl net.ipv4.ip_forward=1
# clear all previous rules:
iptables -t nat -F

# add new rules:
iptables -t nat -A PREROUTING -d IR_SERVER_IP -p tcp --dport 10000:19999 -j DNAT --to-destination EU_SERVER_IP1
iptables -t nat -A PREROUTING -d IR_SERVER_IP -p udp --dport 10000:19999 -j DNAT --to-destination EU_SERVER_IP1
iptables -t nat -A PREROUTING -d IR_SERVER_IP -p tcp --dport 20000:29999 -j DNAT --to-destination EU_SERVER_IP2
iptables -t nat -A PREROUTING -d IR_SERVER_IP -p udp --dport 20000:29999 -j DNAT --to-destination EU_SERVER_IP2
iptables -t nat -A POSTROUTING -j MASQUERADE

再说一次,我不了解 v2ray - 因此我无法判断此设置是否需要更多的端口转发才能正常工作。

相关内容