「WireGuard」というソフトウェアを使い、下図の通り自宅内にVPNサーバーを構築する
Wireguardサーバー : Debian12.11
Wireguardクライアント : Ubuntu24.04

Contents
WireGuardサーバーのインストールと鍵ペアの生成
WireGuardサーバーのインストール
WireGuardサーバーのIPアドレスは「192.168.11.83」とした
|
1 |
# apt -y install wireguard-tools iptables |
バージョン確認
|
1 2 |
# wg --version wireguard-tools v1.0.20210914 - https://git.zx2c4.com/wireguard-tools/ |
サーバーが利用する公開鍵と秘密鍵の生成
作成するのは次の4種類
- wgserver.key サーバ用秘密鍵
- wgserver.pub サーバ用公開鍵
- wgclient.key クライアント用秘密鍵
- wgclient.pub クライアント用公開鍵
1.サーバ用秘密鍵作成
|
1 |
# umask 077 |
|
1 2 |
# wg genkey | tee /etc/wireguard/server.key UG3uc3CllE5RdpGCzKKjXZYQIn7fb2ID8BUpew0zfGI= |
2.サーバ用公開鍵作成
サーバー用秘密鍵からサーバー用公開鍵を生成する
|
1 2 |
# cat /etc/wireguard/server.key | wg pubkey | tee /etc/wireguard/server.pub 5sQtBcqCAof2pI0mNcWSnsnnKWEiMMJpMsKLrOx4ZF4= |
3.クライアント用秘密鍵作成
|
1 2 |
# wg genkey | tee /etc/wireguard/client.key cI2SEET8NhTwghqVkR8gR8utLPhnJtD+Nk1VsxYDN20= |
4.クライアント用公開鍵作成
クライアント用秘密鍵からクライアント用公開鍵を生成する
|
1 2 |
# cat /etc/wireguard/client.key | wg pubkey | tee /etc/wireguard/client.pub SIcmEx/AWMzlnH/mWoaYLHm51p01hu3u7yL5wkXLUz0= |
インターフェース確認
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 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 noprefixroute valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:bf:c3:8f brd ff:ff:ff:ff:ff:ff altname enp2s1 inet 192.168.11.83/24 brd 192.168.11.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:febf:c38f/64 scope link valid_lft forever preferred_lft forever |
設定ファイル新規作成
VPNインターフェース名をwg0としている
サーバーのインターフェースはens33
|
1 |
# vi /etc/wireguard/wg0.conf |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[Interface] # wireguardサーバー用秘密鍵を指定 PrivateKey = UG3uc3CllE5RdpGCzKKjXZYQIn7fb2ID8BUpew0zfGI= # VPN インターフェースに割り当てる IP アドレス Address = 192.168.100.1 # wireguardサーバーでリスンする UDP ポート(デフォルトは51820でそのまま利用するが、適宜変更可能) ListenPort = 51820 # ローカルネットワークへのルーティングルールを設定 PostUp = echo 1 > /proc/sys/net/ipv4/ip_forward; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE PostDown = echo 0 > /proc/sys/net/ipv4/ip_forward; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens33 -j MASQUERADE [Peer] # クライアント用秘密を指定 PublicKey = SIcmEx/AWMzlnH/mWoaYLHm51p01hu3u7yL5wkXLUz0= # 接続を許可するクライアントの VPN の IP アドレス AllowedIPs = 192.168.100.3 |
wireguardサーバー起動
|
1 |
# systemctl start wg-quick@wg0 |
インターフェース確認
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# 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 noprefixroute valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:bf:c3:8f brd ff:ff:ff:ff:ff:ff altname enp2s1 inet 192.168.11.83/24 brd 192.168.11.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:febf:c38f/64 scope link valid_lft forever preferred_lft forever 10: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 192.168.100.1/32 scope global wg0 valid_lft forever preferred_lft forever |
WireGuardクライアントのインストール
クライアントにはUbuntu 24.04 LTSのデスクトップ版を利用
WireGuard をインストール
|
1 |
# apt -y install wireguard-tools |
設定ファイル新規作成
|
1 |
# umask 077 |
|
1 |
# vi /etc/wireguard/wg0.conf |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[Interface] # wireguardクライアント用秘密鍵を指定 PrivateKey = cI2SEET8NhTwghqVkR8gR8utLPhnJtD+Nk1VsxYDN20= # VPN インターフェースに割り当てる IP アドレス Address = 192.168.100.3 [Peer] # wireguardサーバー用公開鍵を指定 PublicKey = 5sQtBcqCAof2pI0mNcWSnsnnKWEiMMJpMsKLrOx4ZF4= # 接続を許可する wireguardサーバーIP アドレス AllowedIPs = 192.168.100.1 # wireguardサーバーのグローバル IP アドレス:ポート EndPoint = xxx.xxx.xxx.xxx:51820 |
VPN インターフェース 起動
|
1 2 3 4 5 6 7 |
# wg-quick up wg0 [#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 192.168.100.3 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] ip -4 route add 192.168.100.1/32 dev wg0 [#] ip -4 route add 192.168.11.0/24 dev wg0 |
接続状態
|
1 2 3 4 5 6 7 8 9 10 |
# wg show interface: wg0 public key: SIcmEx/AWMzlnH/mWoaYLHm51p01hu3u7yL5wkXLUz0= private key: (hidden) listening port: 52747 peer: 5sQtBcqCAof2pI0mNcWSnsnnKWEiMMJpMsKLrOx4ZF4= endpoint: xxx.xxx.xxx.xxx:51820 allowed ips: 192.168.100.1/32, 192.168.11.0/24 |
接続確認
1.クライアントからwireguardサーバーにpingで接続
|
1 2 3 4 5 6 7 8 9 |
# ping -c 3 192.168.11.83 PING 192.168.11.83 (192.168.11.83) 56(84) bytes of data. 64 bytes from 192.168.11.83: icmp_seq=1 ttl=64 time=4.37 ms 64 bytes from 192.168.11.83: icmp_seq=2 ttl=64 time=4.70 ms 64 bytes from 192.168.11.83: icmp_seq=3 ttl=64 time=5.43 ms --- 192.168.11.83 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 4.367/4.831/5.443/0.445 ms |
2.iphoneとwireless接続し、iphoneのデザリング機能でwireguardサーバーのローカルネットワーク内にあるNASに接続する
iphoneの"インターネット共有"で"ほかの人の接続を許可"をONにする
WEBブラウザで"http://192.168.11.xxx:yyy"に接続する(192.168.11.xxx:yyyはNASのローカルアドレスと接続ポート)
無事下記のように接続できた

