動かざることバグの如し

近づきたいよ 君の理想に

RaspiでWireGuard VPN環境作ったのに外部から他のLANIPにアクセスできない件

状況

家の光回線が固定IPでないためポート開放して自宅サーバー、ってのができない

そこで固定IPを持つVPSサーバーを契約 WireGuardのVPNサーバーを設定

自宅にLANIPをもたせたRaspiを構築 WireGuardのクライアントインストールしてVPNの接続までは成功

だが

  • VPSサーバー → RaspiのWireGuard専用プライベートIP
  • VPSサーバー → Raspiの自宅ローカルIP

pingは通るが

  • VPSサーバー → 自宅のルーターのローカルIP(192.168.1.1とか)
  • VPSサーバー → 自宅のNASのローカルIP

pingが通らない

ローカルIPまでは到達してるが、その先の自宅ローカルネットワーク越しで通信ができない

解決策

以下のコマンドをRaspi上で実行する

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o wlan0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s WireGuard専用プライベートネットワーク -o RaspiのNIC -j MASQUERADE
  • -t nat natテーブルはNetwork Address Translationの通りネットワークアドレス変換を行う。
  • -A POSTROUTING POSTROUTINGチェインに新しいルールを追加 POSTROUTINGチェインとはルーティングの後に実行される送信時に送信元アドレス/ポートを変換するチェイン
  • -s パケットの送信元
  • -o パケットを送信するインタフェース
  • -j jampの略 MASQUERADEはパケットの送信元アドレスを修正する

WireGuardの起動時に自動でコマンド実行してほしいのでRaspiの設定は以下になった

[Interface]
PrivateKey = xxx
Address = 10.0.0.100/24
PostUp = iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o wlan0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -o wlan0 -j MASQUERADE
DNS = 94.140.14.14
MTU = 1420

[Peer]
PublicKey = xxxx
Endpoint = xxxxxx:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25

参考リンク