web-dev-qa-db-ja.com

iptablesnatを使用してLANPCのゲートウェイをリダイレクトします

ホームネットワークのゲートウェイとして機能するLinuxサーバーがあります。 2つのイーサネットデバイスがあります。

  • p3p1:WAN、パブリックIPアドレスa.b.c.d
  • p2p1:LAN、プライベートIPアドレス10.0.3.1/24

また、ポイントツーポイントOpenVPNトンネルを介してリモートLinuxサーバー(私も管理しています)に接続します。これにより、デバイスが追加されます

  • tun2:VPN、プライベートIPアドレス10.2.0.2/32

質問は次のとおりです。LAN上のクライアントからのすべてのトラフィックをOpenVPNトンネル経由でリダイレクトするにはどうすればよいですか?

VPNクライアント構成オプションredirect-gateway def1を使用して、すべてのトラフィック(ゲートウェイサーバーから発信されたトラフィックを含む)をリダイレクトできます。しかし、それは私が望んでいることではありません。

IPTables NATを使用してこれを行う方法はありますか?

ありがとう!

3
Fela Maslen

A. Fendtがコメントで述べたように、私はポリシーベースのIPルーティングを使用してこれを行うことができました。

  1. 新しいIPルーティングテーブルを挿入します。

$ echo "200 vpndef1" | Sudo tee -a /etc/iproute2/rt_tables

  1. VPNリダイレクトのルートを追加します。

$ Sudo ip route add 10.0.3.0/24 via 10.0.3.1 dev p2p1 table vpndef1 $ Sudo ip route add default via 10.2.0.1 dev tun2 table vpndef1

  1. LANトラフィックを新しいルーティングテーブルに転送するための新しいルールを挿入します。

$ Sudo ip rule add from 10.0.3.0/24 lookup vpndef1

1
Fela Maslen

実行する必要のある手順は次のとおりです。

  1. 最初のステップでは、ローカルDHCPサーバーがクライアントのデフォルトゲートウェイをサーバーアドレス10.0.3.1に構成する必要があります。
  2. 次に、 ルーティングポリシーデータベース を使用して、ローカルネットワークトラフィックをp2p1の背後にあるVPNデフォルトゲートウェイにルーティングし、サーバートラフィックをp3p1の背後にあるデフォルトゲートウェイにルーティングします。
  3. その後、ローカルネットワークからVPNに入るトラフィックをMASQUERADEする必要があります。
# enable ip forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

# configure iptables
iptables -t nat -A POSTROUTING -s 10.0.3.0/24 -d 10.2.0.2/32 -j MASQUERADE
iptables -P FORWARD DROP
iptables -A FORWARD -i p2p1 -o tun2 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
1
A. Fendt