Linux の複数の NIC: 確立されたルートを返す方法は?

Linux の複数の NIC: 確立されたルートを返す方法は?

2 つの異なるネットワーク (プライマリ ネットワークと帯域外管理ネットワーク、それぞれ「プライマリ」と「mgmt」と呼びます) 上に 2 つのインターフェイスを持つ Linux ホストがある場合、戻りのトラフィックを、送信元と同じインターフェイスを経由してルーティングするにはどうすればよいでしょうか。

言い換えると、私が座っている場所から、ルーターを経由してマシンのプライマリまたは管理インターフェイスにアクセスします。プライマリインターフェイスに ssh すると、問題はありません。管理インターフェイスに ssh すると、パケットはサーバーに到着しますが、サーバーはプライマリインターフェイスにあるデフォルトゲートウェイを介して応答を返します。したがって、接続は確立されません。管理ネットワークで受信された着信要求に、管理ネットワーク経由でサーバーが応答するようにするにはどうすればよいですか?

答え1

答えのほとんどはここに見つかりました:https://unix.stackexchange.com/questions/4420/reply-on-same-interface-as-incoming

詳細はこちら:ルーティングテーブル

また、必要な部分のほとんどを含んだ回答を提供してくれた Tom Yan にも感謝します。しかし、他の回答はどれも完全ではなく、完全に正確でもなく、理解しやすいものでもないため、この回答を投稿します。

Centos 7 では、次の手順でうまくいきます。NetworkManager ではうまくいきませんでした。NetworkManager は/etc/sysconfig/network-scripts/rule-*と を読み取れないためですroute-*。また、これらの変更を永続化するための同等のコマンドも見つかりませんでしたnmcli。そのようなコマンドをお持ちの方がいらっしゃいましたら、ぜひ共有してください。したがって、最初に必要な手順は、NetworkManager を無効にすることです。

systemctl disable NetworkManager
systemctl enable network
systemctl stop NetworkManager
systemctl start network

Linux カーネル 2.2 および 2.4 は、それぞれ 0 から 255 の番号が付けられた複数のルーティング テーブルをサポートしています。通常使用される 2 つのルーティング テーブルは、local(ルーティング テーブル 255) とmain(ルーティング テーブル 254) です。これらは にリストされています。未使用の番号 ( を参照) を選択して に追加する/etc/iproute2/rt_tablesことで、新しいルーティング テーブルを作成できます。/etc/iproute2/rt_tables/etc/iproute2/rt_tables

私の場合、「プライマリ」インターフェースはeth0、ゲートウェイ 192.168.20.1 を持つ 192.168.20.20 であり、「mgmt」インターフェースはeth1、ゲートウェイ 192.168.5.1 を持つ 192.168.5.5 です。

新しいルーティング テーブル番号 200 と新しいルーティング テーブル名を選択しますmgmt

echo "200 mgmt" >> /etc/iproute2/rt_tables

次に、管理インターフェイスで受信したトラフィックに新しいルーティング テーブルを使用するルールを作成する必要があります。インターネット上の他のリソースでは、1 つのインターフェイスに対してのみこれを行う必要があると記載されていますが、次の理由により、実際には両方のインターフェイスに対して行う必要があります。1 つのインターフェイスのみを起動した場合、そのインターフェイスは ping に応答できますが、両方のインターフェイスを起動した場合、最初に起動したインターフェイスは ping に応答し、2 番目は応答しません。つまり、mgmt最初にインターフェイスを起動し、次にプライマリ インターフェイスを起動した場合、プライマリは応答しません。したがって、両方のインターフェイスでルールを定義することをお勧めします。

これは次のように 1 回限り (非永続的) に実行できます。

ip rule add from 192.168.20.20 table main
ip route add default via 192.168.20.1 dev eth0 table main

ip rule add from 192.168.5.5 table mgmt
ip route add default via 192.168.5.1 dev eth1 table mgmt

この時点で、両方のインターフェースが応答するはずです。ここで、これを永続化するには、 を読み込むと、/etc/sysconfig/network-scripts/ifup-routesすべてのrule-*およびroute-*ファイルが解析され、各行がip rule addまたはip route addに引数として渡されることに注意してください。そのため、次のように 4 つの新しいファイルを作成します。

echo "from 192.168.20.20 table main" > /etc/sysconfig/network-scripts/rule-eth0
echo "default via 192.168.20.1 dev eth0 table main" > /etc/sysconfig/network-scripts/route-eth0

echo "from 192.168.5.5 table mgmt" > /etc/sysconfig/network-scripts/rule-eth1
echo "default via 192.168.5.1 dev eth1 table mgmt" > /etc/sysconfig/network-scripts/route-eth1

再起動後、両方のインターフェースがデフォルトで動作することがわかります。

答え2

ソースベースルーティング / ip rule.

がおよび をprimary持ち(それぞれのデフォルト ゲートウェイは および)ているとします。1.2.3.4mgmt2.3.4.51.2.3.12.3.4.1

ip rule add from 1.2.3.4 table 234
ip route add default via 1.2.3.1 dev primary table 234

(上記はオプションです)

ip rule add from 2.3.4.5 table 345
ip route add default via 2.3.4.1 dev mgmt table 345

関連情報