基于源的DNAT转发

基于源的DNAT转发

我想使用两个不同的 Google Cloud VPN 网关GW_IP_1以及GW_IP_2两个 NAT 后路由器以及R1来设置两个 IPSec 隧道R2。像这样的东西:

GW_IP_1 ---\                                    /--- R1
            |-- my_main_router_NAT_firewall ---|
GW_IP_2 ---/                                    \--- R2

问题:根据网关(和) 的源 IP 地址将UDP端口转发500到特定路由器(和)。R1R2GW_IP_1GW_IP_2

我最终遇到了一种奇怪的情况:一条隧道已启动,数据包匹配并正确转发,但数据包对于第二个路由器 R2不匹配,看起来它们消失在某个地方。

在主 NATting 路由器上,我创建了 DNAT 规则:

-t nat -A PREROUTING -p udp -s GW_IP_1 --dport 500 -j DNAT --to R1:500
-t nat -A PREROUTING -p udp -s GW_IP_2 --dport 500 -j DNAT --to R2:500

我在和tcpdump上运行。收到数据包并打开隧道,R1R2R1但 R2 没有看到任何 500 的数据包。然后我也运行tcpdump来自main_router两者的数据包GW_IP_1并按GW_IP_2预期到达。

我花了几天时间与路由器(Ubiquiti ER-X)等进行斗争,认为这是固件错误或此类路由器特有的问题。但后来我从一开始就设置了一个简单的 Linux 路由器——有两个接口、转发和所有规则,结果是相同的——一个隧道已启动(数据包被正确转发),而第二个路由器没有收到任何数据包。

iptables所以这可能是/kernel更基本的东西。有人可以解释一下吗?

相关内容