Ubuntu 26.04 で複数 NIC や Policy Based Routing を使う場合、経路設計だけでなく rp_filter も確認する必要があります。rp_filter は Reverse Path Filtering の設定で、受信したパケットの送信元へ戻る経路が妥当かどうかを Linux kernel が確認する仕組みです。
単一 NIC のサーバーでは意識しなくても問題になりにくい設定ですが、複数 NIC、複数 VLAN、PBR、非対称経路を使う環境では、正しい通信まで落としてしまうことがあります。この記事では、Ubuntu 26.04 Server で rp_filter を確認し、どのような場面で調整が必要になるのかを整理します。
rp_filter とは何か
rp_filter は、Reverse Path Filtering を制御する Linux kernel の設定です。受信したパケットについて、送信元アドレスへ戻る経路を kernel が確認し、その経路が受信 interface と整合しない場合にパケットを破棄することがあります。
これは、送信元アドレスを偽装したパケットを抑制するためには有効です。一方で、複数 NIC や PBR のように、行きと戻りの経路が単純ではない構成では、正常な通信まで不正な経路に見えることがあります。
| 観点 | 内容 |
|---|---|
| 目的 | 送信元アドレスの妥当性を経路から確認する |
| 利点 | 明らかに不自然な送信元を持つ通信を落としやすい |
| 注意点 | 複数 NIC や非対称経路で正常通信を落とすことがある |
| 確認対象 | net.ipv4.conf.*.rp_filter |
複数 NIC と PBR で問題になる理由
複数 NIC のサーバーでは、受信した interface と、送信元へ戻る時に使う interface が一致しないことがあります。たとえば、管理用 NIC とサービス用 NIC を分けている環境で、main table の default route が管理用 NIC 側にある場合、サービス用 NIC で受けた通信の戻り経路が管理用 NIC 側に見えることがあります。
PBR を使えば送信元ごとに routing table を分けられますが、rp_filter の設定が厳しすぎると、PBR で意図した通信を kernel が先に落としてしまうことがあります。つまり、PBR の設計と rp_filter の設計は分けて考えられません。
- 複数 NIC で管理用とサービス用を分けている
- VLAN ごとに gateway が異なる
- 送信元 IP ごとに PBR で出口を分けている
- Firewall や NAT の前後で戻り経路が非対称になる
- 閉域網、管理網、公開網を 1 台のサーバーで扱っている
このような構成では、通信が通らない時に Firewall だけを見るのではなく、rp_filter も確認する必要があります。
現在の設定を確認する
まず、現在の rp_filter、IP アドレス、route、rule を確認します。Ubuntu の既定値は環境や構成によって変わる可能性があるため、前提として実機の値を確認します。
sysctl net.ipv4.conf.all.rp_filter
sysctl net.ipv4.conf.default.rp_filter
sysctl -a | grep '\.rp_filter'
ip address
ip route
ip ruleall、default、各 interface の値を分けて確認します。all は全体の挙動に関係し、default は新しく作成される interface の初期値に関係します。実際の interface ごとの値も必ず確認します。
sysctl net.ipv4.conf.enp1s0.rp_filter
sysctl net.ipv4.conf.enp2s0.rp_filter
ip route get 10.0.20.10
ip route get 10.0.20.10 from 10.0.20.20rp_filter の値を理解する
rp_filter の値は、一般的に次のように理解します。
| 値 | 意味 | 考え方 |
|---|---|---|
0 | 無効 | Reverse Path Filtering を行わない |
1 | strict mode | 送信元へ戻る最適経路が受信 interface と一致することを求める |
2 | loose mode | 送信元へ何らかの経路があれば許容する |
単一 NIC で経路が単純なサーバーでは、strict mode が問題になりにくい場合があります。一方、複数 NIC や PBR を使うサーバーでは、strict mode が正常な通信を落とす原因になることがあります。そのため、複数 NIC のサーバーでは loose mode や無効化を検討する場面があります。
ただし、何も考えずに無効化すればよいわけではありません。rp_filter は送信元アドレス偽装への対策にも関係します。どの interface でどの通信を受けるのか、Firewall や ACL でどこまで制御しているのかを合わせて判断します。
sysctl で設定する
複数 NIC や PBR のサーバーで loose mode にする例です。ここでは all、default、対象 interface を明示します。
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.enp1s0.rp_filter = 2
net.ipv4.conf.enp2s0.rp_filter = 2sudo tee /etc/sysctl.d/99-rp-filter.conf >/dev/null <<'EOF'
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.enp1s0.rp_filter = 2
net.ipv4.conf.enp2s0.rp_filter = 2
EOF
sudo sysctl --systeminterface 名は環境に合わせます。複数 VLAN や bridge、bonding を使う環境では、実際に通信を受ける interface の rp_filter を確認します。
通信と経路を確認する
設定後は、rp_filter の値だけでなく、送信元ごとの route、rule、実際の通信を確認します。
sysctl -a | grep '\.rp_filter'
ip rule
ip route show table main
ip route show table 100
ip route show table 200
ip route get 8.8.8.8 from 10.0.20.20
ss -lntup通信が落ちる場合は、tcpdump で受信 interface と送信 interface を分けて確認します。パケットが入ってきているのにアプリケーションへ届かない、または応答が出ない場合は、Firewall、PBR、rp_filter のどこで落ちているのかを切り分けます。
sudo tcpdump -ni enp1s0 host 10.0.20.10
sudo tcpdump -ni enp2s0 host 10.0.20.10
journalctl -k -n 100 --no-pager設計としてどう扱うか
rp_filter は、単に有効か無効かで決めるものではありません。ネットワーク設計として、どの interface で受け、どの経路で戻すのかを決めた上で、その設計に合う値を選ぶものです。
- 単一 NIC で経路が単純なサーバーでは strict mode でも問題になりにくい
- 複数 NIC で戻り経路が分かれる場合は loose mode を検討する
- PBR を使う場合は、
ip ruleとrp_filterを合わせて確認する - 無効化する場合は、Firewall、ACL、経路設計で送信元を制御する
- 設定値だけでなく、実際の packet path を確認する
重要なのは、rp_filter を通信障害時の場当たり的な設定変更として扱わないことです。複数 NIC や PBR を採用するなら、Reverse Path Filtering も同じネットワーク設計の一部として扱う方が安全です。
まとめ
Ubuntu 26.04 で複数 NIC、複数 VLAN、Policy Based Routing を使う場合、rp_filter の確認は重要です。rp_filter は送信元アドレスの妥当性を経路から確認する仕組みですが、非対称経路では正常な通信を落とす原因にもなります。
単純なサーバーでは意識しにくい設定ですが、管理網、公開網、内部網、ストレージ網を分ける構成では、PBR と合わせて設計する必要があります。通信が通らない時は、Firewall や route だけでなく、Reverse Path Filtering も確認対象に含めます。
- Ubuntu 26.04 Multiple NIC basic – 経路と役割を分けて考える
- Ubuntu 26.04 Policy Based Routing basic – 複数 NIC の出口を分ける
- Ubuntu 26.04 Netplan の基本設定 – IP アドレス / DNS / route を整える
- Ubuntu 26.04 VLAN basic – Netplan で tagged VLAN を扱う
- Ubuntu 26.04 Bonding basic – active-backup と 802.3ad を分けて考える
- Ubuntu 26.04 障害時の切り分け – OS / ネットワーク / サービスを層で見る

