两个 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

问题是我们在私有子网网络服务器上运行网站,它们引用指向 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 问题,而是您尝试从内部(eth1和内部子网)到外部(eth0和公共互联网)而没有路由器(或配置为路由器的系统)或规则让您的“服务器”充当从内到外的代理(这不是反向代理)。

NGINX 不是代理或路由器。反向代理会说“好的,所以将此请求发送到后端 abc。”然后,它会说“ABC:向我发送响应”,这会将外部发出的初始请求发送到内部服务器。然后,您将从 nginx 服务器上的后端“abc”获得响应。nginx 会将其返回给发出请求的客户端。

反向代理也只能从外部 -> 内部工作。此图基本显示了从外部进入的内部情况:

由 Thomas W. 匆忙绘制的图表

反向路径有效,但仅仅是因为反向代理系统(nginx)正在等待后端的响应,然后将该数据交回给发出信息请求并期待响应的 Web 浏览器或远程客户端。

但是,反向路径不允许您通过远程代理系统从eth1反向代理转到eth0反向代理 - 这不是 IP 路由的工作方式,并且要实现您想要实现的目标,您需要一个真实的路由器可以处理从内部 IP 到外部的网络遍历,然后返回到eth0反向代理框上的公共 IP 地址,因此它看起来像这样:

路由器方式,另一张图表由 Thomas W. 绘制。

那么,这里的数据遍历将从内部盒子开始,通过它们所连接的路由器盒子,传到互联网,然后从互联网回到你的eth0盒子。(当然,这是最基本的解释方式)。

但是,你的反向代理服务器不是兼作路由器,因此它不能按照您想象的方式工作。


另一个注意事项:

您无法从内部 (连接到eth1)eth0直接 ping 到 ,因为它位于完全不同的子网除非你通过一个真正的路由器,从外面再回来。除非你把装有 nginx 的服务器设置为路由器,但从你的评论来看,情况似乎并非如此。所以,这个“无法跨接口和子网 ping 通”是预期行为

相关内容