WireGuardで拠点間VPNを構築する

サーバー構成図

サーバー構成は以下の通りです。3つのネットワークから構成されています。

以下の設定を行います。

  • WireGuardのネットワークはIPv4で構築
  • この3つのNWすべてのノードから、他のノードにもアクセス可能
  • 3ネットワーク間はどの方向にもNATの設定を行わない。
  • WireGuardのインターフェースはすべて共通で wg0
  • Sakura VPSはUDP 11055ポートで待ち受ける(最優先)
    • インターネット向けインターフェース名: ens3
  • HomeはUDP 11066ポートで待ち受ける

WireGuardのインストール

Sakura VPSへのインストール

以下のコマンドを実行します

sudo add-apt-repository ppa:wireguard/wireguard
sudo apt update && sudo apt install wireguard-dkms wireguard-tools

パケットの転送機能を有効にします。

sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=0 # この項目があったら、以下のように変更
↓
net.ipv4.ip_forward=1

iptablesでブロック設定している場合、転送を許可します。 また、インターフェースwg0からのトラフィックを許可します。

sudo iptables -A FORWARD -o wg+ -j ACCEPT
sudo iptables -A FORWARD -i wg+ -j ACCEPT

# インターフェースwg0からのトラフィックを許可
sudo iptables -A INPUT -i wg+ -j ACCEPT

# UDP11055ポートへのインバウンドを許可
sudo iptables -A INPUT -p udp -m udp --dport 11055 -j ACCEPT

