ポリシールーティング(?)


とある事情で、図中のPC Routerを作ることになりました。
やりたいことは、
* LAN AのトラフィックはNetwork Aを通す。
* LAN BのトラフィックはNetwork Bを通す。
* LAN A-LAN B間のトラフィックはInternetを通さずにPC Routerで折り返す。
です。

普通のルーティングではデスティネーションアドレスでルーティングします。
今回はソースアドレスでルーティングしたいので、ipfを使いました。

まず、デフォルトルートは10.0.0.1に向けておき、
ipf.confに以下のような設定をすることで、目的を達成できそうでした。。。

pass in quick on if3 from 172.16.1.0/24 to 10.0.1.0/24
pass in quick on if3 to if1:172.16.0.1 from 172.16.1.0/24 to any

が、実際にやってみると、動かない。。。
tcpdumpしてみると、希望通りにパケットは流れていましたが、Network Bから外に
行くパケットのIPヘッダのパケット長フィールドのバイトオーダーが逆転していました。
最初はNetBSD4.0で試しましたが、-currentにしても同様。てことで、デバッグ。

src/sys/dist/ipf/netinet/ip_fil_netbsd.c の
1257行目辺り、fr_fastroute()中の
ip->ip_len = htons(ip->ip_len);
ip->ip_off = htons(ip->ip_off);
の2行をコメントアウトするとちゃんと通信できるようになりました。



コメント

このブログの人気の投稿

No title

L-05A on BSD その2

パイナップルココナッツジュース