1. 確認options.pptpd有以下兩行php
mtu 1440tcp
mru 1440ide
2. 須要添加一條iptables規則:post
iptables -I FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtuthis
這樣就能夠打開了。
另外,給出一個臨時的解決方案,當mtu報錯的時候能夠直接了本地修改mtu值:spa
ifconfig ppp0 mtu 1440orm
關於這條命令的詳細說明繼續往下看
-------------------割
參考一個新的解決方案,在5#xml
iptables -A FORWARD -p tcp –syn -s 192.168.100.0/24 -j TCPMSS –set-mss 1356ip
This sounds like a common problem with MTU size.
If you're adding iptables rules to accept traffic then that's the cause.
Traffic must be clamped to the MTU size in iptables before it hits a rule that accepts it.
Post your firewall script, any ××× specific scripts that contain iptables rules, and the output of this command.ci
iptables -vnL FORWARD
You should be able to fix it by adding this command to the end of your ××× script or firewall script, whichever has your iptables rules that are accepting traffic.
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
有看到一種iptables的寫法,這個大概能夠不修改mtu?以下:
mtu:Maxitum Transmission Unit 最大傳輸單元。
mss:Maxitum Segment Size 最大分段大小。
mtu mss(應用層數據)+tcp包頭+IP包頭
mss大小是通信雙方在創建TCP鏈接時根據雙方提供的 MSS值的最小值肯定爲此次鏈接的最大MSS值。
tcp數據包包頭大小20Byte。
ip數據包包頭大小20Byte。
若是超過mtu的大小就須要對ip報文進行分片。
若是ip報文中有DF(Donot Fragment)標記就表示不可分片。
若是報文超過MTU值又不能分片,就會丟棄報文,返回一個錯誤信息unreachable-need to frag(不可到達,須要分片)。 如圖所示。
出現這種現象的解決辦法以下:
修改數據報文的mss大小。
iptables -A FORWARD -p tcp –syn -s 192.168.100.0/24 -j TCPMSS –set-mss 1356
凡是來自192.168.100.0/24網段的tcp包,mss設置爲1356.