我在具有不同 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 范围来使其正常工作。