CentOS7 で policy routing する (複数のデフォルトゲートウェイを設定する)
コンテンツ
表題でハマったのでメモ.今回はインターフェイス毎にデフォルトゲートウェイを設定して対称ルーティング(入出力インターフェイスが同じ)することが目的だった.
結論
CentOS7 で policy routing (例えば,今回のように送信元IPアドレスによってルーティングを変える) を行う場合, NetworkManager-config-routing-rules
をインストールして /etc/sysconfig/network-scripts
に route-<interface-name>
, rule-<interface-name>
という2つのファイルを作成する. route-<interface-name>
にはインターフェイス毎のルーティングルールを記述する. rule-<interface-name>
にはルーティングルールの適用条件を記述する.
インターフェイス毎にデフォルトルートを設定する
サーバが2つのインターフェイス(eth0
, eth1
) をもっており,それぞれ次のIPアドレスをもっていたとする.
Interface | IP address |
---|---|
eth0 | 192.168.0.2/4 |
eth1 | 192.168.1.2/24 |
このとき,ルータでソースアドレスフィルタリングを設定している場合,このサーバからの返信パケットは破棄される可能性がある.通常デフォルトルートは一つしか設定できない.よって eth0
で受信したパケットも eth1
で受信したパケットも,返信パケットはデフォルトルートを設定したインターフェイス,例えば, eth0
から発信される.このとき,送信元アドレスが 192.168.1.2
であるパケットが 192.168.0.0/24
のサブネットに流れ,ルータのソースアドレスフィルタリングにて破棄される.
そこで, 受信したインターフェイスから返信パケットが発信されるようにソースアドレスに基づくルーティングを設定する.
一時的な設定
次のコマンドで一時的な設定ができる.まず,ルーティングテーブルを設定する.
|
|
次にルーティングテーブルの適用条件を設定する.ここではパケットの送信元アドレスが 192.168.0.2
の場合 table 100
を, 192.168.1.2
の場合 table 101
を適用するように設定している.
|
|
なお,設定内容は ip rule show
, ip route show table 100
, ip route show table 101
で確認できる.
永続的な設定
上の設定は再起動後に消えてしまう.再起動後も有効にするには /etc/sysconfig/network-scripts
に route-<interface-name>
, rule-<interface-name>
に次のように先の設定を記述する.
|
|
また, NetworkManager-config-routing-rules
をインストールする.このパッケージは Minimal Install には含まれない.このパッケージは Minimal Install には含まれない(重要なことなので2回書いた).なお,上のパッケージなしで,次のコマンドを実行すると問題なくルーティングテーブルが作成されるという罠.
|
|
sudo journalctl -u NetworkManager -p 4
して次のようなメッセージを発見してパッケージが必要であることに気がついた.
|
|
作成者 Toru Mano
最終更新時刻 2023-01-01 (c70d5a1)