斐讯K2 UDP转发的问题(时钟无法同步)
斐讯K2使用过程中,发现有时会出现时钟无法同步的现象,而且一般是做二级路由的情况下出现,定位过程如下
NTP时钟同步使用的UDP 123号端口,我们在本地搭建环境,用两台K2,一台地址为192.168.1.1,PPPOE拨号上网
另一台无线中继到第一台,WAN地址为192.168.1.122,LAN地址为192.168.2.1
先在第二台上把系统的ntp给关掉:
/etc/init.d/sysntpd stop
采用手工同步命令同步时钟:
/usr/sbin/ntpd -n -d -p clock.fmt.he.net
正常情况下应该是这样的:
正常情况下抓取的报文信息:
把端口转发或DMZ打开,然后再运行:
/usr/sbin/ntpd -n -d -p clock.fmt.he.net
报文是这样的:
可以看到,很多报文是超时的,为什么会这样呢?
我们简化一下组网,在本地进行测试,主要测试K2对UDP的转发处理,在K2的LAN接一台计算机,运行IPOP的UDP客户端(192.168.2.203),在K2的WAN口接一台计算机,运行IPOP的UDP服务端(192.168.1.227):
正常情况下,客户端能够发送和接收到UDP报文:
服务端信息:
抓包报文:
注意端口转换信息:客户端是22211-22213,NAT转换后是58706-58708
然后我们开启端口转发,会发现端口转换错误:
客户端收不到返回报文:
服务段收到了客户端的请求,但是会发现客户端的端口没有变化:
抓包报文也显示NAT转换时端口没有变化:
客户端源端口是变化的,经过NAT转换后,源端口变成一样了,这样返回的UDP报文会找不到正确的客户端源端口返回数据,造成客户端无法正确的接受UDP返回报文
为什么会造成此问题?
查看源码会发现,导致此问题的语句为:
端口转发:
iptables -t nat -A port_forward_postrout -d 192.168.2.2/32 -o br-lan -p tcp -j MASQUERADE
DMZ:
iptables -t nat -A DMZ_postrout -d 192.168.2.2/32 -o br-lan -j MASQUERADE
上面两条语句都是对br-lan接口增加了MASQUERADE规则
未完待续..
评论:1