--------------------------------------------
在默认的AP模式中, 无线上网有些故障,路由器采用pppoe拨号上网。但是lan口接PC上网正常。
故障:
用手机wifi时,可以得到路由器分配的IP地址。QQ可以上,也可以视频。但UC,优酷上不去。可以解析DNS,但不能得到数据。
另一台PC使用无线网卡也可以得到路由器分配的IP地址,但有些网站可以打开,如百度,便是更多的网站打不开,如http://blog.chinaunix.net。
解决:
原来使用过routeros,出现的也是这种情况,在routeros里是通过winbox在GUI界面设置成功的。在openwrt中就不知道如何实现一样的效果了。
经过百度和查iptables FAQ手册,用一条命令解决了这个问题,下面三条命令应该是一样的效果,我只用了第一个:
iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o pppoe-wan -j TCPMSS --set-mss 1452
iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o pppoe-wan -j TCPMSS --clamp-mss-to-pmtu
iptables -A zone_wan_MSSFIX -o pppoe-wan -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-------------------------解释----------------------------------------------------------------------------
上面的命令是把离开路由器的包的大小限制一下,省的过大会被丢弃。通过MSS的设置实现的.
这个mss是最大分段的大小。
以太网最大承载1500字节,又称mtu。
mss是mtu的一部分。假设一通过网线直连的局域网,这个mtu值在windows里面默认是1500,局域网络内运行很好。便一旦能过路由pppoe拨号,因为ppp包头需要占用8字节,所以在pppoe拨号成功后,每个数据包最大只能是1492字节,这1492字节里面包含tcp/ip包(各20字节)头,用于上层协议如http的只能是1452(1492-40)字节了。所以需要调整这个参数。
pppoe拨号程序也会自动设置。不过它是在mangle表的forward(一种chain,和postrouting负责一头,一尾处理数据包)里面设置的规则(上面第三个命令)。不知为何没有生效。
上面用了两种方法:
一种是通过在mangle表的POSTROUTING链里新添加一新规则。
二种是通过对zone_wan_MSSFIX(这是pppoe拨号后自动建立的)的设定,也是新规则的添加。
需要加强对iptables的
--------------------解释结束------------------------------------------------------------------------------
-----------------------------------------------
有 一点不解:
pppoe拨号程序已经添加了mangle表的forward链,为何包不能在这里被修改MSS,非得在mangle表postrouting表里修改MSS.
自己的理解是:
mangle forward 并没有过滤wifi的包,所以没有产生作用。而mangle表postrouting链会处理所有的包。
补充:
其实用下面命令也可以:
iptables
-A FORWARD -i $iface -p tcp --tcp-flags SYN SYN -j TCPMSS
--clamp-mss-to-pmtu
$iface : 我的是pppoe-wan
注意,这是是指-i pppoe-wan ,而不是在-o pppoe-wan上,一样的生效。当然进入时处理可能更有效一些。
http://blog.sina.com.cn/s/blog_70eb19f20100qptg.html
阅读(4349) | 评论(0) | 转发(0) |