qemu网络配置

本文详细介绍了如何在QEMU环境中配置宿主机网络,包括lo环回接口、tun/tap设备、虚拟机网络接口,以及如何实现宿主机与虚拟机之间的网络通信、文件传输和外网访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、qemu宿主机网络配置

[root@localhost qemu-install-centos7-arm64]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:c2:de:11 brd ff:ff:ff:ff:ff:ff
[root@localhost qemu-install-centos7-arm64]# ip tuntap add dev tap0 mode tap
[root@localhost qemu-install-centos7-arm64]# ip link set dev tap0 up
[root@localhost qemu-install-centos7-arm64]# ip address add dev tap0 192.168.2.128/24
[root@localhost qemu-install-centos7-arm64]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:c2:de:11 brd ff:ff:ff:ff:ff:ff
3: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether 5e:fc:91:0b:d3:f7 brd ff:ff:ff:ff:ff:ff
[root@localhost qemu-install-centos7-arm64]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:c2:de:11 brd ff:ff:ff:ff:ff:ff
    inet 192.168.120.12/24 brd 192.168.120.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 2408:820c:8ff8:1820:9880:c2f4:3c9d:9f3b/64 scope global noprefixroute dynamic 
       valid_lft 86399sec preferred_lft 14399sec
    inet6 fe80::3072:8360:61bb:d353/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::ec5c:1830:1047:15b8/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 5e:fc:91:0b:d3:f7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.128/24 scope global tap0
       valid_lft forever preferred_lft forever


二、启动qemu虚拟机

qemu-system-aarch64 \
-m 1024 \
-cpu cortex-a57 \
-smp 2 \
-M virt \
-bios QEMU_EFI.fd \
-nographic \
-device virtio-scsi-device \
-drive if=none,file=CentOS-7-aarch64-Everything-2009.qcow2,id=hd0 \
-device virtio-blk-device,drive=hd0 \
-net nic \
-net tap,ifname=tap0,script=no,downscript=no

增加了参数  -net nic  -net tap,ifname=tap0,script=no,downscript=no

三、qemu虚拟机网络配置

