web-dev-qa-db-ja.com

特定のインターフェースからのパケットのみをVPN経由でルーティングする

だから私はホストに3つのインターフェースを持っています:

  • インターフェイス1は外部ネットワークに面しています
  • インターフェイス2はtun0 vpnインターフェイスです
  • インターフェイス3ローカルネットワークインターフェイス

私の目標は、インターフェイス3(ローカルネットワーク)からのすべてのトラフィックをvpnインターフェイス経由でルーティングし、ホストからのすべてのトラフィックをデフォルトインターフェイス1経由でルーティングすることです

# ip route
default via 192.168.1.1 dev eth0
10.8.8.0/24 dev tun0 proto kernel scope link src 10.8.8.27
128.0.0.0/1 via 10.8.8.1 dev tun0
192.168.0.0/24 dev eth2 proto kernel scope link src 192.168.0.1
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.56

(私はここで他の投稿を読みましたが、どれも本当に役に立ちませんでした)

3
bit151

最初に、ルーターがトンネルを使用しない場合、「ハーフデフォルト」ルート128.0.0.0/1(他のハーフ0.0.0.0/1なし??)は存在しないはずです。

# ip route del 128.0.0.0/1 via 10.8.8.1 dev tun0

トンネルソフトウェアから設定されている可能性が高いため、その構成を処理します。

次に、トンネルを通るデフォルトルートで新しいテーブル(ランダムな選択:100)を作成し、eth2からのトラフィックにのみ使用します。

# ip route add default via 10.8.8.1 dev tun0 table 100
# ip rule add iif eth2 lookup 100

テスト:

ホストは、ソースIPが何であれ、通常のデフォルトルートを使用しています(質問のとおり、トンネルのセレクターはIPではなくインターフェイスからのものです)。

# ip -o route get 8.8.8.8
8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.56 \    cache
# ip -o route get 8.8.8.8 from 192.168.0.1
8.8.8.8 from 192.168.0.1 via 192.168.1.1 dev eth0 \    cache 

Eth2からのトラフィックは異なる方法で処理されます。

# ip -o route get 8.8.8.8 from 192.168.0.2 iif eth2
8.8.8.8 from 192.168.0.2 via 10.8.8.1 dev tun0 table 100 \    cache  iif eth2

ローカル192.168.0.1 IPもトンネルを通過する必要がある場合。 192.168.0.1は必要に応じてIPパケットを独自のLANに送信する必要があるため(そしてこの場合はtun0を送信しないため)、少し複雑になります。 LANルートもテーブル100にコピーし、ソースIPに基づいてルールを追加する必要があります(その後、インターフェースに基づいて不要な以前のルールを削除します)。

# ip route add 192.168.0.0/24 dev eth2 table 100
# ip rule add from 192.168.0.0/24 lookup 100
( # ip rule del iif eth2 lookup 100 )

これは今も与える:

# ip -o route get 8.8.8.8 from 192.168.0.1
8.8.8.8 from 192.168.0.1 via 10.8.8.1 dev tun0 table 100 \    cache

ルーティングについては以上です。 NATなしでは、トンネルのもう一方の端は10.8.8.27経由で192.168.0.0/24へのルートを必要とするか、機能しないことに注意してください。これは推奨される選択です。

リモート上のこのルートが設定されておらず、代わりにNATで十分な場合は、次のように構成します。

# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o tun0 -j MASQUERADE
3
A.B

どのインターフェイスがどれであるかを明確に述べていないので、私は仮定します:

  • インターフェース1はeth0(WAN側)
  • インターフェイス2はtun0(VPNトンネル)です
  • インターフェイス3はeth2(LAN)です

まず、ルーティングテーブルの名前とIDを考え、それをルーティングテーブルのエイリアスファイル(通常は/etc/iproute2/rt_tables)に次の形式で追加します。

TABLE_ID   TABLE_NAME

ここで、TABLE_IDは予約されていない正の整数です。 10。

eth2からのすべてのパケットをVPN経由でルーティングするため、トンネルインターフェースを介してこのテーブルにデフォルトルートを追加する必要があります

ip route add default dev tun0 table TABLE_NAME

次に、eth2からのパケットに対してこのテーブルを使用するルールを追加する必要があります

ip rule add iif eth2 table TABLE_NAME
0
Torin