WireGuard設定 OpenBSDとUbuntuの接続
コンテンツ
OpenBSD, Linux どちもカーネルにWireGuard実装がマージされたため IPSec からWireGuard に変更したときのメモ。WireGuard は IPSec や OpenVPN に比べてシンプルなVPN。暗号化、鍵交換などの方式が固定されているためネゴシエーションが簡単になっているのだろう。
Ubuntu が固定IPをもち server 的に動作し、 OpenBSD が動的IPで client 的に動作するように設定する。前述のように暗号化、鍵交換などの方式が固定されているので VPN の両端で使用する秘密鍵、共有鍵とIPを設定すれば設定は完了である。
Ubuntu 側の設定
必要なプログラムのインストール。
|
|
秘密鍵、公開鍵の作成。
|
|
以降クライアント、サーバの秘密鍵、公開鍵を CLIENT_PRIVATE_KEY, CLIENT_PUBLIC_KEY, SERVER_PRIVATE_KEY, SERVER_PUBLIC_KEY と書く。
wireguard の設定
次を /etc/wireguard/wg0.conf として作成する。
|
|
IPSec で使用していた 4500 番ポートを WireGuard でも流用する。また、設定フィールド AllowedIPs は通信を許可するIPを列挙する。全て許可する場合は IPv4 なら 0.0.0.0/0, IPv6 ならば ::/0 を指定する。
Interface を作成のテスト。
|
|
インターフェイスを確認する。
|
|
コマンド ip で確認する。
|
|
systemd への登録
インターフェイス名を指定する必要があり、 @ の後ろにインターフェイスを指定する。
|
|
OpenBSD 側の設定
interface の作成
|
|
インターフェイス状態の確認
|
|
サーバへ接続
|
|
インターフェイス状態の確認
|
|
|
|
MTU を変更する場合は次を指定する。今回はUbuntu側で自動で設定されていた 1380 を設定した。
|
|
また pf.conf に set skip on wg0 を追加して設定をリロードする必要があった。これをしないと packet が wg0 から外部にでていかなかった。
hostname.if への設定
起動時にWireGuardで自動接続するように /etc/hostname.wg0 を作成しておく。
|
|
WireGuard MTU について
WireGuard の header は合計で 16 Bytes で、パケットの最後に暗号関係の tag 16 Bytes が付与される。
| field | length |
|---|---|
| Type | 1 |
| Reserved | 3 |
| Receiver | 4 |
| Counter | 8 |
| payload | X |
| tag | 16 |
WireGuard の外側には Ether, IP, UDP のヘッダがあるため Ethernet フレームとして見ると次のような構成となっている。
| header | length |
|---|---|
| Ethernet | 14 |
| Outer IP | 20 |
| UDP | 8 |
| WireGuard | 16 |
| Innter IP | 20 |
| Payload | X |
| tag | 16 |
| Eth FCS | 4 |
PPPoE の場合は外側のIPパケットの MTU が 1454 となっている。
WireGuard の MTU はそこから Outer IP, UDP, WireGuard header, tag の合計 60 (= 20 + 8 + 16 + 16) Bytes を除いた 1394 Bytes となる。外側が IPv6 の場合は ヘッダ が 40 Bytes あるのでさらに 20 Bytes MTU が小さくなる。
環境
- OpenBSD 6.9
- Ubuntu 20.04
参考
-
OpenBSD
ifconfig(8), wireguard で使用するオプションについて説明がある -
ifconfig(8)で不足する場合は device manualwg(4)を見てみる -
OpenBSD での設定例
-
公式の quick start, linux 同士での接続
-
Archlinux wiki, linux での設定例が掲載されている
-
Ubuntu 20.04 での設定
-
公式の technial whitepaper
-
WireGuard の MTU について
作成者 Toru Mano
最終更新時刻 2023-01-01 (c70d5a1)