PPPoE を利用する環境では、MTU と MSS の理解が重要になります。普段の通信では意識しなくても、WAN 回線、PPPoE、VPN、トンネルを組み合わせると、特定サイトに接続できない、通信が途中で止まる、HTTPS だけ不安定になるといった症状につながることがあります。
書籍
ルーティング、NAT、VPN、ネットワーク設計の基礎を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
この記事は、現在の主軸である VyOS 1.5 で読むことを前提に、過去の VyOS 1.4 記事の内容も整理しています。PPPoE 利用時の MTU / MSS はバージョン差よりも、インターフェイス、経路、NAT、firewall をどう組み合わせるかが重要です。細かなコマンドや表示は利用している ISO で確認してください。
MTU と MSS の違い
MTU は IP パケットとして運べる最大サイズ、MSS は TCP ペイロードとして通知される最大サイズです。MSS は TCP SYN で通知される値であり、MTU から IP ヘッダと TCP ヘッダを差し引いて考えます。
| 項目 | 意味 |
| MTU | 経路上で運べる IP パケットの最大サイズ |
| MSS | TCP ペイロードとして送れる最大サイズ |
| PMTUD | 経路 MTU を検出する仕組み |
PPPoE で MTU が小さくなる理由
Ethernet の標準的な MTU は 1500 バイトですが、PPPoE では PPPoE / PPP のヘッダ分だけ実効 MTU が小さくなります。一般的な PPPoE では MTU 1492 として扱われます。ただし、回線方式、トンネル、事業者側の構成によっては、さらに小さい値を考える必要があります。
古い記事ではフレッツ光やトンネル構成を前提に 1454 バイト付近の検証を書いていました。ここでは固定値を暗記するより、実際の経路で確認することを重視します。
PPPoE クライアント設定例
configure
set interfaces pppoe pppoe0 authentication user 'user@example.net'
set interfaces pppoe pppoe0 authentication password 'password'
set interfaces pppoe pppoe0 source-interface 'eth1'
set interfaces pppoe pppoe0 mtu '1492'
commit
saveping による確認
DF ビットを立てた ping で、フラグメントせずに通るサイズを確認します。実際の宛先や経路によって結果は変わるため、利用している回線で確認します。
ping 8.8.8.8 -c 4 -M do -s 1472
ping 8.8.8.8 -c 4 -M do -s 1464
ping 8.8.8.8 -c 4 -M do -s 1414TCP MSS を調整する
PPPoE や VPN 経路で TCP 通信だけが不安定な場合、MSS clamp を検討します。これは TCP SYN の MSS 値を調整し、経路上で大きすぎる TCP セグメントが流れないようにする考え方です。
configure
set policy route inside rule 3000 protocol 'tcp'
set policy route inside rule 3000 tcp flags 'SYN'
set policy route inside rule 3000 set tcp-mss '1414'
commit
saveパケットで確認する
sudo tcpdump -ni eth1 'tcp[tcpflags] & tcp-syn != 0'
show configuration commands | match 'tcp-mss'まとめ
PPPoE の MTU / MSS は、単に小さい値を入れればよいという話ではありません。PPPoE、VPN、トンネル、IPsec などでヘッダオーバーヘッドが増える場合に、MTU、PMTUD、MSS、実際のパケットを合わせて確認します。VyOS の記事としては、バージョン番号よりも、どの経路でどのサイズが問題になるのかを整理する方が重要です。

