web-dev-qa-db-ja.com

FreeBSDのセカンダリFIB /ルーティングテーブルでのルーティングの問題

このマシンにセカンダリルーティングテーブルが必要です。ほとんどすべてがセットアップされていますが、セカンダリfibでデフォルトルートを機能させるのに問題があります。

ほとんどの情報で、セカンダリルーティングテーブルについて見つけることができます。 setfib 1 route add default 10.0.0.1(10.0.0.1はネットワーク上のルーター)は、セカンダリfibのデフォルトルートを設定するために使用されます。このような場合、10.0.0.1はネットワーク上の外部ルーターであり、静的ルートです。私の場合、10.0.0.1はこれを構成しようとしているマシンです。また、ネットワーク全体のルーターでもあります。そのルートを追加すると、ルーティングテーブルがループバックするため、外部ソースに接続できなくなります。例えば:

まず、ルートのデフォルトルートが追加されます(10.0.0.1/16へのルートはすでに配置されています)

# setfib 1 route add default 10.0.0.1
add net default: gateway 10.0.0.1 fib 1

ルーター(プライマリFIB上のマシン自体)へのpingは正常に機能します。

# setfib 1 ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1): 56 data bytes
64 bytes from 10.0.0.1: icmp_seq=0 ttl=64 time=0.043 ms
^C
--- 10.0.0.1 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.043/0.043/0.043/0.000 ms

しかし、外部ソースに到達することはできません-「存続時間超過」:

# setfib 1 ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
36 bytes from this_server.my.domain (10.0.0.1): Time to live exceeded
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 0054 24ce   0 0000  01  01 3f00 10.0.0.1  8.8.8.8

^C
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss

外部ソースへのtracerouteにより、問題が明らかになります。

# setfib 1 traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 64 Hops max, 40 byte packets
 1  this_server (10.0.0.1)  0.043 ms  0.036 ms  0.024 ms
 2  this_server (10.0.0.1)  0.033 ms  0.030 ms  0.028 ms
 3  this_server (10.0.0.1)  0.027 ms  0.031 ms  0.032 ms
    ...snip...
64  this_server (10.0.0.1)  0.132 ms  0.138 ms  0.137 ms

このマシンのパブリックインターフェイスは、別の物理ポートにあります。 DHCP経由で割り当てられたISP提供のゲートウェイを手動で追加すると、fibは機能しますが、ゲートウェイが変更される可能性があるため、これは長期的な解決策ではありません。新しいゲートウェイが提供されたときにゲートウェイを自動的に再割り当てするための何らかのフックを設定できる可能性があることは承知していますが、これはクリーンで正しい方法で行いたいと思います。

私が探しているのは、IPではなく他のインターフェイスを介してそのfib上のトラフィックをルーティングする方法だと思いますか?それも事ですか?私は正直なところ、ルーティングについて十分に知らないので、これでどこに行くのかを本当に知ることができません。

両方のfibのルーティングテーブルの短縮バージョンを次に示します(いくつかの確立されたOpenVPNトンネルおよびipv6トンネルなどの他のその他のものは省略されています)。

# netstat -r4
Routing tables

Internet:
Destination        Gateway            Flags     Netif Expire
default            lo0-100.NYCMNY-VFT UGS         em0
10.0.0.0/16        link#1             U           re0

# setfib 1 netstat -r4
Routing tables (fib: 1)

Internet:
Destination        Gateway            Flags     Netif Expire
default            this_server        UGS         re0
10.0.0.0/16        link#1             U           re0

これで助けてくれてありがとう!

1
Brett Gmoser

正解です。デフォルトルートとして自分自身を追加しているため、これは機能しません。ゲートウェイを、ルーティングを処理する10.0.0.0ネットワーク上の別のホストに変更する必要があります。

コマンドrouteコマンドを次のように変更します。

setfib 1 route add default <router on 10.0.0.0 network>

それからあなたがするときsetfib 1 ping 8.8.8.8、ルーターに転送され、ルーターは転送を処理することが期待されます。

1