为一个网卡配置一个vlan比较容易,设置两个vlan就麻烦了。
涉及路由过滤,不修改内核可能会不通。

举一个更复杂的例子

有2个网卡4个网口,命名分别为:p1p1 p1p2 p2p1 p2p2
p1p1和p2p1做bond0
p1p2和p2p2做bond1
bond0上有vlan 20 1101 1102
bond1上有vlan 1001
配置如下:

bond0:

  1. # cat ifcfg-p1p1
  2. TYPE=Ethernet
  3. PROXY_METHOD=none
  4. BROWSER_ONLY=no
  5. BOOTPROTO=none
  6. NAME=p1p1
  7. UUID=b796742a-aa84-488b-b9c9-74ca9e0e4ebf
  8. DEVICE=p1p1
  9. MASTER=bond0
  10. SLAVE=yes
  11. ONBOOT=yes
  12. [root@gerrit-mirror network-scripts]# cat ifcfg-p2p1
  13. TYPE=Ethernet
  14. PROXY_METHOD=none
  15. BROWSER_ONLY=no
  16. BOOTPROTO=none
  17. NAME=p2p1
  18. UUID=6e923643-967b-46bc-bc36-7b894354a1fe
  19. DEVICE=p2p1
  20. MASTER=bond0
  21. SLAVE=yes
  22. ONBOOT=yes
  23. # cat ifcfg-bond0
  24. DEVICE=bond0
  25. BOOTPROTO=static
  26. USERCTL=no
  27. ONBOOT=yes
  28. TYPE=Bond
  29. BONDING_MASTER=yes
  30. NAME=bond0
  31. BONDING_OPTS="mode=4 miimon=100"
  32. # cat ifcfg-bond0.20
  33. DEVICE=bond0.20
  34. TYPE=vlan
  35. NAME=bond0.20
  36. IPADDR=192.168.32.12
  37. NETMASK=255.255.255.0
  38. DNS1=202.96.128.86
  39. #BROADCAST=10.104.101.255
  40. ONBOOT=yes
  41. REORDER_HDR=yes
  42. GVRP=no
  43. MVRP=no
  44. BOOTPROTO=none
  45. USERCTL=no
  46. VLAN=yes
  47. VLAN_ID=20
  48. # cat ifcfg-bond0.1101
  49. DEVICE=bond0.1101
  50. TYPE=vlan
  51. NAME=bond0.1101
  52. IPADDR=192.168.51.12
  53. NETMASK=255.255.255.0
  54. DNS1=202.96.128.86
  55. ONBOOT=yes
  56. REORDER_HDR=yes
  57. GVRP=no
  58. MVRP=no
  59. BOOTPROTO=none
  60. USERCTL=no
  61. VLAN=yes
  62. VLAN_ID=1101
  63. # cat ifcfg-bond0.1102
  64. DEVICE=bond0.1102
  65. TYPE=vlan
  66. NAME=bond0.1102
  67. IPADDR=192.168.52.12
  68. NETMASK=255.255.255.0
  69. DNS1=202.96.128.86
  70. ONBOOT=yes
  71. REORDER_HDR=yes
  72. GVRP=no
  73. MVRP=no
  74. BOOTPROTO=none
  75. USERCTL=no
  76. VLAN=yes
  77. VLAN_ID=1102

bond1

  1. # cat ifcfg-p1p2
  2. TYPE=Ethernet
  3. PROXY_METHOD=none
  4. BROWSER_ONLY=no
  5. BOOTPROTO=none
  6. NAME=p1p2
  7. UUID=573ae805-c524-4fe8-90ad-a62bcf811c75
  8. DEVICE=p1p2
  9. ONBOOT=yes
  10. MASTER=bond1
  11. SLAVE=yes
  12. # cat ifcfg-p2p2
  13. TYPE=Ethernet
  14. PROXY_METHOD=none
  15. BROWSER_ONLY=no
  16. BOOTPROTO=none
  17. NAME=p2p2
  18. UUID=1050382b-5e55-4651-8ee4-f21307ad933d
  19. DEVICE=p2p2
  20. MASTER=bond1
  21. SLAVE=yes
  22. ONBOOT=yes
  23. # cat ifcfg-bond1
  24. DEVICE=bond1
  25. BOOTPROTO=static
  26. USERCTL=no
  27. ONBOOT=yes
  28. TYPE=Bond
  29. BONDING_MASTER=yes
  30. NAME=bond1
  31. BONDING_OPTS="mode=4 miimon=100"
  32. # cat ifcfg-bond1.1001
  33. DEVICE=bond1.1001
  34. PHYSDEV=bond1
  35. TYPE=vlan
  36. NAME=bond1.1001
  37. BONDING_MASTER=yes
  38. IPADDR=172.29.1.12
  39. NETMASK=255.255.255.0
  40. GATEWAY=172.29.1.1
  41. DNS1=202.96.128.86
  42. DEFROUTE=yes
  43. #BROADCAST=10.104.101.255
  44. ONBOOT=yes
  45. BOOTPROTO=none
  46. USERCTL=no
  47. BONDING_OPTS="mode=4 miimon=100"
  48. #BONDING_OPTS="mode=802.3ad miimon=100 lacp_rate=fast"
  49. VLAN=yes
  50. 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的,而找不到文件。