VyOS で PPPoE を使う環境では、MSS / MTU の扱いが通信品質に直結します。普段は意識しなくても、PPPoE、VPN、トンネル、PBR を組み合わせると、特定サイトだけ開けない、HTTPS だけ途中で止まる、大きなファイル転送だけ不安定になる、といった症状につながることがあります。
vyos mss で調べる時に重要なのは、固定値を暗記することではありません。どの経路の実効 MTU が小さくなっているのか、PMTUD が働いているのか、どの TCP SYN に MSS clamp を当てるのかを順番に確認することです。
この記事では、VyOS 1.5 系で読むことを前提に、PPPoE 経路で MTU と MSS を確認する流れをまとめます。細かなコマンド差分は利用している ISO と回線方式で確認してください。
書籍
ルーティング、NAT、VPN、MTU / MSS、ネットワーク設計の基礎を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
この記事の結論
- MTU は IP パケットとして運べる最大サイズ、MSS は TCP ペイロードの最大サイズである
- PPPoE では一般的に MTU 1492 を意識するが、VPN やトンネルを重ねるとさらに小さくなる
- MSS clamp は TCP SYN の MSS 値を補正する設定であり、すべての通信を小さくする設定ではない
- PMTUD が正しく働かない経路では、MSS clamp が実務上の回避策になることがある
- 設定後は
pingとtcpdumpで、経路と SYN の両方を確認する
MTU と MSS の違い
| 項目 | 見る層 | 意味 |
|---|---|---|
| MTU | IP / link | 経路上で運べる IP パケットの最大サイズ |
| MSS | TCP | TCP ペイロードとして送れる最大サイズ |
| PMTUD | 経路 | フラグメントせずに通る MTU を見つける仕組み |
| MSS clamp | TCP SYN | 相手へ通知する MSS 値を経路に合わせて補正する仕組み |
IPv4 の TCP では、単純化すると MSS は MTU から IP ヘッダ 20 バイトと TCP ヘッダ 20 バイトを引いた値として考えます。MTU 1500 なら MSS 1460、MTU 1492 なら MSS 1452 が目安です。ただし、VPN や追加トンネルが重なる場合は、実効 MTU がさらに小さくなります。
PPPoE で MTU が小さくなる理由
Ethernet の標準的な MTU は 1500 バイトですが、PPPoE では PPPoE / PPP のヘッダ分だけ実効 MTU が小さくなります。そのため、PPPoE インターフェイスでは MTU 1492 を見ることが多くなります。
ただし、1492 という値だけを入れて終わりではありません。PPPoE の先に VPN、IPsec、GRE、OpenVPN などを重ねる場合、TCP から見える実効サイズはさらに小さくなります。
PPPoE インターフェイスの MTU を指定する
次は、PPPoE インターフェイスに MTU 1492 を指定する例です。ユーザー名、パスワード、source interface は環境に合わせます。
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
saveDF ping で経路 MTU を確認する
IPv4 では、DF ビットを立てた ping で、フラグメントせずに通るサイズを確認できます。-s は ICMP データ部分のサイズなので、IP ヘッダと ICMP ヘッダを含む全体サイズとは異なります。
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ここで見るのは、ある固定値が正しいかどうかではなく、その経路でフラグメントなしに通る最大サイズです。宛先、プロバイダー、トンネル、Firewall の扱いによって結果は変わります。
TCP MSS clamp を使う
PPPoE や VPN 経路で TCP 通信だけが不安定な場合、MSS clamp を検討します。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この例では inside という policy route を前提にしています。実際には、LAN 側インターフェイスへ policy route が適用されているか、対象通信がその policy を通っているかを合わせて確認します。
tcpdump で SYN の MSS を見る
設定後は、設定コマンドだけでなく、実際の TCP SYN に含まれる MSS 値を確認します。MSS clamp が効いていれば、対象経路へ入る SYN の MSS が指定値に補正されます。
show configuration commands | match 'tcp-mss'
sudo tcpdump -ni eth1 'tcp[tcpflags] & tcp-syn != 0'よくあるつまずき
| 症状 | 見る場所 | 考え方 |
|---|---|---|
| HTTPS だけ不安定 | PMTUD、ICMP、MSS | TCP の大きなセグメントが詰まっていないか見る |
| ping は通るが Web が遅い | DF ping と tcpdump | 疎通確認と TCP セッションを分ける |
| MSS clamp が効かない | policy route の適用インターフェイス | 対象通信が policy を通っているか見る |
| 値を下げても改善しない | Firewall、NAT、経路、DNS | MSS 以外の問題も切り分ける |
| 小さくしすぎた | スループットと再送 | 必要以上に MSS を下げない |
まとめ
VyOS の MSS / MTU 設定では、PPPoE の MTU 1492 や MSS 1452 という目安だけで判断しません。VPN やトンネルを重ねた経路では、実際に通るサイズと TCP SYN の MSS を見ながら調整します。
MSS clamp は便利ですが、万能薬ではありません。PMTUD、Firewall、NAT、PBR、VPN の経路を確認したうえで、どのインターフェイスを通るどの TCP SYN を補正するのかを決めることが重要です。

