WireGuardの設定方法
wireguardはVPN(Virtual Private Network)を構築できるツールです。今までもIPSec等の暗号化トンネルのツールが有りましたが構築に知識が必要で、また一部ではIPv6が使えないなどの条件も複雑であったり、構築が大変だった記憶です。
その点、wireguardはそれほど知識は求められず構築が簡単でした。以下に構築したときの記録を残しておきます。 構成としては2台のLinuxマシンにそれぞれWireGuardをインストールして互いにVPNを張る構成です。
インストール方法については公式サイト を参照して下さい。当サイトでもCentOS 8 Stream版 とAmazon Linux 2版 を用意しています。
なお、以下構築例での条件等は下記のとおりです。環境に合わせて読替えて下さい。
- WireGuardインターフェイスのIPは 192.168.100.1/24 (対抗機は 192.168.100.2/24)
- サーバのIPアドレス(Endpoint)は 2001:0DB8::1 (対抗機は 2001:0DB8::2) # IPv6を使用しています
- WireGuardインターフェイス名は wg0
- WireGuardのポート番号は2台共 36905
秘密鍵&公開鍵の生成
umask 077
wg genkey > /etc/wireguard/private.key
wg pubkey < /etc/wireguard/private.key > /etc/wireguard/public.key
WireGuard インターフェイス作成
WireGuardインターフェイスを作成します。IPアドレスは 192.168.100.1/24としていますが、対抗機は 192.168.100.2/24 として下さい。
ip link add dev wg0 type wireguard
ip address add dev wg0 192.168.100.1/24
wg set wg0 private-key /etc/wireguard/private.key
ip link set wg0 up
対抗機(Peer)の定義追加
対抗機の公開鍵とサーバIPアドレス、EndpointのIPアドレスを設定します。
-
公開鍵は対抗機で実行したwg pubkey で作成したファイルの内容を設定します。
-
allowed-ips は対抗のIPアドレスを設定します。ここでは対抗機のIPアドレスを設定していますが、対抗機をゲートウェイとして使う場合はこのアドレス以外からの通信がありますので、その場合は例えば192.168.100.0/24 等の想定されるIPアドレスも設定しておきます。
-
persistent-keepalive はNATテーブルやFirewallのステートフルの為のセッションテーブルを維持してセッションが切れることを防ぎます。この設定をしておくとFirewallでInboundのポリシーを追加しなくても済む場合があります。対抗のIPアドレスが不明の場合は効きませんが。。なお25秒ぐらいの設定が適当のようです。
wg set wg0 peer <<対抗機の公開鍵>> allowed-ips 192.168.100.2/32 endpoint [2001:0DB8::2]:36905 persistent-keepalive 25
最後にPingを打って、対応機から応答があることを確認します。
ping 192.168.100.2
設定の永続化
以下のコマンドで設定をファイルに出力させます。ファイル名は「 インターフェイス名 + .conf 」とします。
wg showconf wg0 > /etc/wireguard/wg0.conf
次に、出力させた設定ファイルにインターフェイスのIPアドレスを登録します。なおサーバをゲートウェイとする場合は、パケット転送が必要になるので、その場合は以下の PostUp と PostDown の設定も追加します。
[Interface]
Address = 192.168.100.1/24
PostUp = sysctl net.ipv4.ip_forward=1
PostDown = sysctl net.ipv4.ip_forward=0
OS起動時にVPNも自動実行されるように systemctl で有効にします。
systemctl enable --now wg-quick@wg0