多个不同的VLAN中继到KVM来宾(Linux)

多个不同的VLAN中继到KVM来宾(Linux),第1张

概述我遇到了一些建筑挑战的障碍.我有一台运行KVM的服务器 – 它将包含许多客户,一些运行虚拟化防火墙和其他,只是普通的Web服务器. > Web服务器需要一个未标记的VLAN接口 >防火墙需要标记的VLAN中继 现在通常情况下,这很简单,只需添加一个带有eth0的桥接器,在桥接器上添加几个VLAN(vmbr0.1等) – 然后为每个guest虚拟机(或其多个)分配一个带有未标记VLAN的接口. fi 我遇到了一些建筑挑战的障碍.我有一台运行KVM的服务器 – 它将包含许多客户,一些运行虚拟化防火墙和其他,只是普通的Web服务器.

> Web服务器需要一个未标记的VLAN接口
>防火墙需要标记的VLAN中继

现在通常情况下,这很简单,只需添加一个带有eth0的桥接器,在桥接器上添加几个VLAN(vmbr0.1等) – 然后为每个guest虚拟机(或其多个)分配一个带有未标记VLAN的接口.

firewall1 (vlan 1,2,3,4)switch ===== eth0  vmbr0     firewall2 (vlan 1,5,6)                   (eth0)    server1 (vlan 7)                             server2 (vlan 8)     vlan trunk (1,4,6,7,8)

现在,如果只有一些接口需要传递给guest虚拟机,这样可以正常工作.但是当您需要将500个VLAN放入防火墙时会发生什么.它不切实际.

所以我无法弄清楚如何创建一个数字中继(具有公共VLAN和不同的VLAN),并将其分配给访客.

到目前为止,我发现的最接近的解决方案是在主桥上创建VLAN,然后对于服务器,只需从中分配一个VLAN.

然后对于防火墙,为每个防火墙创建一个桥接,只需在其中包含guest虚拟机的tap接口,然后为该相应的网桥创建未标记的vlan接口,并将其添加到主vmbr0网桥.

唯一的问题是退出未标记界面的流量当然是未标记的.

是否可以标记退出接口的流量?

否则,如何实现与KVM来宾不同的中继,可能有共同的VLAN和不同的VLAN(但从不是所有的vlan) – 并且能够分配单个无标记的vlan接口

解决方法 一个冗长的解决方案……

所以我一直在玩弄不同的概念,我想我已经做了一个可行的解决方案.基本上,eth0属于主桥干线(bt).然后为每个防火墙VM都有自己的桥接器.

brIDge name     brIDge ID               STP enabled     interfacesbt              8000.002618895a72       no              eth0bt-fw1          8000.000000000000       no              tap100i0bt-fw2          8000.000000000000       no              tap101i0

此时,来自防火墙VM的标记流量将进入其自己的桥接以进入流量.

然后,我为需要标记流量的每个接口创建VLAN,并在主桥上为未标记的流量创建相应的VLAN.

例如. VLAN 1,4000-4005

bt-fw1.1       | 1  | bt-fw1bt-fw1.4000    | 4000  | bt-fw1bt-fw1.4001    | 4001  | bt-fw1bt-fw1.4002    | 4002  | bt-fw1bt-fw1.4003    | 4003  | bt-fw1bt-fw1.4004    | 4004  | bt-fw1bt-fw1.4005    | 4005  | bt-fw1bt-fw2.1       | 1  | bt-fw2bt-fw2.4000    | 4000  | bt-fw2bt-fw2.4001    | 4001  | bt-fw2bt-fw2.4002    | 4002  | bt-fw2bt-fw2.4003    | 4003  | bt-fw2bt-fw2.4004    | 4004  | bt-fw2bt-fw2.4005    | 4005  | bt-fw2bt.1           | 1  | btbt.4000        | 4000  | btbt.4001        | 4001  | btbt.4002        | 4002  | btbt.4003        | 4003  | btbt.4004        | 4004  | btbt.4005        | 4005  | bt

然后,对于每个VLAN,创建一个网桥,该网桥组合来自每个接口的所有相应VLAN,以允许主桥和VM网桥之间的无标记通信.

