Linux
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 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
此類問題是由
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
)。