logo NodeSeekbeta

分享一下kvm虚拟宿主机的几种网桥配置方式(IPv4)

分享一下个人配置kvm虚拟机时使用过的几种网桥配置方式。独服的提供商有非常多,但是每家的网络配置情况可能都不太一样。上游播额外IP的网络配置也可能都不太一样,这里我列出了三种常见上游网络额外IP配置情况。以下内容为我个人使用经验,如果有误或者需要补充的欢迎指正。

单网段

上游路由器IP,宿主机IP和虚拟机IP在同一网段。如果上游只提供了一个网段,那么就是这种配置方式。

网络架构大致如图

1.jpg

最基本最简单的网络配置方式。

通常情况下我们的宿主机被上游放到一个单独的VLAN里面(图中显示为VlanX)。假设我们的上游给我们分配了123.123.123.0/24 的IP段可以使用。VLAN里面会有一个上游提供的路由器地址123.123.123.1 上游路由器大部分情况下会把网络数据包untagged成不含vlan的数据包。这样的话宿主机是感受不到vlan的存在。宿主机可以使用123.123.123.0/24里面除了路由器IP以外的任何一个可用IP。这里我们假设使用了123.123.123.2并绑定到网桥vmbr0上,vmbr0和物理网卡eth0直接连接。对于虚拟机vm0 vm1 vm2来说,虚拟机的网口会直接连接到vmbr0上面。此时vmbr0可以理解为一个完整的L2交换机。在这个架构下,宿主机和所有虚拟机共用同一网段。统一使用上游路由器123.123.123.1作为gateway。上游路由器会自动学习mac地址,也就是说什么样的MAC地址路由器都会被路由器接受并存入路由器的路由表里。

以Debian为例,该网络下宿主机的配置文件(/etc/network/interfaces)配置例子如下:

auto lo
iface lo inet loopback

iface eth0 inet manual

auto vmbr0
iface vmbr0 inet static
        address 123.123.123.2/24
        gateway 123.123.123.1
        bridge-ports eth0
        bridge-stp off
        bridge-fd 0

在虚拟机管理系统面板(SolusVM, Virtualizor, virtfusion, proxmox等等)里面,每个面板的配置逻辑都不太一样,但是都有共同的配置项。这些共同的配置项应该被如下配置:

  • 额外IP Gateway:123.123.123.1
  • 虚拟机可使用IP:123.123.123.3 到 123.123.123.254
  • 保留IP(虚拟机不可使用)
    • 123.123.123.0 网段地址
    • 123.123.123.1 上游路由器(gateway)地址
    • 123.123.123.2 宿主机地址
    • 123.123.123.255 网段广播地址

如果面板设置正确,在虚拟机内,面板应该将网络自动配置成如下:

假设虚拟机运行Debian

auto lo
iface lo inet loopback

iface eth0 inet static
        address 123.123.123.3/24
        gateway 123.123.123.1

额外IP与宿主机IP不同段,共用同一上游路由器(静态MAC地址路由)

常见使用厂商:OVH,Hetzner

在静态MAC地址路由下,虚拟机网卡的IP的网段不一定需要和路由器的IP的网段一样。

网络架构大致如图

2.jpg

和第一种网络配置非常相似。宿主机和上游使用同一网段的IP。但是最大的区别就是上游给我们宿主机分配了和宿主机IP不一样网段的额外IP地址。图中额外ip为66.66.66.0/24。其中vm0被分配到了66.66.66.1,vm1被分配到了66.66.66.2,vm2被分配到了66.66.66.3.

这个网络架构的实现方法为,上游路由器内部有一个固定的IP地址对应MAC地址表(比如OVH里叫做Virtual MAC),同时路由器关闭了MAC地址学习。路由器只会处理从表里的MAC地址发来对应源IP的数据包,或者把IP数据包发送给对应的IP地址的MAC地址上。这就要求虚拟机的IP地址必须和虚拟机的网卡地址进行一对一的绑定。

在这个网络架构下,宿主机配置和第一种网络架构配置一样。

以Debian为例,该网络下宿主机的配置文件(/etc/network/interfaces)配置例子如下:

auto lo
iface lo inet loopback

iface eth0 inet manual

auto vmbr0
iface vmbr0 inet static
        address 123.123.123.2/24
        gateway 123.123.123.1
        bridge-ports eth0
        bridge-stp off
        bridge-fd 0

在虚拟机管理系统面板(SolusVM, Virtualizor, virtfusion, proxmox等等)里面,每个额外IP对应的MAC地址都需要单独配置:

  • 额外IP Gateway:123.123.123.1
  • 虚拟机可使用IP:
    • 66.66.66.1
      • 绑定虚拟机vm0网卡MAC地址
    • 66.66.66.2
      • 绑定虚拟机vm1网卡MAC地址
    • 66.66.66.3
      • 绑定虚拟机vm2网卡MAC地址

