マルチホーム NIC 経由でパケットをルーティングする方法がわかりません

マルチホーム NIC 経由でパケットをルーティングする方法がわかりません

環境は大部分が 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にはできない

追加のメモ: 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

2 つの NIC のアクティビティを監視します。

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

しかし、そうではありません。hostb からの 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、それを に中継します。に応答をem0受信した場合は、それを に中継します。pingem0ue0

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

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

実験を機能させるために、静的ルートを ROUTER に配置することもできますpingが、それでもパブリック インターネットからは分離されます。LOKI で NAT を有効にすると、インターネットへの二重 NAT が実現します (正常に機能しますが、ほとんど意味がありません)。第 2 レベルのファイアウォールだけが必要な場合は、LOKI をブリッジ ファイアウォールにして、10.0.0.0/24両方の NIC で実行することを検討してください。インターネット向けのサービスをホストする場合、パブリック IP アドレスが 1 つしかない場合は、ROUTER でポート転送ルールを使用する必要があります。

答え3

ネットワーク A からネットワーク B にパケットを転送するには、何らかの設定が必要です。デュアルホームの Loki はこれを実行できますが、自動ではありません。これを行うには、Loki をルーターとして設定し、ホスト B のデフォルト ゲートウェイとして Loki を使用する必要があります。別のオプションは、ホスト B のルーティング テーブルに永続的なルートを設定し、10.xxx トラフィックの宛先として Loki を指定することです。

関連情報