Qemu KVM 虚拟机通过虚拟网桥实现桥接和NAT的实验

系统概况:

  • host 和 guest 都是用的 Ubuntu Server 16.04系统。
  • 我的 host 机上有三块网卡2块有线网卡(接口 enp1s0 和 enp3s0)和1个无线网卡(接口 wls2s0)。
  • 我的 host 机通过无线网卡连在一个路由器上,并因此能够连接到互联网,所在的网段是192.168.3.0\24,ip 固定为192.168.3.5。
  • 其他两块有线网卡没有连接。

实验0:

效果:

guest 与 guest、guest 与 host 之间可以互相 ping 通;guest 不能访问 host 所在路由器网段(192.158.3.0\24)。

方案:

在 host 中搭建了一个虚拟网桥,将 qemu-bridge-helper 工具在启动虚拟机时创建的虚拟网络接口 tap0[1,2…] 与 host 桥接在一起,我手动配置了他们的网段是192.168.4.0\24。

步骤:

1.配置 host 的 /etc/network/interfaces ,在其中加入以下内容,然后通过 /etc/init.d/networking restart 重启服务来创建网桥。

2.将刚建的虚拟网桥名称加入到 /etc/qemu/bridge.conf 或者 /usr/local/etc/qemu/bridge.conf,比如这里:

3.启动 Qemu 虚拟机,这里的 -net bridge,br=br0 指定了网桥模式,qemu 会用 qemu-bridge-helper 创建 tap0 虚拟网络接口桥接入br0 的,我的启动命令如下:

4.通过 vnc 连入 guest,配置其 /etc/network/interfaces 文件,然后通过 /etc/init.d/networking restart 重启服务。

测试

实验1:

效果:

在实验0的基础上,实现 guest 通过无线接口的网络连接互联网,相当于 host 做了一个 NAT。

步骤:

  1. 以实验0为基础。
  2. 开启路由转发:编辑 /etc/sysctl.conf 配置文件,将 net.ipv4.ip_forward = 0 修改为net.ipv4.ip_forward = 1, 重启 host。
  3. 利用 iptables 搭建 MASQUERADE 模式的 NAT,执行下面两条命令的一条即可,本实验中效果相同:

4.通过 vnc 连入 guest,配置其 /etc/network/interfaces 文件,然后通过 /etc/init.d/networking restart 重启服务。配置的方法只是在实验0的基础上加了一句,来配置 dns 服务器:

测试

[Tap networking with QEMU] https://wiki.archlinux.org/index.php/QEMU#Tap_networking_with_QEMU

[qemu用tap方式启动vm的网络试验(ip route)] http://haoningabc.iteye.com/blog/2324350

[Network bridge] https://wiki.archlinux.org/index.php/Network_bridge

[qemu-bridge-helper Features] http://wiki.qemu.org/Features/HelperNetworking

[QEMU支持的网络模式] http://smilejay.com/2012/08/qemu-kvm-networking-mode/

[使用网桥模式] http://smilejay.com/2012/08/kvm-bridge-networking/

[KvmWithBridge] https://wiki.ubuntu.com/KvmWithBridge

发表评论

电子邮件地址不会被公开。 必填项已用*标注