(如果你有一大堆ip地址,没错,你要一个个手动绑定)

如果面板设置正确,在虚拟机内,面板应该将网络自动配置成如下:

假设虚拟机vm0运行Debian,虚拟机内网卡名为eth0

auto lo
iface lo inet loopback

iface eth0 inet static
        address 66.66.66.1/24
        gateway 123.123.123.1
        hwaddress ether vm0的eth0网卡MAC地址 #有可能缺省,一般面板会自动配置
        post-up route add 123.123.123.1 dev eth0  #告诉系统123.123.123.1是在eth0接口后面
        post-up route add default gw 123.123.123.1 dev eth0 #设置默认路由为123.123.123.1

其中我们需要特别告诉系统如果想找123.123.123.1就去eth0. 同时也要把默认路由设置成123.123.123.1。一般情况下面板会自动帮我们配置的。

额外IP与宿主机IP不同段,不共用路由器(间接路由)

常见使用厂商及方法:斯巴达,宿主机播BGP,隧道

和第二种类似。但是上游路由器没有配置静态MAC地址路由,取而代之的是把额外ip整段直接路由到宿主机IP上。剩下来的静态MAC地址路由则是交给了我们宿主机去做。

网络架构大致如图

3.jpg

这次,上游网络会将所有的和66.66.66.0/24有关的数据包都路由到123.123.123.2 在linux里类似的路由命令相当于

route add 66.66.66.0/24 via 123.123.123.2 dev 宿主机连接的网口 #上游网络里配置的,我们不用配置

宿主机的IP则是要把123.123.123.2 IP直接绑定到网卡eth0上。vmbr0不和eth0网口直接相连。取而代之的是我们在网卡和vmbr0之间手动配置静态路由。将整个66.66.66.0/24继续路由到vmbr0上。在linux里类似的命令相当于

ip route add 66.66.66.0/24 dev vmbr0

以Debian为例,该网络下宿主机的配置文件(/etc/network/interfaces)配置例子如下:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
		address 123.123.123.2/24
        gateway 123.123.123.1
        
auto vmbr0
iface vmbr0 inet static
		#dummy ip,我们实际上不使用这个IP。但是Linux bridge可能需要至少一个ip去启动
        address 10.0.0.1 #dummy ip,不一定是10.0.0.1
        bridge-ports none
        bridge-stp off
        bridge-fd 0
	    post-up route add 66.66.66.0/24 dev vmbr0

在虚拟机管理系统面板(SolusVM, Virtualizor, virtfusion, proxmox等等)里面:

  • 额外IP Gateway:123.123.123.2 (注意是2不是1)
  • 虚拟机可使用IP:66.66.66.1 到 66.66.66.254
  • 虚拟机IP网段:分配的网段,或者分配的网段长度减去2(起始IP得改)

虚拟机网段长度减去2是一个可选配置方法,理论上这样的话网段ip和广播ip都能拿来用。可以最大化利用IP地址段(比如上面的66.66.66.0和66.66.66.255都可以拿来用)。缺点就是可能有些安全性问题同时邻居外部网段虚拟机会无法访问(被当作同一内网了)。

如果面板设置正确,在虚拟机内,面板应该将网络自动配置成如下:

假设虚拟机vm0运行Debian,虚拟机内网卡名为eth0

auto lo
iface lo inet loopback

iface eth0 inet static
        address 66.66.66.1/24
        gateway 123.123.123.2
        post-up route add 123.123.123.2 dev eth0  #告诉系统123.123.123.1是在eth0接口后面
        post-up route add default gw 123.123.123.2 dev eth0 #设置默认路由为123.123.123.1
12
  • 好帖

  • 楼主,vmware 虚拟的Kvm小鸡,debian系统用一段期间就会掉网,有没有解决的办法呢

  • @bigbabyer #2 信息太少了,可能没办法推测出来原因。

  • @anshi #3 因为我和朋友也没找出啥原因,感觉描述出便秘的感觉了,就是vm虚拟出kvm的机器,正常使用一段时间,几个小时,或者一天多,就突然断网失联了,但是只有网络掉了,虚拟机并没有关机。就很奇怪,之前的情况就是经常cpu爆满崩溃。

  • @bigbabyer #4 看看是不是有其他机器占了IP。或者有没有防火墙之类的新加规则破坏了原本的网络。

  • @anshi #5 好的,感谢! xhj028 我们先自查下,还有个情况就是rdp也会导致虚拟机崩溃和失联

  • 好贴 oneman开小鸡必读 xhj003

  • 附属IP与宿主机IP不同段,不共用路由器(间接路由),附属IP绑定路由在主IP上,没有单独网关。
    这个好多商家的站群服务器都是这种网络架构,可以减少路由压力。

  • 学习了 xhj003

12

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有15768位seeker

🎉欢迎新用户🎉