OpenVPN の MTU 関連設定は、名前だけを見ると分かりにくいです。tun-mtu、link-mtu、fragment、mssfix が並ぶため、どれを触ればよいのか迷いやすい領域です。
ただ、整理して考えると、主題はそれほど複雑ではありません。OpenVPN の外側には UDP または TCP の通信があり、その内側に暗号化された VPN トンネルがあります。MTU 問題は、このカプセル化によってパケットが大きくなり、経路上で分割や破棄が起きるところから発生します。
この記事では、OpenVPN の MTU 関連設定を、tun-mtu、link-mtu、fragment、mssfix に分けて整理します。
tun-mtuは基本的にデフォルトのまま考える。link-mtuは非推奨であり、安易に直接指定しない。mssfixは TCP 通信が VPN 内で大きくなりすぎないようにする設定である。fragmentは Path MTU Discovery が壊れている場合の最後寄りの回避策として考える。
OpenVPN の MTU 問題はどこで起きるのか
OpenVPN は、内側の IP パケットを暗号化し、外側の UDP または TCP に載せて相手へ送ります。この時、暗号化、認証、OpenVPN ヘッダー、UDP/IP ヘッダーなどの分だけ外側のパケットは大きくなります。
その結果、内側では問題ないサイズの通信でも、外側のネットワークでは MTU を超えることがあります。Path MTU Discovery が正しく働けば調整されますが、途中のファイアウォールや NAT、閉域網、トンネルの重ね合わせによってうまく機能しないことがあります。
OpenVPN 2.6 manual でも、MTU 問題は接続開始後、実際に通信を始めた時にハングする形で現れることがあると説明されています。参考: OpenVPN 2.6 Manual
MTU 関連設定の役割
| 設定 | 役割 | 扱い方 |
|---|---|---|
tun-mtu |
TUN インターフェース側の MTU | 基本は 1500 のまま。最初からここを下げるより、まず経路 MTU と MSS を見る。 |
link-mtu |
OpenVPN ピア間で送る UDP パケットサイズの上限 | OpenVPN 2.6 manual では非推奨。直接指定は避ける。 |
mssfix |
VPN 内を通る TCP セッションの MSS を調整する | TCP の通信が詰まる場合にまず見る候補。UDP の OpenVPN 構成で意味を持つ。 |
fragment |
OpenVPN 内部で UDP データグラムを分割する | Path MTU Discovery が壊れている場合の回避策。効率は落ちる。 |
重要なのは、これらを同じ種類の設定として扱わないことです。tun-mtu は内側の TUN インターフェース側、mssfix は TCP の MSS 調整、fragment は OpenVPN 内部の分割、link-mtu は外側パケットサイズの直接指定です。
tun-mtu は基本的に最初から触らない
OpenVPN の tun-mtu は、TUN デバイス側の MTU を指定します。デフォルトは 1500 です。多くの場合、ここを最初から下げるより、実際にどこで詰まっているのかを確認した方がよいです。
MTU 問題があるからといって、すぐに tun-mtu 1300 のように下げると、VPN 内の全体効率を落とすだけでなく、問題の原因が見えにくくなります。まずは Path MTU、MSS、外側の経路、NAT、ファイアウォールを疑う方が自然です。
link-mtu は非推奨として扱う
link-mtu は、OpenVPN ピア間で送る UDP パケットサイズの上限を指定する設定です。ただし、OpenVPN 2.6 manual では非推奨として扱われています。IP ヘッダーサイズや暗号方式によるオーバーヘッドが変わるため、直接指定しても信頼しづらいためです。
古い資料では link-mtu が説明されていることがありますが、現在の感覚では、明確な理由がない限り直接触らない方がよい設定です。
mssfix は TCP 通信の詰まりを避ける設定
mssfix は、VPN 内を通る TCP セッションに対して、送信サイズを抑えるように知らせる設定です。OpenVPN がカプセル化した後でも外側の UDP パケットが大きくなりすぎないようにするためのものです。
VPN 越しの Web、SSH、SMB、RDP などが途中で固まる場合、実際には TCP の大きなセグメントが VPN カプセル化後に経路 MTU を超えている可能性があります。この場合、mssfix は比較的自然な調整ポイントになります。
proto udp
mssfix 1300 mtu1300 は例です。環境によって適切な値は変わります。OpenVPN 2.6 では mssfix max mtu のように、IP / UDP ヘッダーを含む VPN パケットサイズとして解釈させる指定もできます。
fragment は最後寄りの回避策として見る
fragment は、OpenVPN 内部で UDP データグラムを分割する設定です。Path MTU Discovery が壊れている環境で、大きな UDP パケットをそのまま送れない場合の回避策になります。
ただし、これは効率の良い解決ではありません。公式マニュアルでも、IP レベルのフラグメンテーションを置き換えるものではなく、Path MTU Discovery が壊れている時の最後寄りの手段として説明されています。
proto udp
tun-mtu 1500
fragment 1300
mssfixこのように fragment と mssfix を組み合わせる構成は、OpenVPN の古い資料や実運用で見かけます。ただし、まずは経路側の MTU、ICMP の扱い、ファイアウォール、トンネルの重ね合わせを確認するべきです。
切り分けの考え方
- 接続自体は確立するが、大きな通信で固まるか。
- 小さい ping は通るが、大きい ping やファイル転送で止まるか。
- TCP だけが不安定なのか、UDP を含めて不安定なのか。
- OpenVPN の外側にさらに VPN、PPPoE、VLAN、クラウド閉域、NAT が重なっていないか。
- ICMP Fragmentation Needed が途中で落とされていないか。
MTU 問題は、OpenVPN の設定だけで完結しないことが多いです。経路上のネットワーク設計、ファイアウォール、NAT、トンネルの多重化まで含めて見る必要があります。
まとめ
OpenVPN の MTU 関連設定は、tun-mtu、link-mtu、fragment、mssfix を分けて考えると整理できます。
tun-mtu は基本デフォルト、link-mtu は非推奨、mssfix は TCP の MSS 調整、fragment は Path MTU Discovery が壊れている場合の回避策です。
OpenVPN の通信が接続後に固まる場合、設定値をむやみに下げるのではなく、どの層でパケットサイズが問題になっているのかを切り分けることが重要です。
参考情報
書籍
暗号技術入門 第3版 秘密の国のアリス
TLS、証明書、暗号化通信の前提を確認したい場合の参考書籍です。OpenVPN の MTU 問題そのものの本ではありませんが、VPN の暗号化層を理解する補助になります。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
関連する記事
- OpenVPN のパケット構造 – TLS 制御チャネルとデータチャネルを理解する
- OpenVPN tls-auth を活用したセキュリティ強化
- OpenVPN CRL 有効期限切れで接続できない場合の対処

