環境は以下のようにほとんど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
に転送しますem0
。ping
回答を受け取るem0
とに渡されますue0
。
問題はルータにあります。 LAN側ping
から要求を受け取ります(ただしこれは問題ではありません)。に応答を送信する192.168.200.3
ときにルーティングテーブルを調べます。 LAN側は、(または同様の)応答パケットがパブリックインターネットのWAN側であるルータのデフォルトゲートウェイに送信される。ping
192.168.200.3
10.0.0.0/24
ルータはネットワークアドレス変換(NAT)を使用して、実際のパブリック10.0.0.0/24
IPアドレス(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トラフィックの宛先として指定することです。