ASDK上で仮想ネットワークを作って直接アクセスするためにVPN Gatewayを立てるのが普通ですが、ちょっと思い立ってUbuntuにWireGuardを入れてVPNサーバとして構成してみました。
VPN GatewayでIPsecとか構成し始めるといろいろと面倒くさいので、UDPポートを1個開放するだけで使えるWireGuardは手軽かなと。
WireGuardをインストールする
https://www.wireguard.com/install/ に記載されている手順でパッケージを追加する。今回の追加対象となるUbuntuは18.04なのでリポジトリ追加してからインストールになる。
sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get update
sudo apt-get install wireguard
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130525/image-5e6ad2f4e5562-1.png)
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130526/image-5e6ad3330c9bb.png)
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130526/image-5e6ad34dba9e2.png)
サーバ(Ubuntu)側でトンネルを設定する
まずはVPN越しのトラフィックを転送するため、ip_forwardをオンにする。
sudo vim /etc/sysctl.d/98-wireguard.conf
net.ipv4.ip_forward = 1
sudo sysctl -p /etc/sysctl.d/98-wireguard.conf
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130529/image-5e6b25997b6b2.png)
次にサーバ側の公開鍵・秘密鍵を生成する。
ここで作った鍵はこの後のトンネル設定で利用するので、無くさないようにしておく。
mkdir wgkeys
umask 077 wgkeys
cd wgkeys
wg genkey > private.key
wg pubkey > public.key < private.key
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130529/image-5e6b25fa12f11.png)
クライアント(Windows)側でトンネルを設定する
Windows版のクライアントソフトウェアは、 https://www.wireguard.com/install/ からダウンロードできる。
セットアップすると以下のような画面が表示される。
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130527/image-5e6ad8153d391.png)
メイン画面下部の[Add Tunnel]メニューから[Add empty tunnel…]を実行する。
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130528/image-5e6ad83033f54-1.png)
[Create new tunnel]画面に、Private key/Private key (公開鍵・秘密鍵)のペアが表示されるので適当な名前を付けてSaveしておく。
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130528/image-5e6ad8957068f.png)
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130529/image-5e6ad91e30c43.png)
サーバ~クライアント間のトンネルを設定する
まずはサーバ側の設定から。wg0デバイスとして構成してみる。
sudo vim /etc/wireguard/wg0.conf
sudo wg-quick up wg0
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130530/image-5e6b2badefad4.png)
wg0の内容は以下の通り。
[Interface]
Address = 192.168.255.1/24
ListenPort = <サーバのPort番号>
PrivateKey = <サーバの秘密鍵>
SaveConfig = true
# クライアント側からのトラフィックをIPマスカレード(NAPT)して、このサーバのIPアドレスに変換して内部ネットワークに流すためのiptablesコマンド。
# (IPマスカレードしないと、クライアントのIPアドレスのまま内部ネットワークにパケットが流れてくるので、内部ネットワークの中で適切に戻りのルーティングを追記しないといけなくなる)
PostUp = iptables -A FORWARD -o %i -j ACCEPT; iptables -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
# 以下はIPv6も通すときの設定
# 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
# クライアント1
[Peer]
PublicKey = <クライアントの公開鍵>
# クライアント側のIPアドレスを指定する
AllowedIPs = 192.168.255.11/32
# クライアント2
[Peer]
PublicKey = <クライアントの公開鍵>
# クライアント側のIPアドレスを指定する
AllowedIPs = 192.168.255.12/32
最後にサーバのwg0サービスを自動起動するように設定しておく。
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130536/image-5e6b488100cd8-2.png)
次に、クライアント側の設定を行う。
サーバに流し込んだコンフィグと同様に、アプリケーション上で文字列を設定していく。
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130531/image-5e6b2cff4d30e-2.png)
[Interface]
PrivateKey = <クライアントの秘密鍵>
# クライアント側で利用するIPアドレスを指定する
Address = 192.168.255.11/24
# DNS設定をしないと、DHCP等で持っているDNSサーバがVPNトンネル越しに(普通はそんなアクセス出来ない)DNSサーバを使って名前解決をしようとして、各種のアクセスがトラフィックが名前解決エラーになってしまう。
# ここでは、接続先のAzure VMで共通して利用可能なDNSサーバを指定している。
DNS = 168.63.129.16
[Peer]
PublicKey = <サーバの公開鍵>
# VPNトンネルに流すトラフィックのIPアドレスレンジを指定する。0.0.0.0/0だと全てのトラフィックがVPN越しになる。
AllowedIPs = 0.0.0.0/0
# IPv6も通すならこっち
# AllowedIPs = 0.0.0.0/0, ::0/0
# サーバのIPアドレス:ポート番号を指定する
Endpoint = <サーバのIPアドレス>:<サーバのPort番号>
WireGuard VPNトンネルを開始する
で、繋いでみるとこんな感じ。
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130532/image-5e6b2db768f02.png)
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130533/image-5e6b2e6d6f04f-1.png)
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130532/image-5e6b2e3d88ced.png)
VPN接続のLANアダプタが一個増えてそこにトラフィックが流れるようになる。
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130533/image-5e6b2ea9e12cf.png)
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130533/image-5e6b2ec617174.png)
![](https://file.blue.wirednet.jp/wordpress/2020/03/29130534/image-5e6b2eea65475-1.png)
参考にしたURL
Quick Start – WireGuard
https://www.wireguard.com/quickstart/
WireGuard – ArchWiki
https://wiki.archlinux.jp/index.php/WireGuard
WireGuard をつかってみる – Qiita
https://qiita.com/kjm/items/4344e5ccaaf9f02e5d69
WireGuardでVPNごしに自宅サーバ開発できる環境を作った
https://blog.koh.dev/2020-01-01-vpn/
「UbuntuにWireGuardを入れてVPN接続してみる」への1件の返信
[…] UbuntuにWireGuardを入れてVPN接続してみる […]