
2 つの異なるサブネット上で 2 つの NIC を実行し、それらの間をルーティングしている Ubuntu サーバーで問題が発生しています。パブリック サブネットとプライベート サブネットを持つリバース プロキシとして Nginx サーバーを実行しています。
Ubuntu サーバー 15.04 を実行しています。
セットアップは次のとおりです:
eth0 Link encap:Ethernet HWaddr 00:50:56:88:6e:91
inet addr:89.21.20.14 Bcast:89.21.20.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe88:6e91/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:89152 errors:0 dropped:0 overruns:0 frame:0
TX packets:1729 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5552124 (5.5 MB) TX bytes:286442 (286.4 KB)
eth1 Link encap:Ethernet HWaddr 00:50:56:88:16:0b
inet addr:10.150.200.50 Bcast:10.150.200.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe88:160b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:549 errors:0 dropped:0 overruns:0 frame:0
TX packets:22 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:53395 (53.3 KB) TX bytes:1908 (1.9 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:160 errors:0 dropped:0 overruns:0 frame:0
TX packets:160 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:12960 (12.9 KB) TX bytes:12960 (12.9 KB)
ゲートウェイは eth0 にあります。
10.150.200.xxサブネット上のサーバーから89.21.20.14にpingを打とうとすると、うまくいかず通信できません。トラフィックはeth0にヒットしています。
sudo tcpdump -i eth0 proto \\icmp
89.21.20.xxのサーバーから10.150.200.50にアクセス/pingして同じことを試してみましたが、これもうまくいきませんでした。tcpdumpを実行すると、pingがeth1にヒットしているのがわかります。
問題は、プライベート サブネットの Web サーバー上で Web サイトが実行されており、それらの Web サイトが 89.21.20.xx のパブリック IP を指すドメインを参照しているため、サイト/アプリケーションと通信できないことです。
何らかのルーティングの問題だと思うのですが、どこから始めればよいかよくわかりません。
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 89.21.24.1 0.0.0.0 UG 0 0 0 eth0
10.150.200.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
89.21.20.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 89.21.20.1 0.0.0.0 UG 0 0 0 eth0
10.150.200.0 * 255.255.255.0 U 0 0 0 eth1
localnet * 255.255.255.0 U 0 0 0 eth0
答え1
コメントで、サブネット トラバーサルは不要であると述べられています。つまり、サブネット トラバーサルは既に実現されており、一方eth0
から他方へアクセスすることもeth1
、他方からアクセスすることもできないため、問題はすでに解決されています。
ただし、他に質問がある場合は、質問内容をより具体的にする必要があります。(リバース プロキシは透過的に行われるため、リバース プロキシ サーバーを経由せずに、eth0
からアクセスしたりeth1
、その逆を行ったりすることはできませんnginx
)。
以下は歴史的な理由から保存されています。
なぜこれがタグ付けされているのか知りたいnginxこれは NGINX の問題ではないため、ルーター (またはルーターとして構成されたシステム) を設置しないまま、または「サーバー」を内部から外部へのプロキシとして動作させるルール (リバース プロキシではありません) を設定せずにeth1
、内部 (および内部サブネット) から外部 (eth0
およびパブリック インターネット) に移動しようとしているケースです。
NGINX はプロキシでもルーターでもありません。リバース プロキシは「OK、このリクエストをバックエンド abc に送信してください」と指示し、次に「ABC: 応答を送信してください」と指示して、外部からの最初のリクエストを内部サーバーに送信します。その後、nginx サーバーのバックエンド「abc」からの応答が返されます。これは、nginx によって要求元のクライアントに返されます。
リバース プロキシも外部から内部へのみ機能します。次の図は、基本的に外部から内部への様子を示しています。
リバース パスは機能しますが、これはリバース プロキシ システム (nginx) がバックエンドからの応答を待機し、そのデータを Web ブラウザーまたはリモート クライアントに返して、情報を要求し、応答を期待しているためです。
eth1
ただし、リバースパスではeth0
、リバースプロキシからリモートプロキシシステムを経由してリバースプロキシに移動することはできません。これはIPルーティングの仕組みではなく、目的を達成するには、本物内部 IP から外部へのネットワーク トラバーサルを処理できるルーターを設置し、その後eth0
リバース プロキシ ボックスのパブリック IP アドレスに戻るようにすると、次のようになります。
この場合、データのトラバーサルは、内部ボックスから、それらが接続されているルーター ボックスを経由してインターネットに送られ、その後インターネットからボックスに戻りますeth0
(もちろん、これはこれを説明する最も基本的な方法です)。
しかし、リバースプロキシボックスはないルーターとしても機能するため、期待通りには動作しません。
別の話ですが:
eth1
内部( へ向かう)から へ直接pingすることはできませんeth0
。完全に異なるサブネット実際のルーターを経由して外に出て、また戻ってくるのでなければ。nginxもインストールされているサーバーをルーターとして設定しない限り、コメントから判断するとそうではないようです。つまり、この「インターフェースとサブネット間でpingができない」というのは予想される行動。