Docker Desktop で WireGuard を動かすと MTU が大きくなりすぎる —— 実測と直し方

Docker Desktop の中で wg-quick を使って起動した WireGuard は、Endpoint へ向かう経路を基準にして、実際の通り道より大きな MTU を wg0 に設定することがあります。コンテナ内で eth0 と wg0 の MTU を確かめ、WireGuard の [Interface] に MTU = 1420 を明示すると修正できます。
何が起きるか
2026 年 9 月 27 日に Mac の Docker Desktop で測ったところ、コンテナの eth0 の MTU は 65535 でした。
WireGuard の設定に MTU を書かず、wg-quick で起動すると、wg0 の MTU は 65455 になりました。wg-quick が Endpoint へ向かう経路の MTU(ここでは eth0 の 65535)から 80 を引いた値を自動的に設定したためです。
同じ設定を Linux 上で直接動かした場合と、Windows の Docker Desktop で動かした場合には、wg0 の MTU は 1420 でした。
| 環境 | eth0 の MTU |
wg0 の MTU |
|---|---|---|
| Mac の Docker Desktop | 65535 | 65455 |
| Windows の Docker Desktop | 1500 | 1420 |
| Linux 上で直接実行 | (未記録) | 1420 |
Mac で MTU = 1420 を明示した後 |
65535 | 1420 |
なぜ MTU が大きくなるか
MTU は、1 回で送れるパケットの大きさの上限です。
Mac の Docker Desktop では、コンテナの eth0 に 65535 という MTU が設定されていました。WireGuard の設定で MTU を省略して wg-quick で起動すると、Endpoint へ向かう経路の MTU が基準となり、実測では wg0 の MTU が 65455 になりました。
一方、実際のインターネット側の通り道では、MTU は多くの場合 1500 前後です。wg0 の MTU が実際の通り道より大きいと、大きなパケットが途中で分割されたり、届かなかったりする可能性があります。
MTU = 1420 を明示すると、wg0 は 1420 になります。確かめ方
コンテナの中で、次のファイルを確認します。
cat /sys/class/net/eth0/mtu
cat /sys/class/net/wg0/mtu
1 行目でコンテナのネットワークの口である eth0、2 行目で WireGuard の口である wg0 の MTU を確認できます。
Mac の Docker Desktop で WireGuard の MTU を省略している場合は、実測と同じ 65535 と 65455 になっているかを確認します。環境によって値が異なる可能性があるため、設定を変更する前に現在の値を記録しておきます。
直し方
WireGuard の設定の [Interface] に、次の 1 行を追加します。
[Interface]
MTU = 1420
鍵やアドレスなど、ほかの設定行はここでは省略しています。
MTU を明示して起動した後、もう一度 wg0 の値を確認します。
cat /sys/class/net/wg0/mtu
Mac の Docker Desktop でも、明示した後の wg0 は 1420 になりました。
1420 は、MTU が 1500 の経路に対して wg-quick が選ぶ値です。回線によっては、PPPoE などで、さらに小さい値が必要になる場合があります。
測った環境
測定日は 2026 年 9 月 27 日です。
- macOS: 2026 年 9 月時点の最新版
- Mac の Docker Desktop: 2026 年 9 月時点の最新版
- Windows: 2026 年 9 月時点の最新版
- Windows の Docker Desktop: 2026 年 9 月時点の最新版
この記録は、HomeGrid VPN の Grid(家庭側に置く、インターネットへの出口になる機器)を Docker Desktop で動かせるかを確かめる中で取ったものです。