私は常に携帯電話からホームサーバーを介してトラフィックをルーティングし、モバイルトラフィックをフィルタリングできるように自宅にRaspberryPi、PiHole、およびWireguard VPNサーバーを設定しました。出力にVPN(具体的にはNordVPN)を入れたいのですが、NordVPN接続を開始したため、電話は内部ネットワーク(Sshクライアント経由)またはインターネットにアクセスできません。
以下はVPNが有効になっているルーティングテーブルです(wg0は私の携帯電話とラズベリーパイの間のワイヤガードインターフェイスであり、tun0はラズベリーパイからNordVPNへのVPNです。*** ipはサーバーに接続したい特定のIPです)。
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.8.0.1 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.1.1 0.0.0.0 UG 202 0 0 eth0
10.6.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wg0
10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
***.***.***.*** 192.168.1.1 255.255.255.255 UGH 0 0 0 eth0
128.0.0.0 10.8.0.1 128.0.0.0 UG 0 0 0 tun0
192.168.1.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
自分の電話から内部ネットワークにSSHを接続し、NordVPNを介してインターネットにトンネリングするにはどうすればよいですか?
その点をはっきりと明らかにしたことを願っています。本当にありがとうございました!
答え1
最初の問題は、OpenVPNクライアントが設定したデフォルトパスがハンドシェイク応答をtun0インターフェイスにルーティングすることです。
この問題を解決するには:
#adds the default route to respond via the eth0
ip route add default via 192.168.1.1 dev eth0 table 1
#adds the default route to the local network
ip route add 192.168.1.0/24 dev eth0 table 1
#adds the response route
ip route add 10.6.0.0/24 dev wg0 table 1
#adds the policy so that all the traffic that comes through eth0 goes back by eth0
ip rule add from 192.168.1.0/24 table 1
すべての着信はeth0
そのルールによってブロックされ、表1の内容を使用してルーティングされます。これは、すべてのトラフィックを同じインターフェイスに再ルーティングする3つのルールです。
これで正常にハンドシェイクを完了し、ローカルネットワークにアクセスできますが、まだインターネットにアクセスできません。これが2番目の問題です。デフォルトでは、wireguardクライアント(または少なくともpiVPNがインストールされている設定)は、wireguardサブネットからインターフェイスへのNATトラフィックにiptables natルールを設定しますeth0
。ただし、新しいルーティングテーブルを使用すると、トラフィックがインターフェイスに直接移動するため、トラフィックは記録tun0
されず、10.6.0.2
元のIP(またはその他)に送信されます。したがって、別のiptables natルールを追加する必要があります。
iptables -t nat -A POSTROUTING -o tun0 -s 10.6.0.0/24 -j MASQUERADE
これが他の誰かに役立つことを願っています。週末を通してそれを調べるのにかかりました。私は最初から始めなければなりませんでした!