如何在默认转发伪装策略之前加一个不伪装的策略?
<h1>网络拓扑:</h1>
<ol>
<li>主路由 192.168.10.1</li>
<li>旁路由 192.168.10.2 ,static ,默认网关是 192.168.10.1</li>
<li>DHCP:主路由下发,下发的网关和 DNS 都指向旁路由</li>
<li>旁路由设置以下转发规则:</li>
</ol>
<ul>
<li>iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE</li>
</ul>
<ol>
<li>内网机器 192.168.10.120</li>
<li>端口转发:8888:主路由公网出口 ==> 192.168.10.120:80</li>
</ol>
<h1>遇到的问题</h1>
<p>流量从公网进来,从 192.168.10.1 打到 192.168.10.120 之后,回包是回给公网的,此时回包的数据包回给 192.168.10.2 ,而不是直接给主路由</p>
<p>192.168.10.2 收到其他机器给外网的数据包之后,开始伪装,把 sip 改为自己的 ip ,也就是 NAT 伪装</p>
<p>此时 192.168.10.1 蒙圈了:</p>
<ol>
<li>入站 visitor:12345 => publicip:8888</li>
<li>转发 visitor:12345 => 10.120:80</li>
<li>回包 10.2:80 => visitor:12345 (这个包的 SRC 存疑,不确定回包的端口号是不是 80 )</li>
<li>然后发现转发的地址和回包的地址不对,路由器 drop 这个流量,外网收不到回包</li>
</ol>
<h1>可能的解决方案</h1>
<p>在默认的伪装策略之前加一条,当来源 ip 是 10.120 且来源端口是 80 的时候,直接接受而不是伪装:</p>
<pre><code>iptables -t nat -I POSTROUTING -o eth0 -p tcp -s 192.168.10.120 --source-port 80 -j ACCEPT
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
</code></pre>
<p>但是似乎不生效,求解</p>
<p>看了一下 OP 的 iptables ,发现这个策略没有收到包和流量,看起来是没有命中?</p>
收藏(0)
分享
相关标签:
注意:本文归作者所有,未经作者允许,不得转载
-
2022年6月1日 01:58
旁路由的 nat 没有必要,取消就行了
0
0