概要
Ubuntu 22.04 LTSにインターネットVPN用途のWireGuardを導入し、Androidスマートフォンから接続出来るようにする記事です。
インターネットVPN環境を必要した理由
- Androidスマートフォンで野良WiFiを使った時の通信盗み見を防止する。
- 外出先から自宅のネットワークに接続し、OctoPrintにアクセスする。
前提
- 以下の続きなので、Ubuntu Server 22.04 LTSである。
- NICはWiFiのみ接続しているため、wlan0のみ接続されている構成。
- ルータでUDP 51820をRaspberry Piにポートフォワーディングしている。
- AndroidスマートフォンにAndroid版WireGuardをインストール済み。
- 自宅LANのセグメントは192.168.1.0/24。
環境構築
192.168.2.0/24をVPNアクセス用のセグメントとしており、自宅LANのセグメントとは異なります。
また、DNSにはGoogle DNSを指定しています。
PostUpにはWireGuardの起動前の処理、PostDownにはWireGuardの停止前の処理を設定します。
Androidスマートフォン用のWireGuard設定ファイルをUbuntu上で作り、それをQRコードにして、Androidスマートフォン読み込ませるために、qrencodeを使います。
なお、ライブラリにlibqrencodeを使ったQRコード生成ユーティリティqrencodeは、英数字で最大約4000字を埋め込むことができます。
ファイヤーウォールの設定
Ubuntu Server 22.04 LTSは、デフォルトだとファイヤーウォールの設定がされていないため、ufwを使ってファイヤーウォールの設定をする。
誤った設定をするとSSHで接続が出来なくなったり、セキュリティリスクが高くなったりするので要注意です。
- 自宅LANのセグメント192.168.1.0/24からのSSHアクセスを許可する。
- WireGuard用にUDP51820を許可する。
- OctoPrint用にTCP80、TCP443を許可する。
username@ubuntu:~$ sudo ufw status
username@ubuntu:~$ sudo ufw allow proto tcp from 192.168.1.0/24 to any port 22
username@ubuntu:~$ sudo ufw allow 51820/udp
username@ubuntu:~$ sudo ufw allow 80/tcp
username@ubuntu:~$ sudo ufw allow 443/tcp
username@ubuntu:~$ sudo ufw enable
username@ubuntu:~$ sudo ufw status
UbuntuにWireGuardを導入する
- WireGuardとqrencodeをインストールします。
username@ubuntu:~$ sudo apt install wireguard qrencode -y
-
needrestartパッケージの機能でサービスの確認画面が出ますが、特に再起動の必要なサービスはないと思うので、そのままOKを選択します。
-
サーバの秘密鍵と公開鍵を作成
作成する秘密鍵と公開鍵のパーミッションが600になるようumaskを設定。
ファイルは初期値では実行権限が付かないので、「u=rwx,g=,o=」となっていますが、600になります。
ログアウトすればumaskはデフォルトの0002に戻るので再設定は不要です。
username@ubuntu:~$ sudo -i
[sudo] password for username:
root@ubuntu:~# umask
0022
root@ubuntu:~# umask 0077
root@ubuntu:~# umask -S
u=rwx,g=,o=
便宜上、Ubuntu側をサーバとして扱います。
wg genkeyで秘密鍵を作成し、作成した秘密鍵から公開鍵をwg pubkeyで作成します。
root@ubuntu:~# wg genkey | tee /etc/wireguard/server.key
root@ubuntu:~# cat /etc/wireguard/server.key | wg pubkey | tee /etc/wireguard/server.pub
- クライアントの秘密鍵と公開鍵を作成
便宜上、Androidスマートフォン側をクライアントとして扱います。
wg genkeyで秘密鍵を作成し、作成した秘密鍵から公開鍵をwg pubkeyで作成します。
root@ubuntu:~# wg genkey | tee /etc/wireguard/client.key
root@ubuntu:~# cat /etc/wireguard/client.key | wg pubkey | tee /etc/wireguard/client.pub
- サーバとなるUbuntuで動作させるWireGuardの設定ファイルをヒアドキュメントで作成します。
root@ubuntu:~# cat <<EOF > /etc/wireguard/wg0.conf
[Interface]
ListenPort = 51820
Address = 192.168.2.1/24
PrivateKey = (サーバの秘密鍵)
PostUp = echo 1 > /proc/sys/net/ipv4/ip_forward; iptables -A FORWARD -i wg0 -o wlan0 -j ACCEPT; iptables -A FORWARD -i wlan0 -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
PostDown = echo 0 > /proc/sys/net/ipv4/ip_forward; iptables -D FORWARD -i wg0 -o wlan0 -j ACCEPT; iptables -D FORWARD -i wlan0 -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o wlan0 -j MASQUERADE
[Peer]
PublicKey = (クライアントの公開鍵)
AllowedIPs = 192.168.2.100/32
EOF
- WireGuardの手動実行でWireGuardのwg0インターフェースが作成される事とPostUp、PostDownの動作確認をします。
username@ubuntu:~$ sudo wg-quick up wg0
username@ubuntu:~$ sudo wg
username@ubuntu:~$ ip addr
username@ubuntu:~$ iptables -L
username@ubuntu:~$ sysctl net.ipv4.ip_forward
username@ubuntu:~$ sudo wg-quick down wg0
username@ubuntu:~$ sudo wg
username@ubuntu:~$ ip addr
username@ubuntu:~$ iptables -L
username@ubuntu:~$ sysctl net.ipv4.ip_forward
- Ubuntuの起動時に自動起動するように設定します。
username@ubuntu:~$ systemctl status wg-quick@wg0
○ wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
Loaded: loaded (/lib/systemd/system/wg-quick@.service; disabled; vendor preset: enabled)
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
username@ubuntu:~$ sudo systemctl enable wg-quick@wg0
Created symlink /etc/systemd/system/multi-user.target.wants/wg-quick@wg0.service → /lib/systemd/system/wg-quick@.service.
username@ubuntu:~$ systemctl status wg-quick@wg0
○ wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled)
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
username@ubuntu:~$
- Ubuntuを再起動します。
username@ubuntu:~$ sudo reboot
- 再起動後、WireGuardが自動起動するか確認します。
username@ubuntu:~$ systemctl status wg-quick@wg0
● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled)
Active: active (exited) since Sat 2022-05-28 07:27:25 JST; 4min 21s 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: 814 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
Main PID: 814 (code=exited, status=0/SUCCESS)
CPU: 168ms
May 28 07:27:24 ubuntu systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
May 28 07:27:24 ubuntu wg-quick[814]: [#] ip link add wg0 type wireguard
May 28 07:27:25 ubuntu wg-quick[814]: [#] wg setconf wg0 /dev/fd/63
May 28 07:27:25 ubuntu wg-quick[814]: [#] ip -4 address add 192.168.2.1/24 dev wg0
May 28 07:27:25 ubuntu wg-quick[814]: [#] ip link set mtu 1420 up dev wg0
May 28 07:27:25 ubuntu wg-quick[814]: [#] echo 1 > /proc/sys/net/ipv4/ip_forward; iptables -A FORWARD -i wg0 -o wlan0 -j ACCEPT; iptables -A FORWARD -i wlan0 -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
May 28 07:27:25 ubuntu systemd[1]: Finished WireGuard via wg-quick(8) for wg0.
username@ubuntu:~$
AndroidスマートフォンにWireGuard導入
- クライアントとなるAndroidスマートフォンで動作させるWireGuardの設定ファイルをヒアドキュメントで作成します。
username@ubuntu:~$ sudo -i
[sudo] password for username:
root@ubuntu:~#
root@ubuntu:~# cat <<EOF > /etc/wireguard/android_wg0.conf
[Interface]
PrivateKey = (クライアントの秘密鍵)
Address = 192.168.2.100/24
DNS = 8.8.8.8, 8.8.4.4
[Peer]
PublicKey = (サーバの公開鍵)
EndPoint = test.kabukigoya.com:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepAlive = 30
EOF
- Androidスマートフォン上のWireGuardに読み込ませるため、作成した設定ファイルをQRコードにする。
画像ファイルの所有者を変更しているのは、一般ユーザで画像をダウンロードするためです。
root@ubuntu:~# qrencode -o /etc/wireguard/android.png < /etc/wireguard/android_wg0.conf
root@ubuntu:~# cp /etc/wireguard/android.png /home/username/
root@ubuntu:~# chown username /home/username/android.png
-
WinSCPでWindowsPCにandroid.pngをダウンロードし、ディスプレイに画像を表示させます。
-
Android版WireGuardを起動し、右下の「+」ボタンをタップする。
-
「QRコードをスキャン」をタップする。
-
トンネル名に myhome など適当な名前を付け、「トンネルを作成」をタップする。
-
有効にすればUbuntu on Raspberry PiへのVPN接続完了です。
次は、OctoPrint導入の記事を公開予定です。
0 件のコメント:
コメントを投稿