为 QEMU 配置网桥上网

Catalogue
  1. 1. 工具安装
  2. 2. 配置网桥
  3. 3. 创建 TAP
  4. 4. 启动参数
  5. 5. Host 转发设置
  6. 6. VM 内设置
  7. 7. 参考

工具安装

1
2
apt-get install bridge-utils        # 虚拟网桥工具
apt-get install uml-utilities # UML(User-mode linux)工具

配置网桥

1
2
3
4
5
6
7
8
9
10
11
ifconfig <你的网卡名称(能上网的那张)> down    # 首先关闭宿主机网卡接口
brctl addbr br0 # 添加一座名为 br0 的网桥
brctl addif br0 <你的网卡名称> # 在 br0 中添加一个接口
brctl stp br0 off # 如果只有一个网桥,则关闭生成树协议
brctl setfd br0 1 # 设置 br0 的转发延迟
brctl sethello br0 1 # 设置 br0 的 hello 时间
ifconfig br0 0.0.0.0 promisc up # 启用 br0 接口
ifconfig <你的网卡名称> 0.0.0.0 promisc up # 启用网卡接口
dhclient br0 # 从 dhcp 服务器获得 br0 的 IP 地址
brctl show br0 # 查看虚拟网桥列表
brctl showstp br0 # 查看 br0 的各接口信息

创建 TAP

1
2
3
4
tunctl -t tap0 -u <YOUR_ACCOUNT>              # 创建一个 tap0 接口,只允许 XXX 用户访问
brctl addif br0 tap0 # 在虚拟网桥中增加一个 tap0 接口
ifconfig tap0 0.0.0.0 promisc up # 启用 tap0 接口
brctl showstp br0 # 显示 br0 的各个接口

启动参数

1
2
3
sudo qemu-system-mipsel -M malta -kernel vmlinux-3.2.0-4-4kc-malta -hda debian_squeeze_mipsel_standard.qcow2 -append "root=/dev/sda1 console=tty0" -nographic 

-net nic -net tap,ifname=tap0,script=no,downscript=no

-net nic 表示希望 QEMU 在虚拟机中创建一张虚拟网卡,-net tap 表示连接类型为 TAP,并且指定了网卡接口名称(就是刚才创建的 tap0,相当于把虚拟机接入网桥)。

script 和 downscript 两个选项的作用是告诉 QEMU 在启动系统的时候是否调用脚本自动配置网络环境,如果这两个选项为空,那么 QEMU 启动和退出时会自动选择第一个不存在的 tap 接口(通常是 tap0)为参数,调用脚本 /etc/qemu-ifup 和 /etc/qemu-ifdown。由于我们已经配置完毕,所以这两个参数设置为 no 即可。

Host 转发设置

1
echo 1 > /proc/sys/net/ipv4/ip_forward

VM 内设置

假设本机IP为 192.168.142.186,br0 的IP为 172.16.66.128

1
2
3
ifconfig eth0 up
ifconfig eth0 192.168.142.187 netmask 255.255.240.0 # 为网卡设置IP
route add default gw 192.168.142.186 # 增加路由表

测试一下

1
2
3
4
5
6
7
8
9
10
/ # ping -c 4 114.114.114.114
PING 114.114.114.114 (114.114.114.114): 56 data bytes
64 bytes from 114.114.114.114: seq=0 ttl=128 time=31.034 ms
64 bytes from 114.114.114.114: seq=1 ttl=128 time=24.453 ms
64 bytes from 114.114.114.114: seq=2 ttl=128 time=20.257 ms
64 bytes from 114.114.114.114: seq=3 ttl=128 time=24.996 ms

--- 114.114.114.114 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 20.257/25.185/31.034 ms

参考