iPhone,AndroidをWireGuardクライアントにする

WireGuadを利用するスマホの設定をします。ここでは、iPhone、Androidで試しました。

スマホ・クライアント設定

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

ubuntu@ip-10-21-12-65:~$ sudo -s
root@ip-10-21-12-65:/home/ubuntu# cd /etc/wireguard
root@ip-10-21-12-65:/etc/wireguard# umask 077
root@ip-10-21-12-65:/etc/wireguard# wg genkey > priv_phone1

root@ip-10-21-12-65:/etc/wireguard# ls

priv_client1  priv_phone1  privatekey  pub_client1  publickey  wg0.conf

root@ip-10-21-12-65:/etc/wireguard# wg pubkey < priv_phone1 > pub_phone1
root@ip-10-21-12-65:/etc/wireguard# ls

priv_client1  priv_phone1  privatekey  pub_client1  pub_phone1  publickey  wg0.conf

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

root@ip-10-21-12-65:/etc/wireguard# vi /etc/wireguard/wg0.conf

[Peer]    → UbuntuクライアントのPeer の下に追加
PublicKey = (pub_phone1ファイルの内容)
AllowedIPs = 10.0.0.100/32

root@ip-10-21-12-65:/etc/wireguard# wg-quick up 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 スマホクライアント用の設定ファイルをサーバに生成

root@ip-10-0-88-188:/etc/wireguard# vi /etc/wireguard/phone1.conf

[Interface]
Address = 10.0.0.100
PrivateKey = (priv_phone1ファイルの内容)

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

root@ip-10-21-11-79:/etc/wireguard# wg-quick down wg0

[#] ip link delete dev wg0
[#] iptables -D FORWARD -i wg0 -j ACCEPT;iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

root@ip-10-21-11-79:/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.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

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

interface: wg0
  public key: FHFR3FIpUrh/+0fHNnhfBqiQOouKvmYs8V/MCuHhlHc=
  private key: (hidden)
  listening port: 51820

peer: eRaxN7qZFEukAnZpU82xdN+vXTlqBo9eRHbm0UcKqAQ=
  allowed ips: 10.0.0.10/32

peer: IZq00ycLTlRPldWkXDVLHFRPcevQvpUqNH2xtKABL3k=
  allowed ips: 10.0.0.100/32

● phone1.conf をスマホに設定するときに使うQRコードを作成するパッケージをVPNサーバに導入

ubuntu@ip-10-21-12-65:~$ sudo apt install qrencode

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libqrencode4
The following NEW packages will be installed:
  libqrencode4 qrencode
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 47.6 kB of archives.
After this operation, 133 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu focal/universe amd64 libqrencode4 amd64 4.0.2-2 [23.6 kB]
Get:2 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu focal/universe amd64 qrencode amd64 4.0.2-2 [24.0 kB]
Fetched 47.6 kB in 0s (136 kB/s)
Selecting previously unselected package libqrencode4:amd64.
(Reading database ... 210749 files and directories currently installed.)
Preparing to unpack .../libqrencode4_4.0.2-2_amd64.deb ...
Unpacking libqrencode4:amd64 (4.0.2-2) ...
Selecting previously unselected package qrencode.
Preparing to unpack .../qrencode_4.0.2-2_amd64.deb ...
Unpacking qrencode (4.0.2-2) ...
Setting up libqrencode4:amd64 (4.0.2-2) ...
Setting up qrencode (4.0.2-2) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...

● ここで、下記のようにQRコードをSSH端末で表示しようとしたが、さすがに無理!!

sudo -s
root@ip-10-21-12-65:/home/ubuntu# cd /etc/wireguard
root@ip-10-21-12-65:/etc/wireguard# umask 077
root@ip-10-21-12-65:/etc/wireguard# qrencode -t ansiutf8 < phone1.conf  → ???? がいっぱい画面に出た!!

※ GUI画面が表示できない状況では当然、QRコードを表示できない

●公式サイトからスマホ用クライアントアプリ(iOS)をインストール。(Androidもある)
 ここで、前に投降した「テレワークのアクセス回線に使えるWireGuard(サーバ構築)
 の後半で、UbuntuのGUI化の処理をしているので、デスクトップ画面を出して、
 QRコードを表示した。

スマホのWireGuardアプリを立上げ、「QRコードから生成」で、上記QRコードを読み込む

接続名に名前を付けると、その接続名のボタンが表示されるので、スイッチを倒して有効化すると、ネゴシエーションが行われる。
問題ないと接続できて、以下の接続確認ができる。

●スマホでのハンドシェークを確認(VPNサーバ側で確認)

root@ip-10-21-11-79:/home/ubuntu# wg
interface: wg0
  public key: FHFR3FIpUrh/+0fHNnhfBqiQOouKvmYs8V/MCuHhlHc=
  private key: (hidden)
  listening port: 51820

peer: eRaxN7qZFEukAnZpU82xdN+vXTlqBo9eRHbm0UcKqAQ=     ラズパイ1台目
  endpoint: 153.156.36.154:41500
  allowed ips: 10.0.0.10/32
  latest handshake: 53 seconds ago
  transfer: 385.37 MiB received, 15.40 MiB sent

peer: qmcBH0wXxuwBfhRtJb3iXyZmFx2Q2Cwf64lKriq4lDI=     ラズパイ2台目
  endpoint: 153.156.36.154:40457
  allowed ips: 10.0.0.20/32
  latest handshake: 1 minute, 26 seconds ago
  transfer: 392.61 MiB received, 13.64 MiB sent

peer: IZq00ycLTlRPldWkXDVLHFRPcevQvpUqNH2xtKABL3k=     スマホ アンドロイド端末、IPHONE端末とも、同じ設定で通信できた
  endpoint: 153.156.36.154:59023
  allowed ips: 10.0.0.100/32
  latest handshake: 2 minutes, 2 seconds ago
  transfer: 3.11 MiB received, 39.55 MiB sent

iPhone端末、アンドロイド端末の動作確認で大変だったのは、端末側にコンフィグを取り込むために、AWSのUbuntuサーバでQRコードを表示しなければならない関係で、GUI画面を表示しなければならなかったこと。

つまり、スマホ側の操作は簡単であった。

WireGuardのコンフィグを取り込むと、スマホのVPN設定画面に接続先名が表示されるようになるが、対応するサーバ側の設定は1つなので、接続先は1か所だけで見栄えも良い。

SoftEtherの場合は、接続先の仮想HUB分の接続先名が表示される。

根本的にスマホでの設定は簡単。