概要
格安SIMは名前の通り安いし、サーバー運用にできそうだが、一般的なSIMだとグローバルIPは固定ではないので他のサーバーからアクセスできないし、そもそもポート開放を許可していないSIMのほうが多かったりする。
しかし、今回の様にWireGuardを使って格安SIMが刺さったサーバー側をVPNクライアントにすることで解決できる。
WireGuardとは
新しい技術を取り入れて実現した後発のVPNプロトコル、及びアプリケーション。ここが詳しい
ゴール
サーバー側とクライアント側で相互にping,sshができるようにする
構成
- サーバー側IP 10.100.0.1
- こっちは固定のグローバルIPアドレスも持っている必要がある。
- クライアント側IP 10.100.0.10
サーバー側セットアップ
以下の記事を参考にUbuntuにWireGuardをインストール
/etc/wireguard/wg0.conf を作成して以下
[Interface] PrivateKey = 作成したサーバーの秘密鍵(server_private.key) Address = 10.100.0.1 ListenPort = 51820 [Peer] PublicKey = 作成したクライアントの公開鍵(client_public.key) AllowedIPs = 10.100.0.0/24
systemctl start wg-quick@wg0
で再起動しておくこと
クライアント側セットアップ
サーバー同様にWireGuardをインストール。ちょっと戸惑うが、インストールするパッケージ等はサーバーと同じ
こっちも /etc/wireguard/wg0.conf を作成して以下
[Interface] PrivateKey = 作成したクライアントの秘密鍵(client_private.key) Address = 10.100.0.10 PostUp = ping -c 1 10.100.0.1 [Peer] PublicKey = 作成したサーバーの公開鍵(server_public.key) Endpoint = サーバーのグローバルIP:51820 AllowedIPs = 10.100.0.0/24 PersistentKeepAlive = 10
ポイントはいくつかあって、
- PostUp: 最初はクライアントから通信を開始しないと接続できない pingを1回無駄撃ちすることで接続を確立させている
- PersistentKeepAlive: NATの設定を維持するのに必要 これがないと一定時間通信がないと切断されてしまう
いざ接続
# wg-quick up wg0
確認
pingで疎通確認師をしてみる
サーバーからクライアントのIPを叩いて見えてるか確認
# from server root@wg01:~# ping 10.100.0.10 PING 10.100.0.10 (10.100.0.10) 56(84) bytes of data. 64 bytes from 10.100.0.10: icmp_seq=1 ttl=64 time=1114 ms 64 bytes from 10.100.0.10: icmp_seq=2 ttl=64 time=114 ms 64 bytes from 10.100.0.10: icmp_seq=3 ttl=64 time=43.0 ms
反対にクライアントからサーバーが見えているかも確認
# from client $ ping 10.100.0.1 PING 10.100.0.1 (10.100.0.1) 56(84) bytes of data. 64 bytes from 10.100.0.1: icmp_seq=1 ttl=64 time=53.2 ms 64 bytes from 10.100.0.1: icmp_seq=2 ttl=64 time=46.10 ms 64 bytes from 10.100.0.1: icmp_seq=3 ttl=64 time=46.7 ms
完璧 あとはローカルネットワーク内の 10.100.0.0/24 でルーティングさせてあげれば色々できそう
参考リンク
追記
結果的に今回の自分の設定は以下のようになった
サーバー側
root@rails2:/etc/wireguard# cat wg0.conf [Interface] Address = 10.0.0.1/32 ListenPort = 51820 PrivateKey = OCiRKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX # raspi01 [Peer] PublicKey = UKO8h5gcyEBucvcpxEBNUAJ61sOdyCHEoIRku02HNyc= AllowedIPs = 10.0.0.11/32 # raspi02 [Peer] PublicKey = zp5+0hwgBX6TV5KioJSBfHgK+Nf/ipweJyPFuktPGUQ= AllowedIPs = 10.0.0.12/32
クライアント側
root@raspi01:~# cat /etc/wireguard/wg0.conf [Interface] PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXX Address = 10.0.0.11 PostUp = ping -c 1 10.0.0.1 [Peer] PublicKey = E1xodlbEUXeNe2dyENcQ6RSwsXUWBEpinONAbQRrwU4= Endpoint = XXXXXX:51820 AllowedIPs = 10.0.0.0/24 PersistentKeepAlive = 15