1つのインターフェースでのrp_filterの無効化


9

複数の(VLAN)インターフェイスを持つルーターとして機能しているUbuntu 16.04サーバーがあります。デフォルトでは、rp_filter(リバースパスフィルタリング)はすべてのインターフェイスで有効になっています。その方法を維持したいのですが、1つのインターフェイスだけを例外にしています。(このインターフェースからのパケットは、このインターフェースのルーティング宛先アドレスに対応しない送信元IPアドレスを持つことが許可されている必要があります。)

このインターフェイスの名前がでens20.4、そのvlan-raw-deviceがens20であり、宛先インターフェース(パケットフローのテスト用)に名前が付けられているとしますens20.2(ただし、どの宛先インターフェースでも機能するはずです)。

私は成功せずrp_filterens20.4のみプロパティを設定しようとしました:

echo 0 > /proc/sys/net/ipv4/conf/ens20.4/rp_filter

したがって、テストの目的でrp_filter、vlan-raw-deviceおよびテストの宛先インターフェイスについても無効にしました。

echo 0 > /proc/sys/net/ipv4/conf/ens20/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/ens20.2/rp_filter

それでも成功しない場合、「スプーフィングされた」送信元IPアドレスを持つパケットは引き続きドロップされます。すべてのインターフェースを無効にrp_filterした場合のみ、パケットは通過します:

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

ただし、他のすべてのインターフェイスのリバースパスフィルタリングを維持したいのですが、何が欠けていますか?


さらにいくつかのテストでは、rp_filterがすべてまたは受信インターフェイスのいずれかに対して1に設定されている場合、リバースパスフィルタリングがアクティブであることが明らかになりました。それでも、これまで見つけられなかった決定的な回答またはドキュメントのリファレンスを探しています。
Cybran 2016年

回答:


12

そこの情報:https : //git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/tree/Documentation/networking/ip-sysctl.txt?h=v4.9#n1090

あなたの試みを説明する最後の文に注意してください:

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をチェックすることもできます。パケットが通常、他のインターフェイスによってルーティングされる必要がある場合は、検証しないよりはましです。


2
ありがとう、それはそれを非常によく説明しています!「ルーズ」なrpfの提案に特に感謝します。これは、実際には私のセットアップにとってより良い選択です。また、all / rp_filterを0に設定する必要がなくなります。これは大歓迎です。
Cybran 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.