やりたい事
QNAP の Container Station で WireGuard をインストールし、QNAP経由でVPN接続ができるようにする。
サーバー設定(QNAPでのアプリインストール)
- App Center で Container Station をインストールする
- (初回起動時のみ)Container Station の保存場所を選択する。ここではデフォルトの Container を選択
サーバー設定(QNAPでのサーバー設定)
- [+ 作成] → [+アプリケーションの作成] をクリック
- アプリケーション名に WireGuard と入力
- YAML: に下記を入力 → [作成] をクリック
version: '3.3'
services:
wireguard:
image: masipcat/wireguard-go:latest
container_name: wireguard
cap_add:
- NET_ADMIN
sysctls:
- net.ipv4.ip_forward=1
volumes:
- /dev/net/tun:/dev/net/tun
- /share/Container/docker/wireguard:/etc/wireguard
environment:
- WG_COLOR_MODE=always
- LOG_LEVEL=debug
ports:
- 51820:51820/udp
privileged: true
restart: unless-stopped
- /share/Container/docker/wireguard は FileStation から見た場合 /Container/docker/wireguard フォルダーになる
- ポートは必要に応じて変更する事
- [概要] をクリック
- ▶︎をクリックし [ >_ ] をクリック
- コマンドに /bin/bash を入力、[OK] をクリック
- 下記を順番に実行する
wg genkey | tee privatekey | wg pubkey > publickey
echo "## Server"; echo -n "PrivateKey = "; cat privatekey; echo -n "PublicKey = "; cat publickey
wg genkey | tee privatekey | wg pubkey > publickey
echo "## Client 1"; echo -n "PrivateKey = "; cat privatekey; echo -n "PublicKey = "; cat publickey
wg genkey | tee privatekey | wg pubkey > publickey
echo "## Client 2"; echo -n "PrivateKey = "; cat privatekey; echo -n "PublicKey = "; cat publickey
rm -r privatekey | rm -r publickey
実行結果は下記のように表示される
bash-5.0# wg genkey | tee privatekey | wg pubkey > publickey
bash-5.0#
bash-5.0# echo "## Server"; echo -n "PrivateKey = "; cat privatekey; echo -n "PublicKey = "; cat publickey
## Server
PrivateKey = SP41OumiNfJ+E1hA39yY2WsCnZaIFNLi3xlXpAIgQF4=
PublicKey = N19gkc6Xqp3Fr0jtigs7ZVBcn6eTfhuctmT7Yb8ISR8=
bash-5.0#
bash-5.0# wg genkey | tee privatekey | wg pubkey > publickey
bash-5.0#
bash-5.0# echo "## Client 1"; echo -n "PrivateKey = "; cat privatekey; echo -n "PublicKey = "; cat publickey
## Client 1
PrivateKey = aA4npiwlLmv2E03Tw55LCpLIPrKN8x3mDY+9zvsCi1g=
PublicKey = LhlVwduKa3HTMXf7lj24W70RoBgKz1F0K6Fan8/MIFw=
bash-5.0#
bash-5.0# wg genkey | tee privatekey | wg pubkey > publickey
bash-5.0#
bash-5.0# echo "## Client 2"; echo -n "PrivateKey = "; cat privatekey; echo -n "PublicKey = "; cat publickey
## Client 2
PrivateKey = KO4Snz4Z8KzpyVaYfGEQ6VHwrjSXDktRA4Y3zGtfdlI=
PublicKey = /lTtGojUV6Zk0TxFvGsw6WdJqSxawELm2dwX9W8eN2I=
bash-5.0#
bash-5.0# rm -r privatekey | rm -r publickey
bash-5.0#
- テキストエディタで下記を作成し、QNAP の /Container/docker/wireguard 下にファイル名 wg0.conf で保存する
## Server (wg0.conf) ##
[Interface]
Address = 192.168.10.99/24
ListenPort = 51820
#Server の PrivateKey
PrivateKey = SP41OumiNfJ+E1hA39yY2WsCnZaIFNLi3xlXpAIgQF4=
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
#Client 1 の PublicKey
PublicKey = LhlVwduKa3HTMXf7lj24W70RoBgKz1F0K6Fan8/MIFw=
Address = 192.168.10.11/32
[Peer]
#Client 2 の PublicKey
PublicKey = /lTtGojUV6Zk0TxFvGsw6WdJqSxawELm2dwX9W8eN2I=
Address = 192.168.10.12/32
- PrivateKey, PublicKeyは実際に表示された値に置き換える事
- [Interface] は Server の PrivateKey, [Peer] は Client の PublicKey
- Address は必要に応じて変更する事
- ListenPort はQNAPで使っているポートと被らない事
- Address の /24 /32 を間違えない事
- アクションの隣のボタンをクリックし、コンテナの再起動をする
- ▶︎をクリックし WireGuard という文字列をクリック
- コンソールに下記のように表示されていればOK
DEBUG: (wg0) 2021/06/23 05:12:51 peer(LhlV…MIFw) - Starting...
DEBUG: (wg0) 2021/06/23 05:12:51 peer(LhlV…MIFw) - Routine: sequential receiver - started
DEBUG: (wg0) 2021/06/23 05:12:51 peer(LhlV…MIFw) - Routine: nonce worker - started
DEBUG: (wg0) 2021/06/23 05:12:51 peer(LhlV…MIFw) - Routine: sequential sender - started
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
- テキストエディタで下記を作成し、QNAP の /Container/docker/wireguard 下にファイル名 client1.conf, client2.conf で保存する
## client (client1.conf) ##
[Interface]
Address = 192.168.10.11/24
#Client 1 の PrivateKey
PrivateKey = aA4npiwlLmv2E03Tw55LCpLIPrKN8x3mDY+9zvsCi1g=
DNS = 1.1.1.1
[Peer]
#Server の PublicKey
PublicKey = N19gkc6Xqp3Fr0jtigs7ZVBcn6eTfhuctmT7Yb8ISR8=
Endpoint = sample.myqnapcloud.com:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
## client (client2.conf) ##
[Interface]
Address = 192.168.10.12/24
#Client 2 の PrivateKey
PrivateKey = KO4Snz4Z8KzpyVaYfGEQ6VHwrjSXDktRA4Y3zGtfdlI=
DNS = 1.1.1.1
[Peer]
#Server の PublicKey
PublicKey = N19gkc6Xqp3Fr0jtigs7ZVBcn6eTfhuctmT7Yb8ISR8=
Endpoint = sample.myqnapcloud.com:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
- PrivateKey, PublicKeyは実際に表示された値に置き換える事
- [Interface] は Client の PrivateKey, [Peer] は Server の PublicKey
- Endpoint はサーバーのアドレス、ポートを指定する事
- Addressの /24 を間違えない事
- ルーターのポート設定変更をする。例えばQNAPのローカルIPアドレスが 192.168.1.99 の場合、ルーター外側の 51820 UDP を 192.168.1.99 51820 UDP にポートフォワードまたはマッピングをする。
クライアント設定(アプリインストール)
- WireGuardのダウロードページ からOSを選んでダウンロード、インストールをする
クライアント設定(設定インストール)
■スマホの場合(QRコード)
QNAP に保存した client1.conf のテキストをPCかMacでQRコードに変換する(ウェブの変換サービスは絶対に使わない事)
WireGuard アプリを起動する
右上の + をクリック、QRコードから作成 を選択
PCかMacでQRコードを表示する
QRコードをカメラで読み込んだあと「スキャンしたトンネル設定に名前をつけてください」に client1.conf を入力する
■iOSの場合(QRコード作成できない場合)
QNAP に保存した client1.conf をiCloudに保存するか、iOS に Qfile をインストールして ファイル アプリに追加する
WireGuard アプリを起動する
右上の + をクリック、ファイル、アーカイブからの作成 を選択
ブラウズから保存した場所を探し client1.conf を選択、Import をクリックする
■Macの場合
QNAP に保存した client1.conf をMacにコピーする
画面上部のドラゴンのようなロゴをクリックし Manage Tunnels をクリックする
左下の + をクリック、Import Tunnel(s) from File… を選択
client1.conf を選択、Import をクリックする
■Windowsの場合
QNAP に保存した client1.conf をWindowsにコピーする
アプリを起動する
左下の トンネルの追加 をクリック、トンネルをファイルからインポート…(i) を選択
client1.conf を選択、Import をクリックする
接続方法
■スマホの場合
WireGuard アプリを起動し client1.conf のスイッチをオンにする
■Macの場合
画面上部のドラゴンのようなロゴをクリックし client1.conf をクリックする
■Windowsの場合
WireGuard アプリを起動し client1.conf を選択し、[有効化(A)]をクリックする
メモ
- 接続は一瞬
- 転送速度は IPsec/L2TP の二倍くらい
- データ通信やWifiが切り替わっても接続が切れない
- /bin/bash でターミナルを起動後 wg[enter] で接続状況を確認可能
- QTS5ではWireGuardが実装される予定