1. 配置 qemu-ifup(主机):
$ cat /etc/qemu-ifup
#! /bin/bash
ifconfig $1 172.20.0.1
#/sbin/brctl addbr br0
#/sbin/brctl addif br0 $1
#ifconfig br0 up
#!/bin/bash
brctl delif br0 $1
ifconfig $1 down
2. 配置 kernel:
│ Symbol: TUN [=m] │
│ Type : tristate │
│ Prompt: Universal TUN/TAP device driver support │
│ Location: │
│ -> Device Drivers │
│ -> Network device support (NETDEVICES [=y]) │
│ (1) -> Network core driver support (NET_CORE [=y]) │
│ Defined at drivers/net/Kconfig:263 │
│ Depends on: NETDEVICES [=y] && NET_CORE [=y] && INET [=y] │
│ Selects: CRC32 [=y]
3. 修改rcS:, 添加如下的代码:
modprobe tun
modprobe nfsd
ifconfig eth0 172.20.0.100
route add default gw 172.20.0.1
2. 启动 qemu:
$ sudo qemu-system-arm -M vexpress-a9 -kernel ./linux-3.2/arch/arm/boot/zImage -initrd ../initramfs -serial stdio -append "console=ttyAMA0 root=/dev/ram rdinit=/sbin/init" -net nic,vlan=0 -net tap,vlan=0
3.配置 qemu的网络:
~ # ifconfig eth0 172.20.0.10 netmask 255.255.0.0
smsc911x smsc911x: eth0: SMSC911x/921x identified at 0x888a0000, IRQ: 47
~ # route add default gw 172.20.0.1
~ # ping -c 3 192.168.1.100
PING 192.168.1.100 (192.168.1.100): 56 data bytes
64 bytes from 192.168.1.100: seq=0 ttl=64 time=32.528 ms
64 bytes from 192.168.1.100: seq=1 ttl=64 time=24.857 ms
64 bytes from 192.168.1.100: seq=2 ttl=64 time=2.975 ms
--- 192.168.1.100 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 2.975/20.120/32.528 ms
主机和虚拟机之间可以相互ping通了。
3.虚拟机访问外网:
网上资料说做如下的配置就可以实现:
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo iptables -t nat -A POSTROUTING -o eth0 -s 172.20.0.0/24 -j MASQUERADE
但是,我试了,并没有效果。 很奇怪。。