Linux

linux vlan路由

  • February 16, 2022

我有這個網路拓撲:

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

此類問題是由net.ipv4.conf.*.rp_filter.

啟用後rp_filter,核心將拒絕來自流量源地址與該伺服器上另一個介面的子網匹配的介面上的流量。

很多時候,如果啟用該設置,可能會出現問題net.ipv4.conf.all.rp_filter,但不會出現在特定界面上,例如net.ipv4.conf.eth0.rp_filter.

的預設設置rp_filter0,但是許多發行版會覆蓋此設置。因為是發行版開機手動設置的,設置在下面net.ipv4.conf.all.rp_filter已經不起作用了,必須在具體的界面上設置(如net.ipv4.conf.eth0.rp_filter)。

引用自:https://serverfault.com/questions/369947