接口上的 VLAN 中继只能从其 VLAN 上的主机进行 ping 操作

接口上的 VLAN 中继只能从其 VLAN 上的主机进行 ping 操作

我正在尝试在 Ubuntu 14.04 服务器上为每个 VLAN 设置子接口。我相信我已经使用 vconfig 成功设置了它们,但子接口只能从其自己的 VLAN 上的主机进行 ping 操作。我需要其 VLAN 之外的主机才能连接到它。这似乎对我的 CentOS 服务器很有效,所以我知道我的网络是正确的。当我执行 atcpdump并从 VLAN 之外的客户端 ping 子接口时,我也会在子接口上看到 ICMP 请求数据包。

有什么想法吗?您还可以提供哪些其他故障排除技巧?

编辑:我设法解决了这个问题。服务器上的 tcpdump 显示有 icmp echo 请求,但没有回复。我找到了一篇相关的帖子这里像这样启用 martian 源日志记录:

echo 1 >/proc/sys/net/ipv4/conf/eth2/log_martians

进而

sysctl net.ipv4.conf.all.rp_filter=2

已修复。我很惊讶这个问题没有经常出现。

答案1

我设法解决了这个问题。服务器上的 tcpdump 显示有 icmp echo 请求,但没有回复。我找到了一篇相关的帖子这里像这样启用 martian 源日志记录:

echo 1 >/proc/sys/net/ipv4/conf/eth2/log_martians

进而

sysctl net.ipv4.conf.all.rp_filter=2

已修复。我很惊讶这个问题没有经常出现。

答案2

为了让您的客户端 ping 您的服务器的 IP 地址,需要满足以下条件之一:

  • 客户端必须位于同一个 [V]LAN使用与尝试 ping 的地址位于同一 IP 子网上的 IP 地址。

或者

  • 必须有一个 IP 路由器(或路由器网络)将客户端的 [V]LAN 和 IP 子网连接到服务器的 [V]LAN 和 IP 子网。

如果您尚未在两个 VLAN 之间(或者在同一个 VLAN 上的两个 IP 子网之间,如果您正在这样做)设置路由器,那么您就没有提供 ping 命令要遍历的 IP 网络路由。

请注意,某些操作系统(至少在某些配置中)不会注意某个 IP 数据包来自哪个接口。因此,在这些情况下,它们可能会回复来自“错误”接口的 ping 请求。可能是您的 CentOS 环境像这样松懈,但您的 Ubuntu 机器对哪个接口更谨慎。或者可能是您在 CentOS 机器上启用了 IP 转发(最简单的 IP 路由器版本),但在您的 Ubuntu 机器上没有启用。

答案3

听起来您需要为您尝试连接的特定远程网络设置路由。

要测试将路由插入路由表,如下所示:

sudo route add -net 172.16.0.0/12 gw 192.168.1.113 dev eth.<vlan number>

为了使这些路由永久生效,您需要在 /etc/network/interfaces 中添加如下条目:

up route add [-net|-host] <host/net>/<mask> gw <host/IP> dev <Interface>

相关内容