qemu用tap方式启动vm的网络试验(ip route)

本文详细介绍如何使用QEMU创建虚拟机,并通过tap接口和桥接方式实现虚拟机与宿主机之间的网络连接。包括配置静态IP、启动DHCP服务、设置IP转发及NAT等步骤。

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

ip route add 192.168.8.0/24 via 192.168.137.223


用qemu启动虚拟机:

/usr/libexec/qemu-kvm -kernel bzImage -drive file=hda.img,if=ide,cache=none -append "console=ttyS0 root=/dev/sda rw rdinit=/sbin/init notsc=1" -nographic -boot order=dc,menu=on -net nic,vlan=0,macaddr=52:54:00:12:34:22,model=e1000,addr=08 -net tap,name=haha,ifname=tap1,script=no,downscript=no

bzImage和hda.img自己去想办法吧,有个操作系统就行
这里关键地方是[color=red]-net nic -net tap,ifname=tap1[/color] 指定了tap1,和vm的网卡相连
建立桥并给桥设置IP

brctl addbr br0
brctl stp br0 on
ip link set br0 up
ifconfig br0 192.168.123.1 netmask 255.255.255.0 broadcast 192.168.123.255

启动dhcp的服务

dnsmasq --strict-order --except-interface=lo --interface=br0 --listen-address=192.168.123.1 --bind-interfaces --dhcp-range=192.168.123.2,192.168.123.254 --conf-file="" --pid-file=/var/run/qemu-dhcp-br0.pid --dhcp-leasefile=/var/run/qemu-dhcp-br0.leases --dhcp-no-override

把tap绑定到桥上

brctl addif br0 tap1
ip link set tap1 up

[color=red][b]这里最重要:设置ip的转发[/b][/color]

iptables -t nat -A POSTROUTING -s "192.168.123.0/255.255.255.0" ! -d "192.168.123.0/255.255.255.0" -j MASQUERADE
sysctl -w net.ipv4.ip_forward=1


进入刚起的vm,获取ip

dhclient
ping 114.114.114.114
可观察
root@(none):/# ip route
default via 192.168.123.1 dev eth0
default dev sit0 scope link
default dev lo scope link
192.168.123.0/24 dev eth0 scope link
192.168.123.0/24 dev eth0 proto kernel scope link src 192.168.123.37


[color=red]qemu的操作[/color]

ctl+a x 退出
ctl+a c 切换monitor


################################################
不用dhcp,用ifconfig和route手动建立route的方式

主机

brctl addbr br0
ip link set br0 up
ip link set tap1 up
brctl addif br0 tap1
ifconfig br0 192.168.124.1 netmask 255.255.255.0 broadcast 192.168.124.255
iptables -t nat -L
iptables -t nat -A POSTROUTING -s "192.168.124.0/255.255.255.0" ! -d "192.168.124.0/255.255.255.0" -j MASQUERADE


客户端手动建ip

ip link set eth0 up
ifconfig eth0 192.168.124.2 netmask 255.255.255.0 broadcast 192.168.124.255
route add default gw 192.168.124.1 dev eth0



############################################
不用dhcp,用ip addr和 ip route手动建立route的方式


brctl addbr br0
ip link set br0 up
ip link set tap1 up
brctl addif br0 tap1
ip addr add 10.3.0.1/24 dev br0

brctl show
ip addr show br0

iptables -t nat -A POSTROUTING -s "10.3.0.0/24" ! -d "10.3.0.0/24" -j MASQUERADE

进入vm

ip link set eth0 up
ip addr add 10.3.0.2/24 dev eth0

ip route add default via 10.3.0.1
ping 114.114.114.114


############################
备注:
可能会用到
ifconfig br0 promisc up
ifconfig eth0 promisc up
##########
ip route参考:
[url]http://www.mamicode.com/info-detail-1412618.html[/url]
[url]http://www.cnblogs.com/sammyliu/p/4713562.html[/url]

0#表: 系统保留表
253#表: default table 没特别指定的默认路由都放在改表
254#表: main table 没指明路由表的所有路由放在该表
255#表: locale table 保存本地接口地址,广播地址、NAT地址 由系统维护,用户不得更改

ip route list table 253
ip route list table main


cat /etc/iproute2/rt_tables

via是下一跳

ip route add default via 10.3.0.1 table 1 在一号表中添加默认路由为192.168.1.1
ip route add 192.168.0.0/24 via 192.168.1.2 table 1 在一号表中添加一条到192.168.0.0网段的路由为192.168.1.2


参考
[url]http://haoningabc.iteye.com/blog/2306952[/url]
tap的方式使用qemu建立虚拟机NAT网络
### 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]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值