- 主题:iptables的SNAT问题
tcp的协议貌似都正常,没啥问题
但是,udp的好像有问题
用conntrack -L查看的结果如下
udp 17 25 src=192.168.1.4 dst=222.0.0.88 sport=56473 dport=30099 [UNREPLIED] src=222.0.0.88 dst=202.0.0.31 sport=30099 dport=56473 mark=0 use=1
内网A机器ip是192.168.1.4,iptables所在机器B的ip是202.0.0.31,对端服务器C的ip是222.0.0.0.88
B机器做了SNAT地址转换,使内网A机器可以上网,这个都没问题,但是
A访问C服务器的udp端口,感觉数据包能出去,但是,回不来
这是什么问题呢?怎么解决呢?
这个conntrack的结果显示UNREPLIED显然是不对的,正常的应该显示ASSURED
--
FROM 202.98.17.*
B上iptables是否允许UDP转发?是否允许UDP的应答包?
iptables的转发、nat、conntrack是比较复杂的,需要仔细检查。
【 在 leeyc 的大作中提到: 】
: tcp的协议貌似都正常,没啥问题
: 但是,udp的好像有问题
: 用conntrack -L查看的结果如下
: ...................
--
FROM 111.196.240.*
B上的iptables
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
有这一条其实就够了吧
没限制协议,icmp、tcp、udp全部允许通过的
-A FORWARD -d 192.168.1.0/24 -j ACCEPT
-A FORWARD -s 192.168.1.0/24 -j ACCEPT
这个也有
【 在 k7amd 的大作中提到: 】
: B上iptables是否允许UDP转发?是否允许UDP的应答包?
: iptables的转发、nat、conntrack是比较复杂的,需要仔细检查。
--
FROM 202.98.17.*
A上TCP能通,UDP不通。
如果iptables看起来没问题(比如,没有其它SNAT/DNAT项、没有在OUTPUT丢弃),
测试B能否访问C的UDP。
【 在 leeyc 的大作中提到: 】
: B上的iptables
: -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
: 有这一条其实就够了吧
: ...................
--
FROM 111.196.240.*
B访问C的udp肯定没问题
目前b上也有udp的服务在跑,一切正常。
而且,同样的问题,在我另外的一个机器上也遇到了
只不过,另外的那个环境下,A是个手机上的voip客户端,C是sip服务器
a能连上c的sip服务器,但是打不了电话,说明从a到c通,但是从a收不到c返回来的udp包
【 在 k7amd 的大作中提到: 】
: A上TCP能通,UDP不通。
: 如果iptables看起来没问题(比如,没有其它SNAT/DNAT项、没有在OUTPUT丢弃),
: 测试B能否访问C的UDP。
: ...................
--
FROM 202.98.17.*
你这是MADQUERADE,不是SNAT啊...
如果说你的POSTROUTING里面就这一条MASQUERADE,理论上udp转发也就OK了。
如果你用了DNAT,那你才需要搭配SNAT让udp包能正确返回。
我建议是在堡垒机上tcpdump下看看有没有收到返回的udp包,再找找别的地方那里把udp包过滤掉了。你的情况按理说应该能work
【 在 leeyc 的大作中提到: 】
: B上的iptables
: -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
: 有这一条其实就够了吧
: ...................
--
FROM 180.111.27.*
MASQUERADE跟SNAT一样,只是动态地址伪装而已
不要纠结这个
之前有兄弟说openwrt上也用iptables,我那个路由器正好就是openwrt的系统,在那个路由器上就没问题
我还特意跑那个路由器上去看他的iptables配置,openwrt的iptables太复杂了,没太看明白
但是,FORWARD部分,openwrt啥也没配置,只是在POSTROUTING和PREROUTING配置了
感觉也没有太特殊的东西啊
为啥我在机器上配iptables就不行呢
网上找到的答案,基本所有的都是加一条SNAT规则完事的那种,也鲜有人提到我的这个问题
【 在 lvsoft 的大作中提到: 】
: 你这是MADQUERADE,不是SNAT啊...
: 如果说你的POSTROUTING里面就这一条MASQUERADE,理论上udp转发也就OK了。
: 如果你用了DNAT,那你才需要搭配SNAT让udp包能正确返回。
: ...................
--
FROM 202.98.17.*
有可能需要应用层处理模块,像ftp那样的。
能否穿越nat主要看应用有没有具体的限制。比如我弄个自定义协议,发送端把源IP和目的IP加密放进载荷,在接收端解密,如果源IP无法访问就丢弃,这样的协议就不能穿过NAT。
【 在 leeyc 的大作中提到: 】
: MASQUERADE跟SNAT一样,只是动态地址伪装而已
: 不要纠结这个
: 之前有兄弟说openwrt上也用iptables,我那个路由器正好就是openwrt的系统,在那个路由器上就没问题
: ...................
--
FROM 159.226.95.*
感觉还是哪里设置不对,缺少配置
导致返回的数据包丢失
数据包能出去,回不来
【 在 k7amd 的大作中提到: 】
: 有可能需要应用层处理模块,像ftp那样的。
: 能否穿越nat主要看应用有没有具体的限制。比如我弄个自定义协议,发送端把源IP和目的IP加密放进载荷,在接收端解密,如果源IP无法访问就丢弃,这样的协议就不能穿过NAT。
:
--
FROM 202.98.17.*
他说的对,我记得sip是有mod的。
你看看有没有nf_conntrack_sip这个模块。
此外可以先用netcat测试下udp通不通
【 在 leeyc 的大作中提到: 】
: 感觉还是哪里设置不对,缺少配置
: 导致返回的数据包丢失
: 数据包能出去,回不来
: ...................
--
FROM 180.111.27.*