CentOS 7ポリシーベースの永続ルーティングルールを作成するには?

CentOS 7ポリシーベースの永続ルーティングルールを作成するには?

私の「CentOS 7 Minimal」コンピュータには2つのネットワークインターフェイスがあります。要求がインターフェイスに入ると、同じインターフェイスから応答が送信されるようにポリシーベースのルーティングを設定する必要があります。 iproute2を使用して非持続的な方法でこれを行うことはそれほど難しくありません。

echo '200 isp2' >> /etc/iproute2/rt_tables
ip route add default via 1.1.1.1 table isp2
ip rule add from 192.168.1.50 table isp2

そのうち、1.1.1.1が私のルーターであり、192.168.1.50が私のLinuxのIPです。問題はこれを続けておくことです。

私が知る限り、iproute2永続ファイルはありません。永続性を維持する方法は、そのファイルをネットワーク起動スクリプトに追加することです。

通常、RedHatはパスを追加するために/etc/sysconfig/network-scripts/route-ethXファイルを作成することをお勧めしますが、これはセカンダリルーティングテーブルにパスを追加しないようです。

解決策は、上記の「iproute」行と「iprule」行を/etc/sysconfig/networkに追加するようです。 1つを除いて、ほとんど動作します。つまり、ネットワークが再起動されるたびに、一度に何十もの重複した「ipルール」ルールが追加され続けます。

"systemctl restart network"を使用してネットワークを2〜3回再起動した後、私のip rule出力は次のようになります。

0: from all lookup local
32670: from 192.168.1.50 lookup isp2
32671: from 192.168.1.50 lookup isp2
...
32764: from 192.168.1.50 lookup isp2
32765: from 192.168.1.50 lookup isp2
32766: from all lookup main
32767: from all lookup default

CentOS 7に継続的なポリシーベースのルーティングルールを追加する正しい方法は何ですか?

PS。予想通り、ip route list table isp2コマンドは単一の項目を表示するため、これは問題ではありません。

編集:RedHat 7のマニュアルによると:

Red Hat Enterprise Linuxでは、グローバル/etc/sysconfig/networkファイルは廃止されました。

これはインターフェイス固有のプロファイルに適しており、他のルーティングテーブルにパスを追加できず、ルールを追加できないようですip rule

答え1

NetworkManager-config-routing-rulesをインストールしてNetworkManager-dispatcherを有効にすると、問題が解決したようです。

$ sudo yum install NetworkManager-config-routing-rules
$ sudo systemctl enable NetworkManager-dispatcher.service
$ sudo systemctl start NetworkManager-dispatcher.service

これで/etc/sysconfig/network-scripts/route-ethXに入れることができます:

default via 1.1.1.1 table isp2

これは私の/etc/sysconfig/network/scripts/rule-ethXにあります:

from 192.168.1.50 table isp2

そして私の/etc/iproute2/rt_tablesにあるisp2の定義は次のとおりです。

200 isp2

ネットワークサービスを再起動しても、重複エントリは生成されません。

答え2

/etc/sysconfig/network-scripts/ifup-routes行から読み取るものがroute-(interface)そのまま構文解析されることを考慮すると、ip route add特定のテーブルにパスを追加するには、table XXXその行に追加するだけです。ただし、rt_tablesパスを正常に追加するには、名前の代わりにテーブル番号を使用する必要があります。

rule-(interface)ルールを使用すると、ファイルとファイルの実際の現在のバージョンを使用し、ifup-routesファイルifdown-routesルーティングのように処理できます。これはスクリプトセットに該当しない可能性があるため、実行を確認してくださいgrep rule /etc/sysconfig/network-scripts/ifup-routes

主な問題は、実際には/etc/sysconfig/network各 ifup スクリプトと ifdown スクリプトのソースが原因で発生するため、ファイル内の各コマンドは各インターフェイスのアップ/ダウンごとに 1 回実行されます。これにより、loネットワークが再起動されるたびに、システムは2 *インターフェイス(含む)IPルールを追加します。

PS:CentOS Network Managerをアンインストールしてifup / ifdownスクリプトを使用してすべての操作を実行し、この回答を公開する前にすべてのスクリプトをテストしました。

答え3

ネットワークサービスを再起動しても、重複エントリは生成されません。

残念ながらそうではありません。変更せずにネットワークサービスを再起動しても既存のルールを編集する場合は、次のように変更します。

from 10.1.2.0/23 table 300

これに関して:

from 10.1.2.0/24 table 300

次に、ネットワークサービスを再起動し、何が起こるかを確認します。

ip rule list table 300
32763:  from 10.1.2.0/23 lookup 300
32764:  from 10.1.2.0/24 lookup 300

32763: 10.1.2.0/23 で、照会 300 などの冗長ルールを削除する必要があります。

追加:「rule-ifname」ファイル内のすべてのルールをコメントアウトまたは完全に削除してネットワークサービスを再起動すると、以前のルールはすべてそのまま残ります。

いいえ、これは解決策ではありません。

関連情報