CentOS 7 で PPPoE を利用していたとき、Bad TCP checksum が多発した際のメモです。PPPoE 環境では MTU / MSS の扱いが問題になりやすく、TCP MSS 調整で改善する場合があります。
この手順は CentOS 7 設定マニュアル の一部として整理しています。
参考書籍
参考書籍
マスタリング TCP/IP 入門編 第6版
TCP/IP、Ethernet、VLAN、ルーティングなど、ネットワークの基礎を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
MSS 調整
PPPoE では Ethernet の通常 MTU 1500 より小さくなるため、経路上でフラグメントや PMTUD の問題が出ることがあります。TCP SYN に対して MSS を調整する例です。
iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o ppp0 -j TCPMSS --set-mss 1414考え方
この設定は、PPPoE そのものの問題を解決するというより、TCP セッション開始時に相手へ通知する MSS を小さくして、経路上で無理なサイズのパケットが流れにくくするためのものです。
確認するポイント
- ppp0 の MTU を確認する。
- tcpdump で TCP SYN の MSS を確認する。
- iptables mangle ルールの適用順を確認する。
- ルーターや上位装置側でも MSS clamp が行われていないか確認する。
ip link show ppp0
iptables -t mangle -L POSTROUTING -n -v
tcpdump -i ppp0 tcp and tcp[tcpflags] \& tcp-syn != 0Bad TCP checksum はキャプチャ位置やオフロードの影響で見えることもあります。実際の通信不具合と一致しているかを確認してから、MSS 調整やオフロード設定を判断します。
この手順は CentOS 7 設定マニュアル の一部として整理しています。
CentOS 7 PPPoE で Bad TCP checksum が多発したときのメモ



