歡迎您光臨本站 註冊首頁

PPPoE網關Iptables MTU怪問題

←手機掃碼閱讀     火星人 @ 2014-03-29 , reply:0

問題描述
Iptables作SNAT網關時候, 發現一些PC機不能正常訪問一些站點,表現為瀏覽器可以解析站點, 部分打開站點, 接著就超時了。

原因
ADSL的PPPoE連接的MTU是1492, 而Widows和Linux預設的MTU是1500, 當瀏覽器相WEB伺服器發送請求時, 要求MSS是1460, 一些站點屏蔽了ICMP3/4訪問或者禁用了PMTUD協議而導致MSS值是1460, 當WEB伺服器返回的包小於1452時,客戶端可以正常接受數據, 超過1452時候無法得到數據。

解決方法
1、使用ping找到你的MAX MTU Size
ping -l mtu_size-28 -f your_gateway
從1500開始,知道沒有收到錯誤信息the Packet needs to be fragmented but DF set。 28是IP和ICMP協議所用的位元組。一般而言PPPoE是1492。

2、調整PC的MTU

Windows 2000/XP

註冊表:HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services TcpipParameters Interfaces, and (Edit -> New -> DWORD Value), and name the value MTU.
Double-click the new value, choose the Decimal option, and type the MTU value determined above. 重啟。

Windows 98

註冊表: HKEY_LOCAL_MACHINE System CurrentControlSet Services ClassNet 增加MaxMTU string項,

Linux
ifconfig interface mtu mtu_size

3、調整網關

Iptables

增加規則:

iptables -o ppp_interface -I FORWARD 1 -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu
出站包大小改為pppx的MTU尺寸。

或者 clamp mss size in pppoe
RedHat修改/etc/sysconfig/networking-script/ifcfg-ppp0
CLAMPMSS=1452

Debian
修改 /etc/ppp/peers/dsl-provider
增加
pty "/usr/sbin/pppoe -I eth1 -T 80 -m 1452
註釋掉 plugin, rp-pppoe.so 好像有bug

[火星人 ] PPPoE網關Iptables MTU怪問題已經有1369次圍觀

http://coctec.com/docs/linux/show-post-201462.html