2007年7月11日水曜日

LSRR の受信

ちょっと情けないが、ちょっと jot。興味があちこちしてしまいデジャヴばかりの様な気がする。
ip_rcv()
NF_IP_PREROUTING
ip_rcv_finish()
ip_rcv_options() ヘッダ長 20バイト超ならばオプションあり
ip_rcv_options_compile() sk_buff 内 cb に設定
ip_opeions_rcv_srr()
ip_route_input()
ip_route_input()
dst_input()

ip_forward()
NF_IP_FORWARD
ip_forward_finish()
ip_forward_options()
dst_output()
ip_output()
ip_fragment()

skb->pkt_type は eth_type_trans() にて設定
rt->rt_type の設定は....
ip_route_input()
ip_route_input_slow()
ip_mkroute_input()
(ip_mkroute_input_def())
__mkroute_input()
rt_set_nexthop()
output側も同じ感じ。
ip_local_deliver() は ip_route_input_slow() にて rth->u.dst.input に

ip_local_deliver()
NF_IP_LOCAL_IN
ip_local_deliver_finish()

先日の見難い図を簡単にすると
hostA ---- host B ---- host C
にて
  1. host B から host A , hostB を通って hostC
  2. hostC から hostB, hostA 再度 hostB に戻って hostC
といった lsrr を投げと、1.の場合は hostB。2.の場合は hostC の PREROUTING で -j LOG は取れるものの INPUT にはログが残らず、もちろん到達せず。両方の場合で IP上は src dst 共に自アドレスとなっている。/proc の accept_source_route を 1。rp_filter を 0。netfilter の全ての hook のポリシを ACCEPT としたが、通さず。2. にて hostB を通過している点、1. 2. にて PREROUTING に LOG が残っているので、ip_rcv_finish() あたりなのか...調べること。

0 件のコメント: