WireGuard
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; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -o %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -o %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[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 wg-quick up wg0
状態の確認
$ sudo wg
停止
$ sudo wg-quick down wg0
自動起動
$ 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
Comment