网络拓扑:
路由器:10.0.0.1 网关: 10.0.0.2 服务器:10.0.0.5
服务器拿到的路由表:
default via 10.0.0.2 dev enp2s0 proto dhcp src 10.0.0.5 metric 100
10.0.0.0/24 dev enp2s0 proto kernel scope link src 10.0.0.5
10.0.0.2 dev enp2s0 proto dhcp scope link src 10.0.0.5 metric 100
路由器是 tplink 的,网关是 openwrt 。
如果直接设置在 tplink 的端口转发 12345:tplink:10.0.0.5:12345 无法连上,在 0.5 上抓包表现为:
入:外网进来,到 0.5 的 12345 的包 回:0.5 到外网的出去的包。
很显然,这个时候回包的 dst 是外网地址,走 0.2 出去
0.1 发出去的包 src=外网,dst=0.5 0.1 收到的包 src=0.2,dst=外网 无法匹配。
所以这种情况如何搞呢?
我想到这么几个解决方案:
- 把 0.5 的 gw 设置为 0.1 (但是此时 0.5 的网络环境就不好了)
- 把转发关系设给 0.2,0.2 再转发给 0.5 (不太稳定,有时候容易坏,而且配置麻烦)
- 0.5 的回包想办法不给 0.1 (需要在 0.5 上配置 iptables ?)
- 0.5 不动,网关=0.2 上,改回包的 src 让 0.1 能匹配上
- 内网搞一台 linux 机器单独做转发网关(取代 0.2 )——也不是不行
0.2 是 openwrt 的单臂旁路网关,写了一句:
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
作为转发配置。
求教各位大佬如何做比较好呢。。。