前提
目的
- 家のオンプレサーバーをインターネットに公開したいが、DS-Liteしている為公開できない
- VPNを使う事で、Oracle Cloud上のサーバーを経由してオンプレ鯖のサービスを公開する。
- ようするに、Oracle Cloud上のサーバーからオンプレ鯖のLANが参照したい
設定値
- wireguardのネットワークは 10.240.0.0/24
- オンプレ鯖のネットワークは 192.168.10.0/24
参考URL
公式
Ubuntu
net.ipv4.forward = 1
ホスト
- クラウド Ubuntu 18.04LTS
- ローカル
Debian 10 Ubuntu 18.04LTS
- 執筆時点 2020/04/14 では Debian 10でwireguardをセットアップした際に
ip link add dev wg0 type wireguard
が Unknown type
となってしまった為Ubuntuに変更
セットアップ手順
- クライアント、サーバーともに
net.ipv4.forward = 1
を設定する。
概要
- ip コマンド + wg コマンドを使って設定する方法と、wg-quickを使う方法の2種類ある。
- wg-quick を使った方が楽なのでこちらを選択する(といってもあまり変わらないが)
- とりあえず公式のやり方等は一旦忘れる
サーバー側、クライアント側共通
インストール
- sudo add-apt-repository ppa:wireguard/wireguard
- sudo apt-get update
- sudo apt-get install wireguard
公開鍵、秘密鍵の生成
- sudo su -
- cd /etc/wireguard
- wg genkey > private
Warning: writing to world accessible file.
Consider setting the umask to 077 and trying again.
- chmod 077 private
- wg pubkey < private
CzAAAAAAAAAAAAAAAAAAAAAAAuVg=
←これを控えておく
サーバー側
- サーバー側 configを作成 (/etc/wireguard/wg0.conf)
[Interface]
PrivateKey = サーバー側秘密鍵 (private) の中身をコピペ
ListenPort = 12345
Address = 10.240.0.1
[Peer]
PublicKey = クライアント側公開鍵
AllowedIPs = 10.240.0.20/32, 192.168.10.0/24
ローカル側(クライアント側)
- クライアント側 configを作成 (/etc/wireguard/wg0.conf)
[Interface]
PrivateKey = クライアント側秘密鍵 (private) の中身をコピペ
Address = 10.240.0.20
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PreDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = サーバー側公開鍵
EndPoint = example.com:12345
AllowedIPs = 10.240.0.0/24
PersistentKeepAlive = 30
接続開始
- サーバー側、クライアント側 両方で
sudo wg-quick up wg0
systemdのserviceを有効化
- 起動時に自動的にVPNが貼られるようにする。
- サーバー、クライアント側両方で実行
sudo systemctl enable wg-quick@wg0.service
備考
- サーバー側はポート開放が必要。
- wg pubkey < private は、privateの中身が同一であれば、何度やっても同じ結果が出る。
[TODO] systemd のunitファイルを書いていないので、サーバー再起動するとアウト