ラズパイ4 UbuntuMate20.04 をWireGuardクライアントにする

前々投稿で、WireGuardサーバをAWS上のUbuntuに作りましたが、これとVPN通信をするWireGuardクライアントを、ラズパイ4にセットアップしたUbuntuMate20.04で動かします。

ラズパイ4 UbuntuMate20.04のセットアップは以前に投稿しているので、そちらでどうぞ!

前投稿「ラズパイ4 UbuntuServer20.04 をWireGuardクライアントにする」と内容はほとんど同じになりますが、UbuntuMateを採用すると、初めからGUIが使えます。
コマンド出力結果はほとんど同じですが、出力内容を載せています。
違いは、ラズパイ2台目のコンフィグなので、コンフィグ上のキーペアが「priv_client2、pub_client2」で生成しています。

以前は、WireGuardのPPAリポジトリの追加が必要でしたが、今は必要ありません。

● WireGuard をインストール(ラズパイ4)

root@r4ubtmt2004:/home/miko# sudo apt-get install wireguard

パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  wireguard-tools
提案パッケージ:
  openresolv | resolvconf
以下のパッケージが新たにインストールされます:
  wireguard wireguard-tools
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
89.5 kB のアーカイブを取得する必要があります。
この操作後に追加で 332 kB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe arm64 wireguard-tools arm64 1.0.20200513-1~20.04.2 [86.3 kB]
取得:2 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe arm64 wireguard all 1.0.20200513-1~20.04.2 [3,264 B]
89.5 kB を 1秒 で取得しました (68.7 kB/s)
以前に未選択のパッケージ wireguard-tools を選択しています。
(データベースを読み込んでいます ... 現在 253429 個のファイルとディレクトリがインストールされています。)
.../wireguard-tools_1.0.20200513-1~20.04.2_arm64.deb を展開する準備をしています ...
wireguard-tools (1.0.20200513-1~20.04.2) を展開しています...
以前に未選択のパッケージ wireguard を選択しています。
.../wireguard_1.0.20200513-1~20.04.2_all.deb を展開する準備をしています ...
wireguard (1.0.20200513-1~20.04.2) を展開しています...
wireguard-tools (1.0.20200513-1~20.04.2) を設定しています ...
wg-quick.target is a disabled or a static unit, not starting it.
wireguard (1.0.20200513-1~20.04.2) を設定しています ...
man-db (2.9.1-1) のトリガを処理しています ...

● WireGuard クライアントの暗号鍵のキーペアの生成
(AWSのUbuntu上のWireGuard・VPNサーバ側で実施)

ubuntu@ip-10-21-11-79:~$ sudo -s
root@ip-10-21-11-79:/home/ubuntu# cd /etc/wireguard
root@ip-10-21-11-79:/etc/wireguard# umask 077
root@ip-10-21-11-79:/etc/wireguard# wg genkey > priv_client2

root@ip-10-21-11-79:/etc/wireguard# ls

phone1.conf  priv_client1  priv_client2  priv_phone1  privatekey  pub_client1  pub_phone1  publickey  wg0.conf  wg0.conf_backup

root@ip-10-21-11-79:/etc/wireguard# wg pubkey < priv_client2 > pub_client2
root@ip-10-21-11-79:/etc/wireguard# ls

phone1.conf  priv_client1  priv_client2  priv_phone1  privatekey  pub_client1  pub_client2  pub_phone1  publickey  wg0.conf  wg0.conf_backup

●VPNサーバのwg0.conf へLinuxクライアント用の設定を追加

root@ip-10-21-11-79:/etc/wireguard# vi /etc/wireguard/wg0.conf

[Peer]
PublicKey = (pub_client2ファイルの内容)
AllowedIPs = 10.0.0.20/32      → /32 でなければエラーになる  ( Warning: AllowedIP has nonzero host part: 10.0.0.20/24 )

root@ip-10-21-11-79:/etc/wireguard# wg-quick down wg0     → WireGuardサーバを起動

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 8921 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT;iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

● WireGuard クライアントの設定ファイル生成(ラズパイ4)

miko@r4ubtmt2004:~$ sudo -s
[sudo] miko のパスワード:
root@r4ubtmt2004:/home/miko# cd /etc/wireguard
root@r4ubtmt2004:/etc/wireguard# umask 077

