はじめに
次のVM上のサーバ間でWireGuardを使ってVPN接続ができるように構築する。
$ virsh net-dhcp-leases default Expiry Time MAC address Protocol IP address Hostname Client ID or DUID ------------------------------------------------------------------------------------------------------------------------------------------------ 2023-12-22 02:27:45 52:54:00:70:0f:14 ipv4 192.168.123.123/24 vpn1 ff:56:50:4d:98:00:02:00:00:ab:11:21:77:3b:5b:4c:12:bc:c2 2023-12-22 02:40:08 52:54:00:cc:d7:ca ipv4 192.168.123.192/24 vpn2 ff:56:50:4d:98:00:02:00:00:ab:11:43:f1:be:a3:9d:05:4e:e9
環境
構築
VPNサーバの構築
#ホストからVMにログイン $ ssh 192.168.123.123 #VM上で操作 $ sudo apt update;sudo apt upgrade -y wireguardパッケージのインストール $ sudo apt install wireguard -y
サーバー用鍵ペアの作成する。
#秘密鍵の作成と保存 $ wg genkey | sudo tee /etc/wireguard/server.key $ sudo chmod 600 /etc/wireguard/server.key $ sudo ls -la /etc/wireguard/server.key -rw------- 1 root root 45 Dec 22 01:48 /etc/wireguard/server.key #作成したサーバーの秘密鍵の確認 $ sudo cat /etc/wireguard/server.key oLXg+zI+hFbWqWg5abKZsCOpu0HDG8XJX5xGFT4CoGw= #秘密鍵から公開鍵を作成する $ sudo cat /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub $ sudo chmod 600 /etc/wireguard/server.pub $ sudo ls -la /etc/wireguard/server.pub -rw------- 1 root root 45 Dec 22 01:49 /etc/wireguard/server.pub #作成したサーバーの公開鍵の確認 $ sudo cat /etc/wireguard/server.pub dzLJmkwcJ5D4hgfxj3hD5H5qMxjxzep3VzXRhipa/3o= IPアドレスの確認 $ ip a 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:70:0f:14 brd ff:ff:ff:ff:ff:ff inet 192.168.123.123/24 metric 100 brd 192.168.123.255 scope global dynamic enp1s0 valid_lft 3266sec preferred_lft 3266sec inet6 fe80::5054:ff:fe70:f14/64 scope link valid_lft forever preferred_lft forever
VPNクライアントの構築
クライアント用鍵ペアの作成する。
#ホストからVMにログイン $ ssh 192.168.123.192 #VM上で操作 $ sudo apt install wireguard -y $ wg genkey | sudo tee /etc/wireguard/client.key $ sudo cat /etc/wireguard/client.key | wg pubkey | sudo tee /etc/wireguard/client.pub $ sudo chmod 600 /etc/wireguard/client.key /etc/wireguard/client.pub $ sudo ls -la /etc/wireguard/client.key /etc/wireguard/client.pub -rw------- 1 root root 45 Dec 22 01:52 /etc/wireguard/client.key -rw------- 1 root root 45 Dec 22 01:52 /etc/wireguard/client.pub # 作成したクライアントの秘密鍵の確認 $ sudo cat /etc/wireguard/client.key KO1zn3Qq0HQDrvFaYfs8z9iuARl9VOghfBAXOpxBCHk= # 作成したクライアントの公開鍵の確認 $ sudo cat /etc/wireguard/client.pub j9SRypHMiQ3AshaL/VITyyEVqaJxW22kWXyUIwQNiA4=
VPNサーバの設定
WireGuardの設定ファイルは、「/etc/wireguard/作成するインターフェイス名.conf」という名前で作成する必要がある。今回はインターフェイス名を「wg0」とするので、「/etc/wireguard/wg0.conf」というファイルを作成し、以下の内容を記述する。 VPNサーバのプライベートキー、VPNクライアントのパブリックキーを使用することに留意する。
$ sudo vim /etc/wireguard/wg0.conf [Interface] PrivateKey = oLXg+zI+hFbWqWg5abKZsCOpu0HDG8XJX5xGFT4CoGw= Address = 10.0.0.1 (サーバーのインターフェイスに割り当てるIPアドレス) ListenPort = 51820 [Peer] PublicKey = j9SRypHMiQ3AshaL/VITyyEVqaJxW22kWXyUIwQNiA4= AllowedIPs = 10.0.0.2/32 (クライアントに割り当てたIPアドレス)
VPNクライアントの設定
クライアント側にも設定ファイルが必要である。以下の内容で「/etc/wireguard/wg0.conf」を作成する。 VPNクライアントのプライベートキー、VPNサーバのパブリックキーを使用することに留意する。
$ sudo vim /etc/wireguard/wg0.conf [Interface] PrivateKey = KO1zn3Qq0HQDrvFaYfs8z9iuARl9VOghfBAXOpxBCHk= Address = 10.0.0.2 (クライアントのIPアドレス) [Peer] PublicKey = dzLJmkwcJ5D4hgfxj3hD5H5qMxjxzep3VzXRhipa/3o= EndPoint = 192.168.123.123:51820(サーバーのIPアドレス:51820) AllowedIPs = 10.0.0.0/24 (WireGuardを経由して通信する先のIPアドレス) WireGuardの起動(VPNサーバでの作業)
VPNサーバのサービス起動
VPNサーバで、WireGuardのサービスを起動する。
$ sudo wg-quick down wg0 $ sudo wg-quick up wg0 $ ip a show wg0 4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 10.0.0.1/32 scope global wg0 valid_lft forever preferred_lft forever
VPNクライアントのサービス起動と接続
VPBクライアントからVPNサーバへの接続する。
$ sudo wg-quick up wg0 $ ip a show wg0 3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 10.0.0.2/32 scope global wg0 valid_lft forever preferred_lft forever
接続を確認できた。