マルチホームネットワークカードを介してパケットをルーティングする方法がわかりません。

マルチホームネットワークカードを介してパケットをルーティングする方法がわかりません。

環境は以下のようにほとんどFreeBSDです。

HOST_A <-> ROUTER <-> LOKI <-> HOST_B

少なくとも、HOST_BでROUTERをpingできることを願っています。

  • ルータに IP 10.0.0.1 が割り当てられました。
  • LOKIは、IP 10.0.0.2と192.168.200.1が割り当てられたマルチホームコンピュータです。
  • HOST_BにはIP 192.168.200.3が割り当てられています。
  • HOST_AにはIP 10.0.0.3が割り当てられています。

上記のようにネットワークを設定し、lokiのrc.confにGateway_enable = "YES"を追加しました。

LOKI の netstat -r は以下を生成します。

Routing tables
Internet:
Destination        Gateway            Flags      Netif Expire
default            10.0.0.1           UGS         em0
10.0.0.0           link#1             U           em0
10.0.0.2           link#1             UHS         lo0
loki               link#2             UH          lo0
192.168.200.0      link#3             U           ue0
192.168.200.1      link#3             UHS         lo0

それは良いルーティングテーブルのように見え、すべての方向で動作するようです。

HOST_B の netstat -r は以下を生成します。

Routing tables
Internet:
Destination        Gateway            Flags      Netif Expire
default            192.168.200.1      UGS         em0
hostb              link#2             UH          lo0
192.168.200.0      link#1             U           em0
192.168.200.3      link#1             UHS         lo0

別のきめ細かいルーティングテーブルのように見えますが、LOKIだけが見えます。

簡単に言うと:

  • LOKIはHOST_A、HOST_B、およびROUTERをpingできます。
  • HOST_BはLOKIをpingできますが、ROUTERまたはHOST_Aはpingできません。

追加の注意事項:HOST_Bから

ping 10.0.0.1 100% packet loss

LOKIのWiresharkでHOST_Bで10.0.0.1をpingするとき:

120 40.549564000    192.168.200.3   10.0.0.1    ICMP    98  Echo (ping) request  id=0x5a0e, seq=92/23552, ttl=63 (no response found!)

私が見るには、LOKIからROUTERに何もルーティングされていないようです。私は何を見逃していますか?

/etc/rc.conf で Gateway_enable="YES" をコメントアウトして再起動し、IP 転送が進行中であることを確認しました。

次に、lokiで次のコマンドを実行します。

sudo tcpdump -i em0 -nS
sudo tcpdump -i ue0 -nS

両方のネットワークカードのアクティビティを監視します。

Hostbで以下を実行しました。

ping 10.0.0.1

192.168.200.1 の ue0 インターフェイスは、次のことを報告します。

14:44:21.870865 IP 192.168.200.3 > 10.0.0.1: ICMP echo request, id 21509, seq 0, length 64

10.0.0.2のem0インターフェイスには何も報告されません。

それから私は以下を実行しました。

sudo sysctl -w net.inet.ip.forwarding=1

もちろん、em0は次のように報告しました。

14:58:14.745369 IP 192.168.200.3 > 10.0.0.1: ICMP echo request, id 25861, seq 0, length 64

でもいいえ、ホストbのping lokiで得たのと同じ結果で返信してください。

14:44:15.724200 IP 192.168.200.3 > 192.168.200.1: ICMP echo request, id 21253, seq 4, length 64
14:44:15.724207 IP 192.168.200.1 > 192.168.200.3: ICMP echo reply, id 21253, seq 4, length 64

lokiでルータにpingを実行すると、すべてが正常です。

15:04:55.637839 IP 10.0.0.2 > 10.0.0.1: ICMP echo request, id 46852, seq 3, length 64
15:04:55.638324 IP 10.0.0.1 > 10.0.0.2: ICMP echo reply, id 46852, seq 3, length 64

返信を見つける方法についてのアイデアはありますか?

答え1

LOKIとHOST_Aが同じサブネットにある場合、なぜルーターを介して接続するのですか?それは本当にルーターですか、それとも単純なスイッチですか? (後でコメントすると、デバイスはルータですが、単にLOKIとHOST_Aの間のスイッチとして機能します。)

HOST_AとROUTERのルーティングテーブルは何ですか? 192.168.200.1にアクセスしようとしていますが、なぜLOKIを目的地として使用するのですか?

これらのデバイスのルーティングテーブルが 192 サブネットに LOKI を使用していることを知らない限り、デフォルトゲートウェイにのみ転送されます。

あるいは、LOKIにNATをインストールすることを検討してください。多くのサービスでは、HOST_BのトラフィックをLOKIのトラフィックにカプセル化できます。他のシステムがその場所に到達する可能性があるため、トラフィックを受信して​​HOST_Bに戻すことができます。

答え2

私の考えでは、Lokiはあなたが期待するものとまったく一致しています。pingから要求パケットを受信してue0​​に転送しますem0ping回答を受け取るem0とに渡されますue0

問題はルータにあります。 LAN側pingから要求を受け取ります(ただしこれは問題ではありません)。に応答を送信する192.168.200.3ときにルーティングテーブルを調べます。 LAN側は、(または同様の)応答パケットがパブリックインターネットのWAN側であるルータのデフォルトゲートウェイに送信される。ping192.168.200.310.0.0.0/24

ルータはネットワークアドレス変換(NAT)を使用して、実際のパブリック10.0.0.0/24IPアドレス(ISPがルータのWAN側に割り当てる)の1つの後ろにネットワークを偽造します。 RFC1918アドレスはプライベートであり、パブリックインターネットに公開することはできず、常にNATの後ろにあります。

実験を正常に実行するために、固定ルートをROUTERに配置できますが、pingこれはまだパブリックインターネットから隔離されています。 LOKIでNATを有効にすることができます。この場合、デュアルNATを使用してインターネットに接続できます(うまく機能しますが意味がありません)。 2番目のレベルのファイアウォールのみが必要な場合は、LOKIをブリッジファイアウォールとして設定し、両方のNIC10.0.0.0/24で実行することを検討できます。インターネット接続サービスをホストし、パブリックIPアドレスが1つしかない場合は、ルーターでポート転送ルールを使用する必要があります。

答え3

ネットワークAからネットワークBにパケットを転送するには、いくつかの設定を行う必要があります。 Lokiは二重溝を備えており、これは可能ですが、自動ではありません。これにより、Lokiをルーターに設定し、LokiをホストBのデフォルトゲートウェイとして使用する必要があります。別のオプションは、ホストBのルーティングテーブルに永続パスを設定して、Lokiを10.xxxトラフィックの宛先として指定することです。

関連情報