root@my-ubtsvr:/etc/wireguard# vi /etc/wireguard/wg0.conf

[Interface]
Address = 10.0.0.20
PrivateKey = (priv_client2ファイルの内容)

[Peer]
PublicKey = WireGuardサーバの公開鍵の値を記載
AllowedIPs = 0.0.0.0/0
Endpoint = telew.miko.services:51820
PersistentKeepalive = 25

● WireGuard クライアントを起動(ラズパイ4)

root@r4ubtmt2004:/etc/wireguard# wg-quick up wg0

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.20 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] wg set wg0 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] iptables-restore -n

root@r4ubtmt2004:/etc/wireguard# ip addr show dev wg0     ※ WireGuardが利用するwg0インターフェイスを確認

4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 10.0.0.20/32 scope global wg0
       valid_lft forever preferred_lft forever

root@r4ubtmt2004:/etc/wireguard# wg     ※ WireGuardの稼働状態

interface: wg0
  public key: SjNnUB28doafV/p4AWz1uWVkOc/RjHv+vClCX2brpCk=
  private key: (hidden)
  listening port: 46663
  fwmark: 0xca6c

peer: FHFR3FIpUrh/+0fHNnhfBqiQOouKvmYs8V/MCuHhlHc=
  endpoint: 35.73.85.207:51820
  allowed ips: 0.0.0.0/0
  transfer: 0 B received, 2.60 KiB sent
  persistent keepalive: every 25 seconds

● WireGuard クライアントを停止して、rootユーザからログアウト。
  WireGuardクライアントサービスは登録しておく。

root@r4ubtmt2004:/etc/wireguard# wg-quick down wg0

[#] ip -4 rule delete table 51820
[#] ip -4 rule delete table main suppress_prefixlength 0
[#] ip link delete dev wg0
[#] iptables-restore -n

root@r4ubtmt2004:/etc/wireguard# exit
exit
miko@r4ubtmt2004:~$

miko@r4ubtmt2004:~$ 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.

● WireGuard クライアントから、AWSクラウド上のサーバに ping

root@r4ubtmt2004:/etc/wireguard# ping 10.0.0.1

PING 10.0.0.1 (10.0.0.1) 56(84) バイトのデータ
64 バイト応答 送信元 10.0.0.1: icmp_seq=1 ttl=64 時間=7.61ミリ秒
64 バイト応答 送信元 10.0.0.1: icmp_seq=2 ttl=64 時間=24.9ミリ秒
64 バイト応答 送信元 10.0.0.1: icmp_seq=3 ttl=64 時間=40.4ミリ秒
64 バイト応答 送信元 10.0.0.1: icmp_seq=4 ttl=64 時間=8.81ミリ秒
64 バイト応答 送信元 10.0.0.1: icmp_seq=5 ttl=64 時間=8.07ミリ秒
64 バイト応答 送信元 10.0.0.1: icmp_seq=6 ttl=64 時間=7.47ミリ秒
64 バイト応答 送信元 10.0.0.1: icmp_seq=7 ttl=64 時間=25.6ミリ秒
^C64 バイト応答 送信元 10.0.0.1: icmp_seq=8 ttl=64 時間=30.9ミリ秒
64 バイト応答 送信元 10.0.0.1: icmp_seq=9 ttl=64 時間=22.2ミリ秒
64 バイト応答 送信元 10.0.0.1: icmp_seq=10 ttl=64 時間=6.90ミリ秒
64 バイト応答 送信元 10.0.0.1: icmp_seq=11 ttl=64 時間=7.13ミリ秒
^C
--- 10.0.0.1 ping 統計 ---
送信パケット数 11, 受信パケット数 11, パケット損失 0%, 時間 10015ミリ秒
rtt 最小/平均/最大/mdev = 6.904/17.268/40.350/11.389ミリ秒

UbuntuServer20.04だけではなく、UbuntuMate20.04上でもmotioneyeプログラムを動かして、Webカメラから遠隔のモニタができました。
motioneye情報サイト: Install On Ubuntu (20.04 or Newer) を参考にインストールを行いました。

ラズパイ4をWireGuardクライアントとするのに、UbuntuServer か UbuntuMate を使いましたが、そのうちにRasbianOSでも やってみようかと思います。