
環境は大部分が 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
受信した場合は、それを に中継します。ping
em0
ue0
問題はルーターです。ルーターはLAN 側でping
からの要求を受信します (ただし、これは問題ではありません)。ルーターが に応答を送信すると、ルーティング テーブルを参照します。LAN 側は(または同様の) であるため、応答パケットはルーターのデフォルト ゲートウェイ (パブリック インターネットの WAN 側) に送信されます。192.168.200.3
ping
192.168.200.3
10.0.0.0/24
ルーターはネットワーク アドレス変換 (NAT) を使用して、10.0.0.0/24
1 つの実際のパブリック 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 を指定することです。