QEMU使用网桥模式
配置网桥
- 在host上查看可用网络资源
ifconfig
有enp0s31f6、enp3s0u2c4i2、lo 3个网络资源。
lo用于网络自回环的,不管
enp0s31f6是连接公司网的,但是公司linux无法上网,不管
enp3s0u2c4i2连接着我的手机,可以上网,因此使用该eth配置网桥模式。
- 建立网桥
sudo su
# 安装网桥工具
apt-get install bridge-utils
brctl addbr br0
brctl addif br0 enp3s0u2c4i2
brctl stp br0 on
ifconfig enp3s0u2c4i2 0
dhclient br0
route
记住这个子网掩码和网关,需要对guest进行同样的配置。
- 以特定选项启动虚拟机
# 网络选项为-net nic -net tap,ifname=tap1,即生成一个给guest使用的TAP,连接到br0上
# 其实应该设置qemu-ifup和qemu-ifdown脚本,但是考虑到会默认使用/etc下的这两个脚本,这里不特殊设置
qemu-system-x86_64 -m 2048 -smp 4 -hda kvm-study.img -enable-kvm -net nic -net tap,ifname=tap1
-
编辑guest网络配置
如果在guest中使用ifconfig发现guest已经和host处于同意IP段,则省略以下配置,应该可以立即互相ping通
因为我使用的guest是ubuntu18.04 server,网络设置在/etc/netplan/50-cloud-init.yaml文件中,因此在guest中编辑该文件,更早版本的linux可能在/etc/network/interfaces文件中,一个一个来。
4.1 如果为ubuntu18.04或其他使用netplan作为网络配置的系统,则
其中ens3可以通过在guest中执行ifconfig
指令获取除lo之外的网络资源名称。
addressses中的28为子网掩码,即32bit的子网掩码前28bit为1,正好为255.255.255.240,与host的子网掩码相同。因此需要设置为28。
addresses中的172.20.10.14为guest的ip地址,这里可以设置的值从172.20.10.1-172.20.10.15,但是不能设置为.3,因为host为.3。
gateway4与host相同。
其它与图示相同即可。
4.2 如果使用的是ifupdown工具配置的网络,那么需要修改/etc/network/interfaces
sudo vim /etc/network/interfaces
然后将内容修改为以下形式
注意address就是guest的IP
netmask为子网掩码
dns-nameservers是dns
保存退出后无需执行5中的netplan apply
- 保存退出后在guest中执行以下命令
sudo netplan apply
sudo systemctl restart network-online.target
之后就可以用ifconfig
看到guest的ip和host同域了。互相之间ping也ping得通。
host和guest之间的文件传输
- host向guest传送文件
scp 待传输文件路径 username@guest的ip地址:需要放置到guest的位置
2. host从guest下载文件
```
scp username@guest的ip地址:需要下载的文件在guest中的路径 host中要下载到的位置