WireGuard+iptablesの設定により自宅のLAN内にアクセスできることは分かったが、肝心のiptablesの書き方が分からない。
ネットワーク構成とともに具体的な設定例を教えて欲しい。
こんなお悩みを解決します。
今回は、WireGuardでVPN接続時にLAN内のマシンに接続できている前提で話を進めます。
まだ環境構築や各種設定が完了していない方は、下記の記事を参考にしてください。
【解説】VPS+VPN(WireGuard)による自宅サーバの公開方法を分かりやすく解説!(VPS契約編)
続きを見る
【解説】VPS+VPN(WireGuard)による自宅サーバの公開方法(VPN設定編)
続きを見る
【解説】VPS+VPN(WireGuard)による自宅サーバの公開方法(ルーティング設定編)
続きを見る
WireGuardのサーバ側(VPN Server)とクライアント側(VPN Client Home)のそれぞれにおける、iptablesの設定方法を順番に解説していきますので、興味がある方は是非最後までご覧ください。
前提とするネットワーク構成と通信例
想定するネットワーク構成と通信例を共有した上で、iptablesの設定方法を解説します。
前提とするネットワーク構成
今回は、以下のようなネットワーク構成を想定します。
また、自宅ネットワーク内の各サーバにおいて、起動しているサービスごとの待ち受けポート番号は、以下のように定義されているとします。
対象サービス | ポート番号 | 備考 |
---|---|---|
Django(Web) | 80/tcp | - |
BIND(DNS) | 53/udp | - |
Node(Node-Red) | 1880/tcp | - |
Infrared Controller | - | VPNから直接リクエストを出さないため、対象外とする |
Samba | 137/udp,138/udp,139/tcp,445/tcp | Androidスマホのみ動作確認済み |
通信例
スマホから自宅ネットワーク内のWebサーバにアクセスする場合を例に挙げ、簡易的に図示すると以下のようになります。
ルータの処理等、一部の内容を省略しています。
前提とするネットワーク構成におけるiptablesの設定例
WireGuardのサーバ側(VPN Server)とWireGuardのクライアント側(VPN Client Home)のそれぞれにおける設定は以下のようになります。
WireGuardのサーバ側(VPN Server)の設定
起動時(conf.up.d)と終了時(conf.down.d)の設定ファイルは、それぞれ以下のようになります。
conf.up.d/02-routing-lan-access.conf
追加処理であるため、「-A
」オプションを指定します。
# for DNS
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination 10.0.20.2:53
# for Web
iptables -t nat -A PREROUTING -p tcp -d 192.168.11.2 --dport 80 -j DNAT --to-destination 10.0.20.2:80
# for Node-Red
iptables -t nat -A PREROUTING -p tcp -d 192.168.11.3 --dport 1880 -j DNAT --to-destination 10.0.20.2:1880
# for NAS
iptables -t nat -A PREROUTING -p udp -d 192.168.11.4 --dport 137 -j DNAT --to-destination 10.0.20.2:137
iptables -t nat -A PREROUTING -p udp -d 192.168.11.4 --dport 138 -j DNAT --to-destination 10.0.20.2:138
iptables -t nat -A PREROUTING -p tcp -d 192.168.11.4 --dport 139 -j DNAT --to-destination 10.0.20.2:139
iptables -t nat -A PREROUTING -p tcp -d 192.168.11.4 --dport 445 -j DNAT --to-destination 10.0.20.2:445
# IP MASQUERADE
iptables -t nat -A POSTROUTING -d 10.0.20.0/24 -j MASQUERADE
conf.down.d/02-routing-lan-access.conf
削除処理であるため、「-D
」オプションを指定します。
# for DNS
iptables -t nat -D PREROUTING -p udp --dport 53 -j DNAT --to-destination 10.0.20.2:53
# for Web
iptables -t nat -D PREROUTING -p tcp -d 192.168.11.2 --dport 80 -j DNAT --to-destination 10.0.20.2:80
# for Node-Red
iptables -t nat -D PREROUTING -p tcp -d 192.168.11.3 --dport 1880 -j DNAT --to-destination 10.0.20.2:1880
# for NAS
iptables -t nat -D PREROUTING -p udp -d 192.168.11.4 --dport 137 -j DNAT --to-destination 10.0.20.2:137
iptables -t nat -D PREROUTING -p udp -d 192.168.11.4 --dport 138 -j DNAT --to-destination 10.0.20.2:138
iptables -t nat -D PREROUTING -p tcp -d 192.168.11.4 --dport 139 -j DNAT --to-destination 10.0.20.2:139
iptables -t nat -D PREROUTING -p tcp -d 192.168.11.4 --dport 445 -j DNAT --to-destination 10.0.20.2:445
# IP MASQUERADE
iptables -t nat -D POSTROUTING -d 10.0.20.0/24 -j MASQUERADE
WireGuardのクライアント側(VPN Client Home)の設定
起動時(conf.up.d)と終了時(conf.down.d)の設定ファイルは、それぞれ以下のようになります。
conf.up.d/02-routing-lan-access.conf
追加処理であるため、「-A
」オプションを指定します。
# for DNS
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.11.2:53
# for Web
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.11.2:80
# for Node-Red
iptables -t nat -A PREROUTING -p tcp --dport 1880 -j DNAT --to-destination 192.168.11.3:1880
# for NAS
iptables -t nat -A PREROUTING -p tcp --dport 137 -j DNAT --to-destination 192.168.11.4:137
iptables -t nat -A PREROUTING -p tcp --dport 138 -j DNAT --to-destination 192.168.11.4:138
iptables -t nat -A PREROUTING -p tcp --dport 139 -j DNAT --to-destination 192.168.11.4:139
iptables -t nat -A PREROUTING -p tcp --dport 445 -j DNAT --to-destination 192.168.11.4:445
# IP MASQUERADE
iptables -t nat -A POSTROUTING -d 192.168.11.0/24 -j MASQUERADE
conf.down.d/02-routing-lan-access.conf
削除処理であるため、「-D
」オプションを指定します。
# for DNS
iptables -t nat -D PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.11.2:53
# for Web
iptables -t nat -D PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.11.2:80
# for Node-Red
iptables -t nat -D PREROUTING -p tcp --dport 1880 -j DNAT --to-destination 192.168.11.3:1880
# for NAS
iptables -t nat -D PREROUTING -p tcp --dport 137 -j DNAT --to-destination 192.168.11.4:137
iptables -t nat -D PREROUTING -p tcp --dport 138 -j DNAT --to-destination 192.168.11.4:138
iptables -t nat -D PREROUTING -p tcp --dport 139 -j DNAT --to-destination 192.168.11.4:139
iptables -t nat -D PREROUTING -p tcp --dport 445 -j DNAT --to-destination 192.168.11.4:445
# IP MASQUERADE
iptables -t nat -D POSTROUTING -d 192.168.11.0/24 -j MASQUERADE
まとめ
今回は、具体的なネットワーク構成を示した上で、WireGuardのサーバ側(VPN Server)とWireGuardのクライアント側(VPN Client Home)のiptablesの設定方法について解説しました。
最適なiptablesの設定になっていないかもしれませんが、現状、動作確認ができているため、この状態で利用しています。
また、sshで接続するためにopenssh-server
を立てている人は、同様の方法でiptablesを更新することにより、WireGuard経由で自宅ネットワーク内のサーバにアクセスできます。
必要に応じて設定してみてください。スマホからはsshすることはないと思いますが、laptop等を使う場合は欲しくなる可能性が高いです。
【追記】トラブル事例をまとめました。
【トラブル事例】VPS+VPN(WireGuard)で接続できない時の解決方法
続きを見る