Ubuntu20.04でWireGuard VPNを使ってみた。
自宅のネットワークに安全にアクセス出来る環境を作りたいなぁと思い簡単で無料にVPNを構築できるツールは無いか探したところ「WireGuard」と言うVPNが良さげだったのでちょっくら試してみます。
参考にさせて頂いた記事の紹介と謝辞
gihyo.jp
手順1 Ubuntuのアップグレード(サーバ/クライアント共通)
# apt update # apt upgrade
手順2 WireGuardのインストール(サーバ/クライアント共通)
apt install wireguard
手順3 サーバー用鍵ペアの作成
# wg genkey | sudo tee /etc/wireguard/server.key # chmod 600 /etc/wireguard/server.key # cat /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub # chmod 600 /etc/wireguard/server.pub
手順4 クライアント用鍵ペアの作成
# 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
サーバー側の設定
/etc/wireguard/wg0.confをvimなどで編集する。
最初ファイルが無いのでtouchかvimで作成してあげる。
[Interface] PrivateKey = iA2DB5KH************** #作成したサーバーの秘密鍵 Address = 10.0.0.1 #サーバーのインターフェイスに割り当てるIPアドレス ListenPort = 51820 [Peer] PublicKey = j2ozr8LQv************** #クライアントの公開鍵 AllowedIPs = 10.0.0.2/32 #クライアントに割り当てたIPアドレス
クライアント側の設定
サーバ同様に/etc/wireguard/wg0.confをvimなどで編集する。
[Interface] PrivateKey = COv5Kpt9T4************** #クライアントの秘密鍵 Address = 10.0.0.2 #クライアントのIPアドレス [Peer] PublicKey = kNMbEvaOO************** #サーバーの公開鍵 EndPoint = 150.95.xxx.xxx:51820 AllowedIPs = 10.0.0.0/24 #WireGuardを経由して通信する先のIPアドレス
WireGuardの起動(サーバ側)
# systemctl start wg-quick@wg0 # systemctl status wg-quick@wg0
起動が成功してればインタフェースに10.0.0.1のアドレスが付与されているはず。
# 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 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 02:01:96:5f:85:7a brd ff:ff:ff:ff:ff:ff inet 150.95.xxx.xxx/23 brd 150.95.xxx.xxx scope global dynamic eth0 valid_lft 83753sec preferred_lft 83753sec inet6 fe80::1:xxxx:xxxx:xxxx/64 scope link valid_lft forever preferred_lft forever 3: 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への接続
wg-quick up wg0コマンドでインタフェースを起動する。
問題なく起動できていればip aコマンドで10.0.0.2が表示される。
# wg-quick up wg0 [#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.0.0.2 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] ip -4 route add 10.0.0.0/24 dev wg0 # 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 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 02:01:96:5f:8e:18 brd ff:ff:ff:ff:ff:ff inet 150.95.xxx.xxx/23 brd 150.95.xxx.xxx scope global dynamic eth0 valid_lft 84292sec preferred_lft 84292sec inet6 fe80::1:xxxx:xxxx:xxxx/64 scope link valid_lft forever preferred_lft forever 4: 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 #
最後にクライアントからサーバに向けてPingを実行し疎通OKか確認する
# ping 10.0.0.1 PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=1.63 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.482 ms 64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.492 ms ^C --- 10.0.0.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2030ms rtt min/avg/max/mdev = 0.482/0.867/1.627/0.537 ms #