だから私はホストに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
(私はここで他の投稿を読みましたが、どれも本当に役に立ちませんでした)
最初に、ルーターがトンネルを使用しない場合、「ハーフデフォルト」ルート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
どのインターフェイスがどれであるかを明確に述べていないので、私は仮定します:
eth0
(WAN側)tun0
(VPNトンネル)です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