tweet:2020:0327_01
目次
FreeBSDでMultiFIBとNATでpolicy route
とあるところでgre tunnelを使ってsource addressベースの経路制御をしなければならなくなった。
pfでroute-toを使う手もあるにはあったが、制御しくった時にかなり痛い思いをすることがわかっているので、物は試して。
これに関しては、最終的に1本の記事にするつもりなので、ここには簡単なメモ書きだけ。
構成
+---ProxyB---+ Dest ---(Internet)---+------------+---(ISP)---Router---Source +---ProxyC---+
- Router - ProxyB間はGRE Tunnel(gre0)で接続
- Router - ProxyC間はGRE Tunnel(gre1)で接続
- Sourceには、IP Addressが3つ付いている
- Src(A)は直接Destに接続する際に利用する
- Src(B)はProxyB経由でDestに接続する際に利用する
- Routerを出ていく時に、source addressをgre0のlocal側のaddressにNATする
- Src(C)はProxyC経由でDestに接続する際に利用する
- Routerを出ていく時に、source addressをgre1のlocal側のaddressにNATする
- Src(A),Src(B),Src(C)は、同一Segmentに属しているとする
- そうしないと、Routerでstatic routeを切らなければならない
Sourceの設定
- rc.confの設定
ifconfig_xn0="inet Src(A)/24" ifconfig_xn0_alias0="inet Src(B)/24" ifconfig_xn0_alias1="inet Src(C)/24"
Roouterの設定
- loader.confの設定
if_gre_load="YES" net.fibs=4
- rc.confの設定
cloned_interfaces="gre0 gre1" ifconfig_xn0="inet Addr(Global)/masklen" ifconfig_xn1="inet Src(Router)/masklen" ifconfig_gre0="inet tun(Router) tun(ProxyB) netmask 255.255.255.252 tunnel Addr(Global) Addr(ProxyB) mtu 1436 fib 1" ifconfig_gre1="inet tun(Router) tun(ProxyC) netmask 255.255.255.252 tunnel Addr(Global) Addr(ProxyC) mtu 1436 fib 1" route_0="-fib 0 default Addr(ISP)" route_1="-fib 1 default tun(ProxyB)" route_2="-fib 2 default tun(ProxyC)" static_routes="0 1 2"
- pf.confの設定
- 全部書くと細かすぎるので、必要部分のみ記載する
...(snip)... nat pass on xn0 from Src(A) to any -> (xn0) nat pass on gre0 from Src(B) to any -> tun(ProxyB) nat pass on gre0 from Src(C) to any -> tun(ProxyC) ...(snip)... pass in from any to any rtable 0 pass in from Src(B) to any rtable 1 pass in from Src(C) to any rtable 2
Test
Sourceにloginして、
- ping -S Src(A) Address(Dest)
- traceroute -n -w 2 -s Src(A) Address(Dest)
- ping -S Src(B) Address(Dest)
- traceroute -n -w 2 -s Src(B) Address(Dest)
- ping -S Src(C) Address(Dest)
- traceroute -n -w 2 -s Src© Address(Dest)
で確認できるはず。
注意点
pass in from any to any rtable 0
を記載する場所に気をつけること- pfは、何も設定しなければ、defaultで rtable 0 を利用するので、なくても良い。
- 複雑な設定をする場合、この部分だけは、Genericな部分から記載し、Specificなものほど後ろに書くこと
- GRE tunnelを張る際に、ifconfigで必ずFIBを指定すること
- 指定しない場合、FIB 0のみにgreのlocal側Addressが載る。つまり、他のFIBを使わなくなる。
- ここでどハマりぶっこいて、相当悩んだ。
tweet/2020/0327_01.txt · 最終更新: 2020/03/27 19:24 by seirios