ひよっこエンジニアの備忘録

日常とかSEとしての備忘を書いていきます。

uRPF(Unicast Reverse Path Fowarding)

[uRPFとは]
受信したパケットの送信元IPアドレスとルーティングテーブルの情報を基に、
パケットをフィルタリングする機能。
送信元IPアドレスがルーティングテーブルに存在しているかを確認し、
存在する場合はパケット転送を行い、存在しない場合は破棄する。

[uRPFモード]
uRPFには以下3つのモードがある。
・Loose Mode
→受信したパケットの送信元IPアドレスがルーティングテーブルに存在するか確認し、
 存在する場合はパケットを転送、存在しない場合はパケットを破棄する。
・Strict Mode
→受信したパケットの送信元IPアドレスと受信したインターフェースの組み合わせが
 ルーティングテーブルに存在するか確認し、存在する場合はパケットを転送
 存在しない場合はパケットを破棄する。
・VRF Mode
→受信したパケットに対応するVRFインスタンスごとにLoose Modeと同様の処理を行う。
 (前提として機器がVRFに対応している必要あり。)

[処理順序]
uRPFと ACLを適用している場合は以下の順で処理される。
1. インバウンドACLの処理
2. uRPFの処理
3. ルーティング処理
4. アウトバウンドACLの処理

[uRPF設定]
(config-if)#ip verify unicast source reachable-via { any | rx } [ allow-default ] [ allow-self-ping ] [ ACL番号 ]

▼パラメータ詳細
・{ any | rx }
 →uRPFモードの指定
  ・any:Loose Mode
  ・rx:Strict Mode
・allow-default
 →受信したパケットの送信元アドレスの確認にデフォルトルートを含める。
・allow-self-ping
 →ルータ自身からのpingを許可する。
  ※uRPFが有効なインターフェースは、
   デフォルトで自身のアドレスへのpingを破棄する。
ACL番号
 →uRPFによるチェックで破棄対象となったパケットを
  再チェックするためのACL番号を指定。
  ACLで許可されたパケットはuRPFで破棄対象となっても許可される。

正直文章だけ読んでもよくわからなかったのでGNS3でラボを作ってみた。
▼ラボ構成
f:id:nrlay00:20180326004839p:plain

これで1.1.1.1のPCから10.0.0.254までのPingを打ってみた結果、
想定通り疎通NG。
一応uRPFの設定外して疎通OKになるか試してみたら、、
疎通NGとなった。
よく考えたら1.1.1.0/24向けの戻りルートがないので
Ping通るはずがないですね…
不正なUDP通信をブロックするための機能なのか??と
推測しつつも、ラボ設定の正当性に若干疑問が残る状態で終了。

uRPFの設定入れるくらいなら素直にACL入れたほうが
分かりやすい気がするがどうなんだろう…