之前用 HiNet 固定制 (不需要 PPPoE,直接設 IP 就會通的那種),跑起來順順的也沒麼問題,最近剛好合約滿了就打算換成非固定制 (需要撥 PPPoE 才會通),結果換完後發現有些網站常常連不上 (不是一直都連不上),但只要設了 proxy.hinet.net
(今年年底要停止服務了) 或是改從 cable 線路出去就正常。
測了不少設定都沒用 (像是改 tcp timestamp 設定,或是 sack 之類的設定),後來發現 MTU 的值不太對,用 ifconfig
看發現我的 ppp0
是 1500
而不是 1492
,直接先 ifconfig ppp0 mtu 1492
改下去測,發現本來不能連的網站就通了...
(補充一下,我看了 Windows 的設定是 1480,所以也沒問題,但不知道怎麼算的...)
查了一下 MTU 相關的問題,發現在「wrong mtu value on dsl connection」這邊有討論到。裡面提到的 workaround 是到 /etc/NetworkManager/system-connections/
裡找出你的 PPPoE 設定檔,然後在 ppp
區域的裡面寫死 mtu
參數:「mtu=1492
」(這邊的 1492
是從 1500 bytes 扣掉 PPPoE 的 8 bytes 得出來的),不過我測試發現在修改設定檔時會被改回來,加上測試發現沒用,只好自己寫一個 /etc/network/if-up.d/pppoe-mtu
惡搞了:
#!/bin/sh -e
if [ "$IFACE" != "ppp0" ]; then
exit 0
fi
/sbin/ifconfig ppp0 mtu 1492
放進去後要記得 chmod 755
。
從 ticket 上面看起來還是沒有解 (2009 年就發現了),看起來 PPPoE 不是絕對多數而且又有 workaround,短期應該不會修正...