我有两台单网卡机器A、B,他们连在同一交换机上,
A机器如下配置:
ifconfig eth0 192.168.2.1
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to-source 192.168.16.2
B机器如下配置:
ifconfig eth0 192.168.2.3
现在我在A机器pingB机器,ping不通,因为ping包被修改源地址,B机器无法返回ping包
我再用B机器pingA机器,可以通,我的问题是A机器返回给B的ping回应包为何没有被iptables修改源地址,如果被修改的话,源地址将会变为
192.168.16.2,那么B机器将不接受这个包才对,因为B没有给192.168.16.2发过包,但是却可以ping通,并且A返回的回应PING包源地址没有被
改变为192.168.16.2,还是192.168.2.1,这是为什么呢?iptables不起作用吗?
原帖由 ShadowStar 于 2008-11-3 16:44 发表
并不是BUG,而是你没了解netfilter的机制。
因为NAT是基于nf_conntrack的,并且NAT的信息是在NEW状态时才会设置的。skb的NAT动作是根据所属conntrack的配置来进行,并不是孤立的。
原帖由 Au_Hank 于 2008-11-3 13:23 发表
到底是为什么要做!(IPCB(skb)->flags & IPSKB_REROUTED)这个测试呢?我看了九贱兄弟关于IPSEC的分析:
http://blog.chinaunix.net/u/12313/showart_326041.html
是否因为IPSEC引入这个检查?如果是的话,为什么要这么做呢,九贱兄能否解释下啊?
回复 platinum
PREROUTING也只匹配连接的第一个包,但为什么不判断!(IPCB(skb)->flags & IPSKB_REROUTED ...
20040925 发表于 2010-12-01 16:52
我有两台单网卡机器A、B,他们连在同一交换机上,
A机器如下配置:
ifconfig eth0 192.168.2.1
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to-source 192.168.16.2
B机器如下配置:
ifconfig eth0 192.168.2.3
现在我在A机器pingB机器,ping不通,因为ping包被修改源地址,B机器无法返回ping包
我再用B机器pingA机器,可以通,我的问题是A机器返回给B的ping回应包为何没有被iptables修改源地址,如果被修改的话,源地址将会变为
192.168.16.2,那么B机器将不接受这个包才对,因为B没有给192.168.16.2发过包,但是却可以ping通,并且A返回的回应PING包源地址没有被
改变为192.168.16.2,还是192.168.2.1,这是为什么呢?iptables不起作用吗?
Au_Hank 发表于 2008-11-03 13:23
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |