为一个网卡配置一个vlan比较容易,设置两个vlan就麻烦了。
涉及路由过滤,不修改内核可能会不通。
举一个更复杂的例子
有2个网卡4个网口,命名分别为:p1p1 p1p2 p2p1 p2p2
p1p1和p2p1做bond0
p1p2和p2p2做bond1
bond0上有vlan 20 1101 1102
bond1上有vlan 1001
配置如下:
bond0:
# cat ifcfg-p1p1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
NAME=p1p1
UUID=b796742a-aa84-488b-b9c9-74ca9e0e4ebf
DEVICE=p1p1
MASTER=bond0
SLAVE=yes
ONBOOT=yes
[root@gerrit-mirror network-scripts]# cat ifcfg-p2p1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
NAME=p2p1
UUID=6e923643-967b-46bc-bc36-7b894354a1fe
DEVICE=p2p1
MASTER=bond0
SLAVE=yes
ONBOOT=yes
# cat ifcfg-bond0
DEVICE=bond0
BOOTPROTO=static
USERCTL=no
ONBOOT=yes
TYPE=Bond
BONDING_MASTER=yes
NAME=bond0
BONDING_OPTS="mode=4 miimon=100"
# cat ifcfg-bond0.20
DEVICE=bond0.20
TYPE=vlan
NAME=bond0.20
IPADDR=192.168.32.12
NETMASK=255.255.255.0
DNS1=202.96.128.86
#BROADCAST=10.104.101.255
ONBOOT=yes
REORDER_HDR=yes
GVRP=no
MVRP=no
BOOTPROTO=none
USERCTL=no
VLAN=yes
VLAN_ID=20
# cat ifcfg-bond0.1101
DEVICE=bond0.1101
TYPE=vlan
NAME=bond0.1101
IPADDR=192.168.51.12
NETMASK=255.255.255.0
DNS1=202.96.128.86
ONBOOT=yes
REORDER_HDR=yes
GVRP=no
MVRP=no
BOOTPROTO=none
USERCTL=no
VLAN=yes
VLAN_ID=1101
# cat ifcfg-bond0.1102
DEVICE=bond0.1102
TYPE=vlan
NAME=bond0.1102
IPADDR=192.168.52.12
NETMASK=255.255.255.0
DNS1=202.96.128.86
ONBOOT=yes
REORDER_HDR=yes
GVRP=no
MVRP=no
BOOTPROTO=none
USERCTL=no
VLAN=yes
VLAN_ID=1102
bond1
# cat ifcfg-p1p2
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
NAME=p1p2
UUID=573ae805-c524-4fe8-90ad-a62bcf811c75
DEVICE=p1p2
ONBOOT=yes
MASTER=bond1
SLAVE=yes
# cat ifcfg-p2p2
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
NAME=p2p2
UUID=1050382b-5e55-4651-8ee4-f21307ad933d
DEVICE=p2p2
MASTER=bond1
SLAVE=yes
ONBOOT=yes
# cat ifcfg-bond1
DEVICE=bond1
BOOTPROTO=static
USERCTL=no
ONBOOT=yes
TYPE=Bond
BONDING_MASTER=yes
NAME=bond1
BONDING_OPTS="mode=4 miimon=100"
# cat ifcfg-bond1.1001
DEVICE=bond1.1001
PHYSDEV=bond1
TYPE=vlan
NAME=bond1.1001
BONDING_MASTER=yes
IPADDR=172.29.1.12
NETMASK=255.255.255.0
GATEWAY=172.29.1.1
DNS1=202.96.128.86
DEFROUTE=yes
#BROADCAST=10.104.101.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
BONDING_OPTS="mode=4 miimon=100"
#BONDING_OPTS="mode=802.3ad miimon=100 lacp_rate=fast"
VLAN=yes
VLAN_ID=1001
修改network的启动脚本:
在/etc/init.d/network 的start)的最后,加入:
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/bond0.20/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/bond1.1001/rp_filter
rp_filter是reverse path,会与FIB(转发信息表)比较,回程路由是否最优,如果不是就丢弃。对于多网卡,如果访问ip地址1,但实际走ip地址2的路由就会被丢弃。改成0值后,就不再校验。
在rc.local加只是启动有效,网络重启就无效了。
而且无法写在/etc/sysctl.conf 因为bond0.20这种写法,sysctl会认为.是一个子路径,转成bond0/20的,而找不到文件。