WireGuardからSakura VPS経由でインターネットに抜けたい場合は、NATの設定を忘れずに設定してください。(別途、

sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens3 -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o ens3 -j MASQUERADE

raspbian(2つの装置)へのインストール

WireGuardをraspbianにインストールします。

curl https://ftp-master.debian.org/keys/archive-key-9.asc | sudo apt-key add -
sudo apt update
sudo apt install wireguard

パケットの転送機能を有効にします。

sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=0 # この項目があったら、以下のように変更
↓
net.ipv4.ip_forward=1

iptablesでブロック設定している場合、転送を許可します。 また、インターフェースwg0からのトラフィックを許可します。

sudo iptables -A FORWARD -o wg+ -j ACCEPT
sudo iptables -A FORWARD -i wg+ -j ACCEPT
sudo iptables -A INPUT -i wg+ -j ACCEPT

# Home raspbianは以下も実行し、11066へのインバウンドを許可します
sudo iptables -A INPUT -p udp -m udp --dport 11066 -j ACCEPT

WireGuardで拠点間VPNの設定

以下のコマンドを実行して、設定ファイルに入れる秘密鍵 *.keyと公開鍵 *.pubを出力します。秘密鍵は、1つのピアに対して1つ必ずユニークなものを使ってください

wg genkey | tee sakura.key | wg pubkey > sakura.pub
wg genkey | tee work.key | wg pubkey > work.pub
wg genkey | tee home.key | wg pubkey > home.pub

拠点Sakura VPSへの設定

設定ファイルを作成します。

sudo vi /etc/wireguard/wg0.conf
[Interface]
Address = 10.18.10.1/24
SaveConfig = false
ListenPort = 11055
PrivateKey = gDUOR8Lp6dDw21a1lPW(秘密鍵)/ZqLw6FXWILH4=
# ↑Sakuraのraspbianの秘密鍵

[Peer]
# Work
PublicKey = MPzBZwUzm7ys(公開鍵)q+pE1t/kTX2na/08=
# ↑Workのraspbianの公開鍵
AllowedIPs = 10.18.10.2/32, 192.168.2.0/24
# ここで指定したセグメントのみWireGuard通る

[Peer]
# Home
PublicKey = kA8Mqnxm(公開鍵)PYJeG8+A73+4zsHetnQ=
# ↑Homeのraspbianの公開鍵
AllowedIPs = 10.18.10.3/32, 192.168.1.0/24
# ここで指定したセグメントのみWireGuard通る

以下のコマンドを実行し、開始します

sudo systemctl start [email protected]

拠点名Workのraspbianへの設定

設定ファイルを作成します。

sudo vi /etc/wireguard/wg0.conf

設定ファイルは以下の通り作ります

[Interface]
PrivateKey = wGGJB1W6adcBrvc(秘密鍵)xER+DYP4HXzH24=
# ↑Workのraspbianの秘密鍵
Address = 10.18.10.2/24
SaveConfig = false
DNS = 8.8.8.8

[Peer]
# Sakura VPS
PublicKey = sODIHoE/t(公開鍵)b+Jkt23LPWuRCo90wvP11no=
# ↑Sakuraの公開鍵
Endpoint = <Sakura VPSのホスト名>:11055
PersistentKeepalive = 25
AllowedIPs = 10.18.10.1/32

[Peer]
# Home
PublicKey = kA8Mqnxm(公開鍵)PYJeG8+A73+4zsHetnQ=
# ↑Homeのraspbianの公開鍵
Endpoint = <HomeのIPアドレスまたはDDNSホスト名>:11066
PersistentKeepalive = 25
AllowedIPs = 10.18.10.3/32, 192.168.1.0/24
# ここで指定したセグメントのみWireGuard通る

以下のコマンドを実行し、開始します

sudo systemctl start [email protected]

拠点名Homeのraspbianへの設定

拠点Home用の設定ファイルを作成します。

sudo vi /etc/wireguard/wg0.conf

設定ファイルは以下の通り作ります

[Interface]
PrivateKey = IPbcR1TX2tjXeWvH(秘密鍵)ktBPlUsrGvPFc=
# ↑Workのraspbianの秘密鍵
Address = 10.18.10.3/24
ListenPort = 11066 
# サーバーになるからListenPortを設定
SaveConfig = false
DNS = 8.8.8.8

[Peer]
# Sakura VPS
PublicKey = sODIHoE/t(公開鍵)b+Jkt23LPWuRCo90wvP11no=
# ↑Sakuraの公開鍵
Endpoint = <Sakura VPSのホスト名>:11055
PersistentKeepalive = 25
AllowedIPs = 10.18.10.1/32

[Peer]
# Work
PublicKey = MPzBZwUzm7ys(公開鍵)q+pE1t/kTX2na/08=
# ↑Workのraspbianの公開鍵
AllowedIPs = 10.18.10.2/32, 192.168.2.0/24
# ここで指定したセグメントのみWireGuard通る

以下のコマンドを実行し開始します。

sudo systemctl start [email protected]

動作確認

Home raspbianやWork raspbianに接続し、接続できるか確認します。できない場合、ファイアウォールの設定などを確認してください。

ping 10.18.0.1 -c 3
ping 10.18.0.2 -c 3
ping 10.18.0.3 -c 3
ping 192.168.2.1 -c 3
ping 192.168.3.1 -c 3

静的ルーティング設定し、外部のPCから確認

HomeとWorkのデフォルトゲートウェイとなっているrouterに、静的ルーティング設定を行います。

Homeのrouterへの静的ルーティング設定

ルータの管理者画面の静的ルーティング設定にて、192.168.2.0/24, 10.18.0.0/24 を 192.168.1.100に渡すように設定してください。

Workのrouterへの静的ルーティング設定

ルータの管理者画面の静的ルーティング設定にて、192.168.1.0/24, 10.18.0.0/24 を 192.168.2.100に渡すよう設定してください。

Work/Homeにつながる他の端末から動作確認

Work/Homeにつながる端末から、以下が帰ってくるか確認してください。

ping 10.18.0.1 -c 3
ping 10.18.0.2 -c 3
ping 10.18.0.3 -c 3
ping 192.168.2.1 -c 3
ping 192.168.3.1 -c 3

問題なければ終了です。

サービス化

動作が問題ないことを確認したら、Work、Home、Sakura VPSで以下を実行して、サービスにします。

sudo systemctl enable [email protected]

ファイアウォールの設定

ファイアウォールも再起動後には初期化されてしまうので、iptables-persistentなどの方法で永続化設定します

sudo apt install iptables-persistent

まとめ

WireGuardで拠点間VPSを設定する方法について紹介しました。OpenVPNやL2TPと比較してより簡単に設定することができることがおわかりかと思います。

特に、WireGuardの網内では各ピアが直接ピアリングできるため、どこか1箇所が停止しても、それ以外の場所では継続利用ができる構造になっています。

例えばSakrua VPSが死んだ場合でも、WorkとOffice間は生きているため、その2点間では継続利用ができます。

コメント

タイトルとURLをコピーしました