linux的vlan路由

我有这个networking拓扑:

network 192.168.100.0/24 vlan 100 network 192.168.200.0/24 vlan 200 

一个ubuntu服务器(1 ether上的2个vlan)eth0.100(ip:192.168.100.10/24)eth0.200(ip:192.168.200.20/24 def gw 1​​92.168.200.254)

下一个情况是:

  1. eth0.200已启动
  2. eth0.100我们倒了。
  3. 子网192.168.100.0/24的连接可以连接到192.168.200.20。

当我制作eth0.100时:

  • 无法从192.168.100.0/24networking访问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 ra 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 

添加我的评论作为答案,所以可以标记。

像这样的问题是由net.ipv4.conf.*.rp_filter引起的。

当启用rp_filter ,内核将拒绝stream量源地址与该服务器上另一个接口的子网相匹配的接口进入。

如果在net.ipv4.conf.all.rp_filter上启用了该设置,则可能会出现许多问题,而不是在net.ipv4.conf.all.rp_filter等特定的接口上。
rp_filter的默认设置是0 ,但是很多发行版会覆盖此设置。 因为它是在启动时由发行版手动设置的,所以在net.ipv4.conf.all.rp_filter下设置它不再起作用,它必须在特定接口上设置(如net.ipv4.conf.eth0.rp_filter )。

我认为,如果在configuration中需要ip ra 192.168.200.6 via 192.168.200.250行的ip ra 192.168.200.6 via 192.168.200.250 ,那么networking坏分区存在问题。如果声明eth0.200的networking是192.168.200.0/24 ,为什么你想通过其他PC去IP地址为192.168.200.6的PC? 这不是很系统。

每个networking只能由一个路由器路由。 如果你的networking路由器是在192.168.100.0/24和192.168.200.0/24networking之间路由的,你可以在这台机器上configuration这个configuration,但是你必须在这台PC上禁用路由。 您的电脑将在两个networking上,但stream量将通过路由器,这是networking上的电脑所期待的。

当PC想要与其他人通信时,在明确的情况下,他们将看到networking地址和networking掩码,它将select哪种方法。 如果它有,例如,IP地址192.168.200.20和networking掩码是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将具有链接地址(MAC)和目标PC的IP地址,可以直接发送数据包。

如果他们想要从另一个子网联系PC,他们将计算(使用IP地址和networking掩码),不能直接联系它,将发送包与目标PC的IP地址,但与网关的MAC地址(通常是默认网关)。 网关有这个networking直接连接,或将通过另一个网关发送数据包…答案我们的电脑将从它自己的网关,而不是从networking上的另一台计算机。

在正常情况下,networking上的每台PC只需要3个规格:

  1. IP地址
  2. 子网掩码
  3. 默认网关

这个规则的例外是网关(或路由器),它知道更多的一个networking,他们也有默认网关…

有时候你想拥有“多宿主的PC”,它有多个networking的接口,但是他们希望禁用路由 – 他们根本没有路由器(或者网关)。 如果PC期望来自网关的数据包,它将来自另一台PC,它将把这个数据包丢弃为假。

有一种方法可以告诉在networking上的个人电脑,地址192.168.100.10的包将不得不通过另一台PC发送,但它是:

  • 不系统(见上)
  • 这对pipe理员来说是不舒服的,因为192.168.200.0/24networking中的每台PC都必须知道它和相反 – networking192.168.100.0/24networking中的每台PC必须通过192.168.100.10网关联系192.168.200.20。 这不是一团糟吗?

那么我强烈build议你不要这样做。 保持networking尽可能简单,你将没有任何问题。

您的交换机必须支持802.1q,并且具有正确的vlanconfiguration。 也许你只定义一个vlan,或者端口处于访问模式(它应该是中继)。 检查你的Linux和切换日志:你看到什么?