使用两个独立的子网(每个子网位于不同的 VLAN)设置具有两个 NIC 的服务器

使用两个独立的子网(每个子网位于不同的 VLAN)设置具有两个 NIC 的服务器

我在具有不同 VLAN 上两个不重叠子网 M 和 N 的环境中,使用 Ubuntu 14.04(标准服务器安装 + OpenSSH,安装期间 biosdevname=0 以保持网络名称简单)。

为了调试某个子网上的问题,我想要配置我的服务器,使其能够从子网 M 上的 IP 在 eth0 上接收流量,并从子网 N 上的 IP 在 eth1 上接收流量。

我意识到我只能有一个网关,因此我使用子网 M 的网关。我设置了 /etc/network/interfaces,使得子网 M 完全指定 IP ABC42(正常工作),并且从子网 N 中我选择了 IP 地址 XYZ88 并为该子网提供了适当的网络掩码(它根本不与子网 M 重叠)。

我可以通过...启动 eth1 sudo ip addr flush dev eth1; sudo ifdown eth1; sudo ifup eth1,这似乎有效,我的路由表是:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         A.B.C.1         0.0.0.0         UG    0      0        0 eth0
A.B.C.0         0.0.0.0         255.255.255.192 U     0      0        0 eth0
X.Y.Z.64        0.0.0.0         255.255.255.224 U     0      0        0 eth1

请注意,适配器有效且正常工作sudo lshw -c network

在此刻,假设子网 N 没有阻塞,我是否应该能够通过子网 N (使用 IP XYZ88) ping 或 ssh 到该服务器?(具有 IP ABC42 的子网 M 肯定可以工作。)如果不行,我遗漏了哪些明显的步骤/测试?

(我在这里和其他地方看到过类似的问题,但到目前为止还没有找到具有这种配置的问题(例如完全独立的子网)。我真的想确定子网 N 是否阻止了流量或出现了其他问题。)

答案1

嗯,有些东西你可以测试。

首先,您在主题中提到了 VLAN。服务器是否连接到交换机?如果是,端口是否正确配置在正确的 VLAN(访问端口?)等中...

您的服务器是虚拟机吗?虚拟网卡 (ESX fe 上的端口组) 上的 VLAN 是否配置正确?

第二:您的服务器是否能够访问子网 N 的 IP 范围内的另一台设备?

第三:服务器上是否安装了防火墙?如果安装了,它是否允许来自或发往子网 N 的通信?

第四:对于 SSH,SSH 服务器是否监听任何地址,还是配置为仅监听子网 M 的 IP?

对于更多调试,您可以使用 tcpdump 或 tshark。这将允许您检查流量是否真正到达服务器。

答案2

实际上,答案并不像我想象的那么混乱,但也不是很明显。

很明显,单纯地添加路线 + 第二个网关是行不通的(也不应该起作用 - 您不能以这种方式拥有多个网关):

sudo ip route add X.Y.Z.64/27 via X.Y.Z.65 dev eth1
RTNETLINK answers: File exists

一位朋友向我指出描述如何处理类似情况的页面底线:你需要创建 IP 规则和然后您可以添加第二个网关。

假设您有一个当前的操作系统和内核 iproute2,并且应该嵌入策略路由。考虑到这一点,我们可以简单地执行以下操作:

sudo bash -c 'echo "1 admin" >> /etc/iproute2/rt_tables'
sudo ip route add X.Y.Z.64/27 dev eth1 src X.Y.Z.88 table admin
sudo ip route add default via X.Y.Z.65 dev eth1 table admin
sudo ip rule  add from X.Y.Z.88/32 table admin
sudo ip rule  add to   X.Y.Z.88/32 table admin
sudo ip route flush cache

一切正常。我现在可以 ping /ssh 到任一接口!

注意:之前评论中的“RTNETLINK 答案:网络无法访问”错误是由于交换机配置错误造成的(当我尝试上述解决方案时,我不断收到“RTNETLINK 答案:没有这样的过程”,显然也是出于同样的原因)。该sudo tcpdump -i eth1 -n -vv -c 1 'ether[20:2] == 0x2000'命令对于识别该问题非常有用。一旦我意识到问题所在,我就能够使用该 VLAN 的正确 IP 范围来使其正常工作。

相关内容