我正在寻找一种方法,在 NAT 后面为通过同一 VPN 隧道连接的不同客户端在不同的 IPv4 地址上转发传出的流量。
现在,我正在将端口 44158 从 VPS 服务器 X 上的多个公共 IPv4 地址转发到通过单个 VPN 连接连接的多个客户端(从 NAT 后面的路由器)。接收公共 IPv4 地址上的输入端口 44158 无法更改,路由器后面的客户端在正确的端口 44158 上接收数据,因为路由器设置为将数据转发到目的地的每个客户端的正确端口。
这样做是这样的:
iptables -t nat -A PREROUTING -d 103.143.72.84 -p tcp --dport 44158 -j DNAT --to-destination 192.168.52.2:44158
iptables -t nat -A PREROUTING -d 103.143.72.25 -p tcp --dport 44158 -j DNAT --to-destination 192.168.52.2:44159
iptables -t nat -A POSTROUTING -s 192.168.52.0/24 -j MASQUERADE
192.168.0.2
目的地路由器在哪里,它将数据包转发到其内部 NAT 到客户端,从44158
到192.168.0.12:44158
以及从44159
到192.168.0.13:44158
。
我想要实现的是让所有来自 192.168.0.12 的出站流量都通过 103.143.72.84 退出,所有来自 192.168.0.13 的出站流量都通过 103.143.72.25 退出。有没有办法iptables
在 VPS 服务器 X 上做到这一点?
我有这个无法更改的硬件设置,客户端 A (192.168.0.12) 和 B (192.168.0.13) 连接到 LAN 上的路由器 N,并且位于 NAT 网络 192.168.0.0/24 上。路由器 N 通过 VPN 连接到 VPS 服务器 X 并获取 IP 192.168.52.2。服务器 X 有多个 IPv4 公有地址(103.143.72.84 和 103.143.72.25)。我想在服务器 X 上为每个客户端 IP 分配一个单独的出站公有 IP。
- 使用的 IP 用于示例目的;
- 为了简单起见,我保留了两个客户端的示例,但实际上还涉及更多内容。
答案1
传出流量使用情况iptables -t nat -A POSTROUTING ...
并指定源地址使用-j SNAT ip
iptables -t nat -A POSTROUTING -s 192.168.0.12 -j SNAT 103.143.72.84
iptables -t nat -A POSTROUTING -s 192.168.0.13 -j SNAT 103.143.72.25
MASQUERADE
请注意,如果您有该范围,这些必须在全局之前。
如果所有 IP 都是线性范围,那么还有其他方法可以对该范围进行 NAT。