[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]# ip addr add 192.168.2.129/24 dev eth0
[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.129/24 scope global eth0
       valid_lft forever preferred_lft forever
[root@localhost ~]# ip link set eth0 up

四、qemu虚拟机ping宿主机
[root@localhost ~]# ping 192.168.2.128
PING 192.168.2.128 (192.168.2.128) 56(84) bytes of data.
64 bytes from 192.168.2.128: icmp_seq=1 ttl=64 time=19.2 ms
64 bytes from 192.168.2.128: icmp_seq=2 ttl=64 time=1.81 ms
64 bytes from 192.168.2.128: icmp_seq=3 ttl=64 time=4.30 ms

--- 192.168.2.128 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2029ms
rtt min/avg/max/mdev = 1.810/8.455/19.249/7.700 ms

五、qemu宿主机ping虚拟机

[root@localhost qemu-install-centos7-arm64]# ping 192.168.2.129
PING 192.168.2.129 (192.168.2.129) 56(84) bytes of data.
64 bytes from 192.168.2.129: icmp_seq=1 ttl=64 time=6.76 ms
64 bytes from 192.168.2.129: icmp_seq=2 ttl=64 time=7.99 ms
64 bytes from 192.168.2.129: icmp_seq=3 ttl=64 time=5.74 ms
64 bytes from 192.168.2.129: icmp_seq=4 ttl=64 time=3.18 ms
^C
--- 192.168.2.129 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3024ms
rtt min/avg/max/mdev = 3.182/5.920/7.994/1.772 ms

六、qemu宿主机复制文件到虚拟机

宿主机:

[root@localhost qemu-install-centos7-arm64]# scp cmd.help root@192.168.2.129:/root
The authenticity of host '192.168.2.129 (192.168.2.129)' can't be established.
ECDSA key fingerprint is SHA256:6rg+dJO+cPlEHRcBMduw6bpc+ouN2VZHmPIMPam0G3g.
ECDSA key fingerprint is MD5:71:63:ae:bf:04:27:3a:af:82:af:41:62:d4:e2:94:ef.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.2.129' (ECDSA) to the list of known hosts.
root@192.168.2.129's password: 
cmd.help                                                                                                                                                                   100%  601    35.1KB/s   00:00    
 

虚拟机:

[root@localhost ~]# ll
total 8
-rw-------. 1 root root 1296 Jul 31 13:02 anaconda-ks.cfg
-rw-r--r--. 1 root root  601 Aug  5 15:05 cmd.help

七、qemu虚拟机连接外网

1、qemu宿主机

(1)开启IP转发,通常是开启的
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

(2)添加静态路由,通常不需手动添加
[root@localhost ~]# ip route list
default via 192.168.120.254 dev ens33 proto static metric 100 
192.168.2.0/24 dev tap0 proto kernel scope link src 192.168.2.128 
192.168.120.0/24 dev ens33 proto kernel scope link src 192.168.120.12 metric 100

(3)设置iptables规则
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o ens33 -j MASQUERADE
[root@localhost ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
PREROUTING_direct  all  --  0.0.0.0/0            0.0.0.0/0           
PREROUTING_ZONES  all  --  0.0.0.0/0            0.0.0.0/0           

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
OUTPUT_direct  all  --  0.0.0.0/0            0.0.0.0/0           

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
POSTROUTING_direct  all  --  0.0.0.0/0            0.0.0.0/0           
POSTROUTING_ZONES  all  --  0.0.0.0/0            0.0.0.0/0           
MASQUERADE  all  --  192.168.2.0/24       0.0.0.0/0 


2、qemu虚拟机

(1)添加默认网关
[root@localhost ~]# ip route add default via 192.168.2.128
[root@localhost ~]# ip route list
default via 192.168.2.128 dev eth0 
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.129
[root@localhost ~]# ping 112.80.248.76
PING 112.80.248.76 (112.80.248.76) 56(84) bytes of data.
64 bytes from 112.80.248.76: icmp_seq=1 ttl=55 time=10.0 ms
64 bytes from 112.80.248.76: icmp_seq=2 ttl=55 time=10.2 ms
64 bytes from 112.80.248.76: icmp_seq=3 ttl=55 time=12.5 ms

--- 112.80.248.76 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2031ms
rtt min/avg/max/mdev = 10.090/10.960/12.504/1.100 ms

(外网可ping通,112.80.248.76为baidu的一个IP)

[root@localhost ~]# ping www.baidu.com
ping: www.baidu.com: Name or service not known

(DNS还需要配置)

八、参考

Documentation/Networking - QEMUhttps://wiki.qemu.org/Documentation/Networking#Network_BasicsQEMU's new -nic command line option - QEMUhttps://www.qemu.org/2018/05/31/nic-parameter/QEMU新的-nic选项 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/41258581

### QEMU 中配置 IP 地址的方法 在 QEMU 的虚拟环境中,可以通过不同的网络模式来实现虚拟机 (guest) 和宿主机 (host),以及外部网络之间的通信。以下是关于如何在 QEMU 中配置 IP 地址的具体方法。 #### 1. 用户模式 (User Mode) 用户模式是一种简单的网络模拟方式,适用于不需要真实网络访问的场景。在这种模式下,QEMU 自动分配给 guest 一个私有子网中的 IP 地址[^1]。 通常情况下,默认的 IP 地址范围为 `10.0.2.x`,其中: - 宿主机对应的默认网关地址为 `10.0.2.2`。 - Guest 默认获得的 IP 地址可能是 `10.0.2.15` 或其他动态分配的地址。 如果需要手动设置静态 IP 地址,在启动 QEMU 前无需额外操作即可生效。只需通过 DHCP 获取到的地址进行修改: ```bash ifconfig eth0 10.0.2.15 netmask 255.255.255.0 up route add default gw 10.0.2.2 ``` --- #### 2. TAP 接口模式下的 IP 配置 TAP 模式允许更灵活的网络配置,适合需要桥接或直接接入物理网络的情况。以下是在此模式下完成 IP 配置的过程: ##### a. 创建 TAP 设备并启用它 创建一个新的 TAP 设备并与当前用户的权限绑定: ```bash sudo ip tuntap add dev tap0 mode tap user $(whoami) sudo ifconfig tap0 up ``` ##### b. 设置网桥并将 TAP 添加进去 为了使虚拟机能与实际网络交互,可以建立一个网桥设备,并将 TAP 接口加入该网桥中: ```bash brctl addbr br0 # 创建网桥 brctl addif br0 tap0 # 将 TAP 加入网桥 ip addr add 192.168.1.1/24 dev br0 # 给网桥指定 IP 地址 ip link set br0 up # 启用网桥接口 ``` ##### c. 在 QEMU 启动命令中挂载 TAP 接口 运行 QEMU 并将其连接至已准备好的 TAP 接口: ```bash qemu-system-x86_64 \ -net nic,model=virtio \ -net tap,ifname=tap0,script=no,downscript=no \ -hda disk.img ``` 此时,Guest 可以从 Host 所属的真实局域网获取 IP 地址。例如,使用 DHCP 工具请求自动分配: ```bash dhclient eth0 ``` 或者手工地设定固定 IP 地址: ```bash ifconfig eth0 192.168.1.100 netmask 255.255.255.0 up route add default gw 192.168.1.1 ``` --- #### 3. NAT 模式的 IP 配置 NAT 是一种常见的网络模式,用于让虚拟机能够访问互联网而无需暴露其真实的内部 IP 地址。这种模式下,Host 成为 Gateway,Guest 利用 Host 提供的 NAT 功能上网。 当采用 NAT 模式时,QEMU 会自动生成一个专用的子网(通常是 `10.0.2.0/24`),并且自动分配 IP 地址给 Guest。同样也可以手动调整这些参数。 启动 QEMU 实例时可这样定义 NAT 环境: ```bash qemu-system-x86_64 -net nic -net user,hostfwd=tcp::2222-:22 -hda disk.img ``` 这里 `-net user` 表明启用了 NAT 支持,同时还可以附加端口转发选项以便远程管理 VM。 进入 Guest 后执行如下指令确认连通性和路由表: ```bash ping 10.0.2.2 # 测试是否能到达网关 ip route show # 查看当前使用的路由规则 ``` --- ### 总结 以上介绍了三种主要的方式来进行 QEMU 下的 IP 地址配置:分别是 **用户模式**、**TAP 接口模式** 和 **NAT 模式**。每种方案都有各自的特点和适用场合,请依据具体需求选择合适的技术路径[^2]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值