複数の(VLAN)インターフェイスを持つルーターとして機能しているUbuntu 16.04サーバーがあります。デフォルトでは、rp_filter
(リバースパスフィルタリング)がすべてのインターフェイスで有効になっています。その方法を維持したいのですが、1つのインターフェイスだけを例外にしています。 (このインターフェースからのパケットは、このインターフェースのルーティング宛先アドレスに対応しない送信元IPアドレスを持つことが許可されている必要があります。)
このインターフェースの名前がens20.4
で、vlan-raw-deviceがens20
であり、宛先インターフェース(パケットフローのテスト用)がens20.2
であるとします(ただし、任意の宛先インターフェース)。
rp_filter
プロパティのみをens20.4
のみに設定しようとしましたが、成功しませんでした。
echo 0 > /proc/sys/net/ipv4/conf/ens20.4/rp_filter
したがって、テストの目的で、vlan-raw-deviceとテストの宛先インターフェイスのrp_filter
も無効にしました。
echo 0 > /proc/sys/net/ipv4/conf/ens20/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/ens20.2/rp_filter
それでも成功しない場合、「スプーフィングされた」送信元IPアドレスを持つパケットは引き続きドロップされます。 allインターフェイスでrp_filter
を無効にした場合のみ、パケットは通過します。
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
ただし、他のすべてのインターフェイスのリバースパスフィルタリングを維持したいのですが、何が欠けていますか?
あなたの試みを説明する最後の文に注意してください:
Conf/{all、interface}/rp_filterの最大値は、{interface}でソース検証を行うときに使用されます。
だからこれはうまくいくはずです:
for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > "$i"
done
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/ens20.4/rp_filter
ここで、max(conf/{all、ens20.4}/rp_filter == 0:ソースの検証なし。他のインターフェースが保護されていることを再確認してください。
また、値が2の「ルーズ」なrpfをチェックすることもできます。パケットが通常、他のインターフェイスによってルーティングされる必要がある場合は、検証しないよりも良いでしょう。