web-dev-qa-db-ja.com

Linuxで2つのデフォルトルートを設定する方法

TL; DR

Linuxで2つのデフォルトルートを設定する方法(2つのインターフェースに対応)、両方のインターフェースからの着信トラフィックが受け入れられるようにします。

シナリオ

2つのNIC eth0eth1を持つホストがあります。 2つのネットワークに接続されている、たとえば:

  • 開発:eth0、IP:1.1.1.4、ネットマスク:255.255.255.0、ゲートウェイ:1.1.1.1

  • 開発:eth1、IP:2.2.2.4、ネットマスク:255.255.255.0、ゲートウェイ:2.2.2.1

(どちらのネットワークもインターネットに接続されています。)

ルートは(ip route show)です。

default via 1.1.1.1 dev eth0 metric 1
default via 2.2.2.1 dev eth1 metric 2
1.1.1.0/24 dev eth0 src 1.1.1.4
2.2.2.0/24 dev eth1 src 2.2.2.4

(メトリックが低いほど優先度が高くなります。)


これで、誰かが外部ホストから2.2.2.4にpingした場合(4.4.4.4など)、応答がありません。

私のホストでのtcpdump -i eth1の出力は次のとおりです。

22:41:27.431539 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 4, length 64
22:41:28.439492 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 5, length 64
22:41:29.447666 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 6, length 64
22:41:30.455528 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 7, length 64

調査の結果、Linuxネットワークスタックが4.4.4.4からパケットを受信すると、ルーティングテーブルをチェックして、4.4.4.4eth0 inルーティングテーブル)。さて、パケットはeth1インターフェースから来たので、linuxは単にそれを破棄します(このポリシーはおそらくIPスプーフィングを防ぐためです)。


私が欲しいのは:

  • 発信トラフィック(ローカル発信)は、デフォルトでeth0インターフェースを使用する必要があります。

  • 着信トラフィックは、両方のインターフェイスから受け入れられる必要があります。 (つまり、4.4.4.41.1.1.42.2.2.4の両方にpingできるはずです)

6
Tanmay

Iproute2を使用すると、次のようなことができます。

echo "1 admin" >> /etc/iproute2/rt_tables
echo "2 users" >> /etc/iproute2/rt_tables

ip rule add from 192.168.122.40/32 dev eth0 table admin
ip rule add from 192.168.123.41/32 dev eth1 table users

ip route add default via 192.168.122.1 dev eth0 table admin
ip route add default via 192.168.123.1 dev eth1 table users

これで、2つのゲートウェイを持つ2つのルーティングテーブルが作成されます。

8
c4f4t0r

この現象は、Linuxでは標準ですがリバースパスフィルターとしてユニキャストrpf(リバースパス転送)と呼ばれます。重要な悪影響なしにこれを無効にすることができます(isp ..とルーターでない限り)。

echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter

その後、あなたの例はあなたが望むように機能するはずです。

3
Jonas Bjork

アプリケーションが0.0.0.0にバインドする場合は、次のようなルールも追加する必要があります。

ip rule add from 0.0.0.0/32 to 192.168.122.0/24 dev eth0 table admin

ip rule add from 0.0.0.0/32 to 192.168.123.0/24 dev eth1 table users

1
hargut