@
mjikop1231 其实关键不是是不是一个内网,而是返回的包没用经过网关转发,参考下面的分析:
假设你的公网 IP 是 1.1.1.1 ,网关的三个网络接口分别为 wan0, lan0, lan1 。服务器所在的 DMZ 为 10.12.0.0/16 ,接到网关的 lan0 上,另有一个主机为 10.16.0.1/16 ,接到网关的 lan1 上
1. 从 10.16.0.1:12345 发起请求,四元组为 (10.16.0.1, 12345, 1.1.1.1:80),从 wan0 进入网关
2. 网关机器收到该请求,进行了 DNAT ,四元组变为 (10.16.0.1, 12345, 10.12.17.201, 80),从 lan0 发送给 服务器
3. 10.12.17.201 收到了这个请求,四元组为 (10.16.0.1, 12345, 10.12.17.201, 80)
4. 10.12.17.201 进行回复时,回复的包四元组为 (10.12.17.201, 80, 10.16.0.1, 12345),从 lan0 发送给网关
5. 网关上配置了 10.16.0.0/16 走 lan1 ,因此这个包会通过 lan1 发送给 10.16.0.1
发送的链路为 lan1-wan0-lan0 ,其中在 wan0-lan0 上进行了 DNAT ,回来的链路却是 lan0-lan1 ,而不是 lan0-wan0-lan1 ,自然就失败了