bt.v1                   8000.2a8c73ad057d       no      bt-fw1.1                                                        bt-fw2.1                                                        bt.1bt.v4000                8000.2a8c73ad057d       no      bt-fw1.4000                                                        bt-fw2.4000                                                        bt.4000bt.v4001                8000.2a8c73ad057d       no      bt-fw1.4001                                                        bt-fw2.4001                                                        bt.4001bt.v4002                8000.2a8c73ad057d       no      bt-fw1.4002                                                        bt-fw2.4002                                                        bt.4002bt.v4003                8000.2a8c73ad057d       no      bt-fw1.4003                                                        bt-fw2.4003                                                        bt.4003bt.v4004                8000.2a8c73ad057d       no      bt-fw1.4004                                                        bt-fw2.4004                                                        bt.4004bt.v4005                8000.2a8c73ad057d       no      bt-fw1.4005                                                        bt-fw2.4005                                                        bt.4005

现在,这允许到防火墙VM的中继接口,只有我想要的VLAN.

任何仅需要单个未标记VLAN的未来guest虚拟机,只能添加到相应的bt.X网桥.

添加主机IP接口就像将IP添加到相应的VLAN网桥一样简单

例如.

ip addr add 192.168.100.1/24 dev bt.v4005

帮助脚本

由于我的/ etc / network / interfaces文件很快就会变得庞大,我编写了一个小脚本,允许最小化配置 – 但是具有相同的期望最终结果.

在它包含的/ etc / network / interfaces文件中

# brIDge bt-c0-fw1 vlan 1 4000-4005 interfaces tap100i0# brIDge bt-c0-fw2 vlan 1 4000-4005 interfaces tap101i0# brIDge bt vlan 1 4000-4005 interfaces eth0# brIDge-vlan bt vlan 1 4000-4005 interfaces bt-fw1 bt-fw2 btauto eth0iface eth0 inet manual  post-up /scripts/build-brIDges.sh || /bin/true

然后在post-up脚本中,/ scripts / build -brIDges.sh

#!/bin/bashCONfig="/etc/network/interfaces"defineRS="vlan|interfaces"DEBUG=0# Tear down all interfacesmodprobe -r 8021qmodprobe 8021qbrctl show | awk 'NR>1{print }' | while read BRIDGE; do  ifconfig "$BRIDGE" down  brctl delbr "$BRIDGE"donefunction run(){  if [ $DEBUG -eq 1 ]; then    echo "$@"  else    eval "$@"  fi}function get_vars(){  DATA=( $(echo "" | grep -Eoh ".+?" | sed -E "s/^ //g;s/($defineRS).+//g") )  for VAL in ${DATA[@]}; do    echo $VAL | grep -qE "[0-9]+-[0-9]+"    if [ $? -eq 0 ]; then      LOWER=$(echo $VAL | cut -f1 -d"-")      UPPER=$(echo $VAL | cut -f2 -d"-")      for i in $(seq $LOWER $UPPER); do        echo $i      done    else      echo $VAL    fi  done}# Build brIDgeswhile read liNE; do  BRIDGE=$(get_vars brIDge "$liNE")  if [[ ! "$BRIDGE" == "" ]]; then    run brctl addbr $BRIDGE    run ifconfig $BRIDGE up    for INTERFACE in $(get_vars interfaces "$liNE"); do      ifconfig $INTERFACE >/dev/null 2>&1      if [ $? -eq 0 ]; then        run brctl addif $BRIDGE $INTERFACE      fi    done    run ifconfig $BRIDGE up    for VLAN in $(get_vars vlan "$liNE"); do      run vconfig add $BRIDGE $VLAN 2>&1 | grep -vE "(VLAN 1 does not work|consIDer another number)"      run ifconfig $BRIDGE.$VLAN up    done  fidone < <(grep -E "^# brIDge " $CONfig)# Build vlan brIDgeswhile read liNE; do  BRIDGE=$(get_vars "brIDge-vlan" "$liNE")  for VLAN in $(get_vars " vlan" "$liNE"); do    run brctl addbr $BRIDGE.v$VLAN    run ifconfig $BRIDGE.v$VLAN up    for INTERFACE in $(get_vars interfaces "$liNE"); do      ifconfig $INTERFACE.$VLAN >/dev/null 2>&1      if [ $? -eq 0 ]; then        run brctl addif $BRIDGE.v$VLAN $INTERFACE.$VLAN      fi    done  donedone < <(grep -E "^# brIDge-vlan " $CONfig)exit 0

我希望这有助于其他人,我花了DAYS阅读和测试,这似乎是最优雅,易于管理的解决方案.

这里有一些很好的阅读http://blog.davidvassallo.me/2012/05/05/kvm-brctl-in-linux-bringing-vlans-to-the-guests/

总结

以上是内存溢出为你收集整理的多个不同的VLAN中继到KVM来宾(Linux)全部内容,希望文章能够帮你解决多个不同的VLAN中继到KVM来宾(Linux)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1038860.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存