WireGuard設定の永続化
はじめに
以前、以下の記事でWireGuardの設定方法を紹介しました。
但し、前回の設定だけでは、OSを再起動した際に設定が消えてしまうため、再度設定し直す必要が出てきます。
今回は、OS再起動を行った後でも設定が残るようにするにはどうしたらいいかを書いていこうと思います。
OS再起動した場合
前回の記事の設定のみ行なってOSを再起動した後にどのような状態かを確認します。
### wgコマンド実行
$ wg
### wg0のNICがあるか確認
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
inet 192.168.1.244/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 3436sec preferred_lft 3436sec
inet6 fe80::817:4dff:fe5f:1e69/64 scope link
valid_lft forever preferred_lft forever
上記の通り、NICの設定もなくなっていますし、wg
コマンドを実行しても何も返ってきません。
設定を永続化するために必要なこと
設定を永続化して、かつOS起動時に自動でWireGuardが利用できるようにするには、以下のことが必要になります。
- wg0の設定ファイル作成
- OS起動時にwg0を起動させる設定
wg0の設定ファイル作成
まずは、wg0の設定ファイルを作成します。
前回と同じコマンドを実行して、WireGuardとNICの設定を行なっておきます。
現在の設定は以下のような感じです。
$ sudo wg show
interface: wg0
public key: AAAAAAAA
private key: (hidden)
listening port: 44455
peer: BBBBBBBB
endpoint: 43.207.47.224:55544
allowed ips: 172.16.12.2/32
persistent keepalive: every 25 seconds
$ sudo wg showconf wg0
[Interface]
ListenPort = 44455
PrivateKey = AAAAAAAA
[Peer]
PublicKey = BBBBBBBB
AllowedIPs = 172.16.12.2/32
Endpoint = 43.207.47.224:55544
PersistentKeepalive = 25
wg0の設定ファイルの作成は簡単で、wg showconf
の結果を、ファイルに保存するだけです。
$ cd /etc/wireguard/ # rootで実行
$ wg showconf wg0 > wg0.conf # rootで実行
注意点としては以下です。
- 設定ファイルは、
/etc/wireguard/
配下 に作成すること - ファイル名は 'NIC名'.conf とすること
設定ファイルを作成したら、NICに割り当てるIPアドレスを設定ファイルに書き込みます。
@@ -1,6 +1,7 @@
[Interface]
ListenPort = 44455
PrivateKey = AAAAAAAA
+Address = 172.16.12.1/32
[Peer]
PublicKey = BBBBBBBB
以上で、設定ファイルの作成は完了です。
起動時にwg0を起動させる設定
wg0を起動させるコマンドとして、wg-quick
があります。
wg-quickコマンドを実行すると、先ほど作成した設定ファイルを自動で読み込んで、NICの作成まで行ってくれます。
wg-quick up NIC名
: NICを起動
wg-quick down NIC名
: NICを停止
$ wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 172.16.12.1/32 dev wg0
[#] ip link set mtu 8921 up dev wg0
[#] ip -4 route add 172.16.12.2/32 dev wg0
$ ip a
・・・・
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 8921 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 172.16.12.1/32 scope global wg0
valid_lft forever preferred_lft forever
設定ファイルから、NICを起動させることができました。
ちなみに、設定ファイル名を誤っている場合、以下のようにエラーとなります。
$ wg-quick up wg0
wg-quick: `/etc/wireguard/wg0.conf' does not exist
上記コマンドは、あくまで作成した設定ファイルから、自動で設定を読み込んでNICを起動させるだけです。
ここから、OS起動時に自動で設定ファイルが読み込まれるようにしたいと思います。
systemctlコマンドで wg-quick@wg0
の自動起動を設定します。
### 初期状態 ###
$ sudo systemctl status wg-quick@wg0
● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
Loaded: loaded (/usr/lib/systemd/system/wg-quick@.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:wg-quick(8)
man:wg(8)
https://www.wireguard.com/
https://www.wireguard.com/quickstart/
https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
$ sudo systemctl is-enabled wg-quick@wg0
disabled
### 自動起動設定 ###
$ sudo systemctl enable wg-quick@wg0
Created symlink from /etc/systemd/system/multi-user.target.wants/wg-quick@wg0.service to /usr/lib/systemd/system/wg-quick@.service.
$ sudo systemctl is-enabled wg-quick@wg0
enabled
上記で自動起動設定ができましたので、OSの再起動をしてみます。
### OS再起動後 ###
$ sudo systemctl status wg-quick@wg0
● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
Loaded: loaded (/usr/lib/systemd/system/wg-quick@.service; enabled; vendor preset: disabled)
Active: active (exited) since Fri 2023-01-20 15:22:45 UTC; 52s ago
Docs: man:wg-quick(8)
man:wg(8)
https://www.wireguard.com/
https://www.wireguard.com/quickstart/
https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
Process: 3086 ExecStart=/usr/bin/wg-quick up %i (code=exited, status=0/SUCCESS)
Main PID: 3086 (code=exited, status=0/SUCCESS)
Jan 20 15:22:44 ip-192-168-1-244.ap-northeast-1.compute.internal systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
Jan 20 15:22:44 ip-192-168-1-244.ap-northeast-1.compute.internal wg-quick[3086]: [#] ip link add wg0 type wireguard
Jan 20 15:22:45 ip-192-168-1-244.ap-northeast-1.compute.internal wg-quick[3086]: [#] wg setconf wg0 /dev/fd/63
Jan 20 15:22:45 ip-192-168-1-244.ap-northeast-1.compute.internal wg-quick[3086]: [#] ip -4 address add 172.16.12.1/32 dev wg0
Jan 20 15:22:45 ip-192-168-1-244.ap-northeast-1.compute.internal wg-quick[3086]: [#] ip link set mtu 8921 up dev wg0
Jan 20 15:22:45 ip-192-168-1-244.ap-northeast-1.compute.internal wg-quick[3086]: [#] ip -4 route add 172.16.12.2/32 dev wg0
Jan 20 15:22:45 ip-192-168-1-244.ap-northeast-1.compute.internal systemd[1]: Started WireGuard via wg-quick(8) for wg0.
$ ip a
・・・
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 8921 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 172.16.12.1/32 scope global wg0
valid_lft forever preferred_lft forever
WireGuardのNICであるwg0が設定されていることが確認できました。
WireGuard を本格的に利用する上での補足
WireGuardを利用する上で、もう一つだけ重要な点があるので補足しておきたいと思います。
WireGuardを利用してVPN接続を行なっても、通信が取れるのはWireGuardで設定しているIPアドレス間のみ(今回でいうと172.16.12.0/24)になります。
クライアントから、その先のサーバにアクセスさせたい場合は、WireGuardのサーバにてフォワード設定が必要になります。設定でいうと以下です。
$ sysctl net.ipv4.ip_forward=1 # rootで実行
他のサイトでも記事はいくつか出ているのでこの辺りは詳しく触れませんが、そういった設定が必要である点は留意ください。
おわりに
一旦、WireGuardの記事はこれでおわりにしたいと思います。
当初はLPICの勉強がてら始めたことでしたが、思ったより奥が深かったです。
自社で使うことはないでしょうが、知識として覚えておこうと思います。
Discussion