手当たり次第に書くんだ

飽きっぽいのは本能

VyOS PPPoE 利用時の MTU と MSS

PPPoE を利用する環境では、MTU と MSS の理解が重要になります。普段の通信では意識しなくても、WAN 回線、PPPoE、VPN、トンネルを組み合わせると、特定サイトに接続できない、通信が途中で止まる、HTTPS だけ不安定になるといった症状につながることがあります。

この記事は、現在の主軸である 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 パケットの最大サイズ
MSSTCP ペイロードとして送れる最大サイズ
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
save

ping による確認

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 1414

TCP 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 の記事としては、バージョン番号よりも、どの経路でどのサイズが問題になるのかを整理する方が重要です。

VyOS PPPoE 利用時の MTU と MSS

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る