WireGuard
Created|Updated
WireGuard でRasberry Pi 4B にVPN の環境を構築してみました。
OpenVPN よりもシンプルらしいです。
今後、管理用のGUIツールが充実していくと良いですね。
環境
VPN サーバ
- Raspberry Pi 4B
- Ubuntu Server Focal 20.04 aarch64
- wireguard 1.0.20200121
- qrencode 4.0.2-2
ネットワーク
| ホスト |
WireGuard |
LAN |
| VPN サーバ |
10.0.0.1/24 |
192.168.11.107/24 |
| VPN クライアント1 |
10.0.0.2/24 |
|
| VPN クライアント2 |
10.0.0.3/24 |
|
| LAN ホスト |
|
192.128.11.2/24 |
| LAN ホスト |
|
192.128.11.106/24 |
構築
パッケージのインストール
$ sudo apt install wireguard qrencode
|
秘密鍵と公開鍵の生成
- VPN サーバ用
$ mkdir wgkeys; cd wgkeys $ wg genkey | tee server_privatekey | wg pubkey > server_publickey
|
- VPN クライアント1用
$ wg genkey | tee client1_privatekey | wg pubkey > client1_publickey
|
- VPN クライアント2用 (オプション)
$ wg genkey | tee client2_privatekey | wg pubkey > client2_publickey
|
設定ファイル
- VPN サーバ設定ファイル
/etc/wireguard/wg0.conf[Interface] Address = 10.0.0.1/24 SaveConfig = true ListenPort = 51820 PrivateKey = <サーバの秘密鍵>
PostUp = iptables -A FORWARD -o %i -j ACCEPT PostDown = iptables -D FORWARD -o %i -j ACCEPT
[Peer] PublicKey = <クライアント1の公開鍵> AllowedIPs = 10.0.0.2/32
[Peer] PublicKey = <クライアント2の公開鍵> AllowedIPs = 10.0.0.3/32
|
- VPN Client1 の設定ファイル
wg0_client1.conf[Interface] Address = 10.0.0.2/24 PrivateKey = <クライアント1の秘密鍵> DNS = 10.0.0.1
[Peer] PublicKey = <サーバの公開鍵> AllowedIPs = 0.0.0.0/0 Endpoint = <サーバのFQDNまたはIPアドレス>:51820
|
- VPN Client2 の設定ファイル (オプション)
wg0_client2.conf[Interface] Address = 10.0.0.3/24 PrivateKey = <クライアント2の秘密鍵> DNS = 10.0.0.1
[Peer] PublicKey = <サーバの公開鍵> AllowedIPs = 0.0.0.0/0 Endpoint = <サーバのFQDNまたはIPアドレス>:51820
|
IPv4 ポートフォワーディングの設定
$ sudo sysctl net.ipv4.ip_forward=1
|
ファイアウォールの設定
$ sudo ufw allow 51820/udp
|
ルータの設定
- インターネットからサーバへの通信 51820/udp をサーバへ通過させます
VPN クライアント設定ファイルをクライアントへ転送
以下のどちらかで転送します。
- ファイルを転送する方法
- QRコードをカメラから撮影する方法
$ qrencode -t ansiutf8 < wg0_client1.conf
|
実行
起動
状態の確認
停止
自動起動
$ sudo systemctl enable wg-quick@wg0
|
利用
- アンドロイドからの利用
wireguard アプリで接続する。
- 接続状態の表示
$ sudo wg interface: wg0 public key: <サーバの公開鍵> private key: (hidden) listening port: 51820
peer: <クライアント1の公開鍵> endpoint: <接続元IP:ポート番号> allowed ips: 10.0.0.2/32 latest handshake: 24 seconds ago transfer: 2.50 KiB received, 2.84 KiB sent
peer: <クライアント2の公開鍵> allowed ips: 10.0.0.3/32
|