我有这个网络拓扑:
network 192.168.100.0/24 vlan 100
network 192.168.200.0/24 vlan 200
一台 ubuntu 服务器(1 个以太网上有 2 个 VLAN) eth0.100(ip:192.168.100.10/24) eth0.200(ip:192.168.200.20/24 def gw 192.168.200.254)
情况如下:
- eth0.200 已启动
- eth0.100 我们瘫痪了。
- 从子网 192.168.100.0/24 到 192.168.200.20 的连接正常。
当我设置 eth0.100 时:
- 无法从 192.168.100.0/24 网络访问 192.168.200.20。(错误的接口响应。当数据包从 192.168.100.0/24 到达 192.168.200.20 时,它会由 192.168.100.10 做出响应)
如何解决这个问题?
尝试使用 rp_filter=0/rp_filter=1
#cat /etc/network/interfaces
iface eth0.200 inet static
address 192.168.200.20
netmask 255.255.255.0
vlan-raw-device eth0
gateway 192.168.200.254
post-up ip r a 192.168.200.6 via 192.168.200.250 #one ip behind wifi
iface eth0.100 inet static
address 192.168.100.10
netmask 255.255.255.0
vlan-raw-device eth0
寻求合作:
iptables -A PREROUTING -t mangle -i eth0.100 -j MARK --set-mark 100
iptables -A PREROUTING -t mangle -i eth0.200 -j MARK --set-mark 200
making some route tables like t100 and t200
and then ading rule like:
ip rule add from all fwmark 100 table t100
ip rule add from all fwmark 200 table t200
这是RP_FILTER
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.eth0/100.rp_filter = 0
net.ipv4.conf.eth0/200.rp_filter = 0
答案1
此类问题是由 引起的net.ipv4.conf.*.rp_filter
。
启用后rp_filter
,内核将拒绝进入该接口的流量,其中流量的源地址与该服务器上另一个接口的子网匹配。
如果在 上启用了该设置net.ipv4.conf.all.rp_filter
,但在 等特定接口上未启用,则很多时候会出现问题 。 的默认设置为,但许多发行版会覆盖此设置net.ipv4.conf.eth0.rp_filter
。由于它是在启动时由发行版手动设置的,因此在 下设置不再有效,必须在特定接口(例如 )上设置。rp_filter
0
net.ipv4.conf.all.rp_filter
net.ipv4.conf.eth0.rp_filter
答案2
我认为,网络分段不当存在问题,如果您ip r a 192.168.200.6 via 192.168.200.250
在配置中需要线路...如果您声明,eth0.200 上的网络是 192.168.200.0/24,为什么要通过其他 PC 转到 IP 地址为 192.168.200.6 的 PC?这不太系统化。
每个网络只能由一个路由器路由。如果您在网络上的某个地方有路由器,该路由器在 192.168.100.0/24 和 192.168.200.0/24 网络之间路由流量,您可以在这台机器上进行此配置,但您必须在这台电脑上禁用路由!您的电脑将同时在两个网络上,但流量将通过路由器,这是网络上的电脑所期望的。
当 PC 想要与其他 PC 通信时,在明确的情况下,它们将在网络地址和网络掩码上看到它将选择哪种方法。例如,如果它的 IP 地址为 192.168.200.20,网络掩码为 255.255.255.0,则情况如下(使用 ipcalc):
# ipcalc 192.168.200.20/24
Address: 192.168.200.20 11000000.10101000.11001000. 00010100
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.200.0/24 11000000.10101000.11001000. 00000000
HostMin: 192.168.200.1 11000000.10101000.11001000. 00000001
HostMax: 192.168.200.254 11000000.10101000.11001000. 11111110
Broadcast: 192.168.200.255 11000000.10101000.11001000. 11111111
Hosts/Net: 254 Class C, Private Internet
在正常情况下,这台计算机可以直接联系 192.168.200.1-192.168.200.254 范围内的每台 PC - 它们将向广播地址发送带有目标 IP 的 arp 请求,目标 PC 将对其进行应答,并且 PC 将具有目标 PC 的链接地址(MAC)和 IP 地址,并可以直接发送数据包。
如果他们想联系来自另一个子网的 PC,他们将计算(使用 IP 地址和网络掩码),它无法直接联系它,并将发送带有目标 PC 的 IP 地址但带有网关(通常是默认网关)的 MAC 地址的数据包。网关直接连接此网络,或将通过另一个网关发送数据包... 并且对我们计算机的答复将从它自己的网关发出,而不是从网络上的另一台计算机发出。
正常情况下网络上的每台 PC 只需要 3 个规范:
- IP地址
- 网络掩码
- 默认网关
此规则的例外是网关(或路由器),它们了解多个网络并且它们也有默认网关......
有时,您希望拥有“多宿主 PC”,其接口上有多个网络,但它们希望禁用路由 - 它们根本没有路由器(或网关)。如果 PC 正在等待来自网关的数据包,而该数据包来自另一台 PC,它将丢弃该数据包作为假数据包。
有一种方法可以告诉网络上的 PC,地址 192.168.100.10 的数据包必须通过另一台 PC 发送,但是:
- 不系统(见上文)
- 这对管理员来说很不舒服,因为 192.168.200.0/24 网络中的每台 PC 都必须知道这一点,相反 - 192.168.100.0/24 网络中的每台 PC 都必须通过 192.168.100.10 网关联系 192.168.200.20。这不是很混乱吗?
那么我强烈建议你不要这么做。保持网络尽可能简单,你就不会遇到任何问题。
答案3
您的交换机必须支持 802.1q 并具有正确的 vlan 配置。也许您只定义了一个 vlan,或者端口处于访问模式(并且应该是 trunk)。检查您的 Linux 和交换机日志:您看到了什么吗?