VyOS の TCP MSS clamp は、PPPoE、VPN、GRE、IPsec などで実効 MTU が小さくなる経路に対して、TCP SYN の MSS 値を補正するための設定です。通信全体を小さくする機能ではなく、TCP セッション開始時に相手へ伝える最大セグメントサイズを調整します。
Web 表示や SSH、Git、API 通信などで、小さな通信は通るのに大きな通信だけ止まる場合、MTU / MSS / PMTUD の問題が疑われます。特に PPPoE や VPN を重ねている環境では、経路上のオーバーヘッドを考慮する必要があります。
この記事では、VyOS 1.5 系で読むことを前提に、TCP MSS clamp の役割、値の決め方、policy route での設定例、tcpdump による確認手順をまとめます。
書籍
MTU / MSS、TCP、ルーティング、VPN、ネットワーク設計の基礎を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
この記事の結論
- MSS clamp は TCP SYN の MSS 値を補正する設定である
- PPPoE / VPN / tunnel のように MTU が小さくなる経路で検討する
- 値は固定暗記ではなく、経路 MTU とヘッダオーバーヘッドから考える
- 設定後は tcpdump で SYN の MSS が変わっているか確認する
- PMTUD が正常に働く構成では不要な場合もある
MTU と MSS の関係
MTU は、経路上で運べる IP パケットの最大サイズです。MSS は TCP のペイロード最大サイズで、通常は MTU から IP ヘッダと TCP ヘッダを引いた値として考えます。
| 項目 | 意味 | 例 |
|---|---|---|
| MTU | IP パケットとして運べる最大サイズ | Ethernet 1500、PPPoE 1492 |
| MSS | TCP ペイロードの最大サイズ | IPv4 なら MTU – 40 が目安 |
| PMTUD | 経路 MTU を検出する仕組み | ICMP に依存する場面がある |
| MSS clamp | TCP SYN の MSS を補正する設定 | PPPoE / VPN 経路で使う |
MSS clamp は UDP や ICMP のサイズを直接変えるものではありません。TCP SYN に含まれる MSS 値を補正し、相手にこのサイズ以下で送ってほしいと伝えるための調整です。
MSS clamp が必要になる場面
MSS clamp は、出口側の実効 MTU が小さいのに、入口側では大きな MSS のまま TCP セッションが始まる場面で検討します。PMTUD が正しく動けば回避できる場合もありますが、ICMP が途中で落ちると問題が見えにくくなります。
- PPPoE の外向き経路で HTTPS や Git clone が途中で止まる
- OpenVPN や GRE を通る TCP 通信だけ不安定になる
- 小さな ping は通るが、大きな応答やファイル転送だけ詰まる
- ICMP が途中で制限され、PMTUD が期待通りに働かない
- tcpdump で SYN の MSS が経路に対して大きすぎる
値を決める考え方
MSS の値は、固定値として暗記するものではありません。下位経路の MTU、PPPoE や VPN のヘッダ、IPv4 / IPv6 の違い、トンネルを重ねているかで変わります。
| 経路 | 見ること | 考え方 |
|---|---|---|
| Ethernet のみ | MTU 1500 | 通常は MSS 1460 が目安 |
| PPPoE | MTU 1492 | IPv4 TCP なら MSS 1452 が目安 |
| OpenVPN | VPN オーバーヘッド | 実測と設定値を合わせて調整する |
| GRE / IP6GRE | カプセル化ヘッダ | トンネル MTU と合わせて決める |
| 複数の重ね合わせ | 最小の実効 MTU | 一番小さい経路に合わせる |
必要以上に小さい MSS にすると、通信効率が落ちます。問題を避けるために下げる場合でも、どの経路で、どの通信に対して、どの値へ補正するのかを残しておくと後から見直しやすくなります。
policy route で MSS を補正する
VyOS では、policy route の中で TCP SYN に対して MSS を補正できます。ここでは、LAN 側から特定の出口へ向かう通信に対して MSS を 1414 にする例を示します。値は環境依存です。
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 を前提にしています。実際には、対象インターフェイスへ policy route を適用しているか、対象通信がその policy を通っているかを合わせて確認します。
configure
set interfaces ethernet eth1 policy route 'inside'
commit
savePPPoE や VPN と合わせる
PPPoE、OpenVPN、GRE などの個別記事では、各経路の MTU / MSS を扱います。MSS clamp 単体で考えるのではなく、出口側の MTU、トンネルの MTU、Firewall、PBR と合わせて見ることが重要です。
| 構成 | MSS clamp の位置 | 注意点 |
|---|---|---|
| LAN から PPPoE | LAN 側から外へ出る TCP SYN | PPPoE の MTU 1492 を考慮する |
| LAN から VPN | VPN へ入る前の TCP SYN | VPN オーバーヘッドを考慮する |
| PBR で出口分岐 | 分岐対象の policy route | 該当通信だけ補正する |
| トンネル内通信 | トンネルへ入る通信 | トンネル MTU と合わせる |
確認する
設定後は、設定が入っていることと、実際の TCP SYN の MSS が変わっていることを確認します。設定コマンドだけを見ても、通信がその経路を通っていなければ効果はありません。
show configuration commands | match 'tcp-mss'
show configuration commands | match 'policy route'
sudo tcpdump -ni eth1 'tcp[tcpflags] & tcp-syn != 0'tcpdump では SYN パケットの MSS option を見ます。入口側と出口側でキャプチャできる場合は、MSS 値が意図した値へ補正されているかを比較します。
よくあるつまずき
| 症状 | 見る場所 | 考え方 |
|---|---|---|
| 設定したのに効かない | policy route の適用先 | 対象通信がその policy を通っているか見る |
| まだ大きな通信だけ止まる | MSS 値と経路 MTU | 値が経路に対して大きすぎないか確認する |
| UDP の通信が直らない | MSS clamp の対象 | MSS は TCP SYN への補正である |
| IPv6 で問題が残る | ICMPv6 / PMTUD | ICMPv6 を落としていないか確認する |
| 効率が落ちた | MSS を下げすぎ | 必要以上に小さくしていないか見る |
まとめ
VyOS の TCP MSS clamp は、PPPoE、VPN、トンネルなどで実効 MTU が小さくなる経路に対して、TCP SYN の MSS 値を補正する設定です。なんとなく小さくするのではなく、経路 MTU、ヘッダオーバーヘッド、対象通信を確認して値を決めます。
設定後は、policy route の適用先と tcpdump の SYN パケットを確認します。PMTUD が正しく動く環境では不要な場合もあるため、MSS clamp は常時入れるお守りではなく、詰まりの原因と対象経路を見たうえで使う調整として扱います。

