Linux VLAN 路由

Linux VLAN 路由

我有这个网络拓扑:

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 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/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_filter0net.ipv4.conf.all.rp_filternet.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 个规范:

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

此规则的例外是网关(或路由器),它们了解多个网络并且它们也有默认网关......

有时,您希望拥有“多宿主 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 和交换机日志:您看到了什么吗?

相关内容