CentOS 7 の rp_filter でハマった件
コンテンツ
CentOS 7 のネットワーク設定でハマった話.
例えば,インターフェイスを2つもち,次のようにそれぞれ別のサブネットに接続していたとする.
Interface | IP address |
---|---|
eth0 | 192.168.0.2/4 |
eth1 | 192.168.1.2/24 |
CentOS7の標準設定の場合このマシンに外部,例えば 192.168.2.3/24
, から ping
をうつとどちらか片方にしか届かない.
なぜか.CentOS7は標準設定では入力インターフェイスと出力インターフェイスが異なるトラフィックを破棄するように設定してあるから.上のような場合,デフォルトルートが設定してあり, ping
の入力インターフェイスは ping
の宛先により変化するが, ping
の返信(ICMP echo reply) は必ずデフォルトルートのインターフェイスから発信され, ping
の宛先に依存しない.よって,入力インターフェイスと出力インターフェイスが異なる非対称ルーティングとなる.
上のようなパケットを一時的に許可するには次のコマンドを実行する.
|
|
永続的に許可するには /etc/sysctl.conf
に次を追加する.なお,上のリンクの記述と違い CentOS7 では net.ipv4.conf.default.rp_filter
ではなく net.ipv4.conf.all.rp_filter
と設定する必要がある模様.
|
|
もしくはインターフェイス毎に列挙する.
|
|
ちなみに,なぜこのような設定になっているのかというと,通常は2つ以上インターフェイスがある場合は一つが WAN 用で,残りが LAN 用となっていることが多い.このような場合,このマシン宛にWANから来たトラフィックはWAN用インターフェイスから出力され,このマシン宛にLANから来たトラフィックはLAN用インターフェイスから出力される.そして,WANから来てLANインターフェイスから出力されるようなトラフィックは攻撃の可能性が高いので破棄するような設定になっているというわけだ.
また,次のようにポリシベースルーティングにより対称ルーティングを達成する方法もある.
作成者 Toru Mano
最終更新時刻 2023-01-01 (c70d5a1)