兩個 NIC 以及介面之間的路由

兩個 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 子網路上的伺服器 ping 89.21.20.14 時,它不起作用,我無法與其通訊。正如我所看到的,流量正在到達 eth0

sudo tcpdump -i eth0 proto \\icmp

我也嘗試從 89.21.20.xx 中的伺服器執行相同的操作並訪問/ping 10.150.200.50,但這也沒有成功。執行 tcpdump 時,我可以看到 ping 到達 eth1

問題是我們的網站在私人子網路 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

您在評論中聲明您不希望進行子網路遍歷。那麼,您已經得到了這個,並且無法到達eth0eth1反之亦然,因此您的問題已經解決。

但是,如果您還有其他問題,則需要更具體地說明您的問題。 (反向代理是透明發生的,您將無法eth0從反向代理伺服器進行訪問eth1,反之亦然,除非經過nginx反向代理伺服器)。


由於歷史原因保留以下內容。

我很好奇為什麼這個被標記,因為這不是 NGINX 問題,而是您嘗試從內部(eth1和內部子網路)到外部(eth0和公共互聯網)而沒有路由器(或配置為路由器的系統)或沒有路由器的情況。充當從內到外的代理(這不是反向代理)。

NGINX 不是代理或路由器。反向代理會說“好的,所以將此請求發送到後端,abc。”然後,它會說“ABC:向我發送回應”,這會將外部發出的初始請求發送到內部伺服器。然後,您將獲得來自 nginx 伺服器後端“abc”的回應。這是由 nginx 回傳給請求客戶端的。

反向代理也只能在外部->內部工作。

Thomas W. 匆忙繪製的圖表

反向路徑有效,但只是因為反向代理系統 (nginx) 正在等待來自後端的回應,然後將資料傳回 Web 瀏覽器或遠端用戶端,發出資訊請求並期望回傳回應。

然而,反向路徑不允許您透過遠端代理系統從eth1反向代理轉到eth0反向代理 - 這不是 IP 路由的工作方式,為了實現您想要實現的目標,您需要一個真實的路由器可以處理從內部 IP 到外部的網路遍歷,然後返回eth0反向代理盒上的公共 IP 位址,因此它看起來像這樣:

路由器方式,Thomas W. 的另一個圖表

那麼,這裡的資料遍歷將從內部盒子開始,透過它們所連接的路由器盒子,傳到互聯網,然後從互聯網回到你的eth0盒子。 (當然是解釋這一點的最基本的方式)。

但是,您的反向代理盒確實不是兼作路由器,因此它不會按照您想像的方式工作。


另一個注意事項:

您無法從內部(轉到eth1eth0直接 ping 到(位於完全不同的子網除非你通過實際的路由器並出去然後再回來。所以,這個「無法跨介面和子網路 ping 通」是預期行為

相關內容