临夏州住房和城乡建设局网站,赚钱项目,庄河网站怎么举报做棺材,专业网站制作推荐文章目录1. 前言2. 测试环境3. 配置步骤3.1 host 配置3.1.1 检查 host 对 TUN/TAP 和 网桥的支持情况3.1.2 网桥一端的建立#xff1a;创建网桥设备#xff0c;并添加 host 网卡到网桥3.1.3 网桥另一端的建立#xff1a;TUN/TAP 配置3.2 guest 端的配置4. 参考链接1. 前言
…
文章目录1. 前言2. 测试环境3. 配置步骤3.1 host 配置3.1.1 检查 host 对 TUN/TAP 和 网桥的支持情况3.1.2 网桥一端的建立创建网桥设备并添加 host 网卡到网桥3.1.3 网桥另一端的建立TUN/TAP 配置3.2 guest 端的配置4. 参考链接1. 前言
限于作者能力水平本文可能存在谬误因此而给读者带来的损失作者不做任何承诺。
2. 测试环境
本文分析基于 linux-4.14.132 内核代码分析运行环境 Ubuntu 16.04.4 LTS QEMU emulator version 2.5.0 ARM vexpress-a9 rootfs 基于 ubuntu-base-16.04-core-armhf.tar.gz 制作。
3. 配置步骤
QEMU 网络配置支持多种模式本篇就 TAP 方式展开其它方式不在此讨论。在此先对测试环境做一下说明。QEMU 运行在 Ubuntu 16.04.4 系统下也即后文题到的 hostlinux-4.14.132 ubuntu-base-16.04-core-armhf.tar.gz 运行于 QEMU 模拟的 ARM vexpress-a9 板型环境下也即后文提到的 guest。
3.1 host 配置
3.1.1 检查 host 对 TUN/TAP 和 网桥的支持情况
查询 host 当前的内核配置是否支持 TUN/TAP 和 网桥 功能
$ cat /boot/config-uname -r | grep CONFIG_TUN
CONFIG_TUNy
# CONFIG_TUN_VNET_CROSS_LE is not set
$ cat /boot/config-uname -r | grep CONFIG_BRIDGE
CONFIG_BRIDGEm我们看到当前 host 的 TUN/TAP 随内核一起启动而网桥支持则是以内核模块的方式提供这意味着我们需要手动加载 bridge.ko (网桥支持功能内核模块)。但不必担心后面提到的工具 brctl 会帮我们加载该模块。 如果上述查询没有开启 CONFIG_TUN 或 CONFIG_BRIDGE 中的任一个则接下来的操作无法完成。
3.1.2 网桥一端的建立创建网桥设备并添加 host 网卡到网桥
sudo ifconfig ens33 down
sudo brctl addbr br0 # 创建网桥设备 br0
sudo brctl addif br0 ens33 # 添加网口 ens33 到网桥 br0
sudo brctl stp br0 off # 关闭网桥 br0 的生成树协议
sudo brctl setfd br0 1 # 设置网桥 br0 转发延迟为1秒
sudo brctl sethello br0 1 # 设置网桥 br0 hello time 为1秒
sudo ifconfig br0 0.0.0.0 promisc up # 设置网桥 br0 为混杂模式
sudo ifconfig ens33 0.0.0.0 promisc up # 设置网桥 ens33 为混杂模式
sudo dhclient br0 # 为网桥 br0 获取 IP上面假设 host 用来上网的网卡为 ens33如果你的机器有所不同修改它。在这之后建立了网桥 br0 并且加网卡 ens33 加入了网桥目前的拓扑如下图
Internet - en33 - br0 - ???也就是说我们建立 host 和 guest 通信的一端打 ??? 的一端尚未连接好。可以通过如下命令查看网桥 br0 的信息
sudo brctl show br0
sudo brctl showstp br03.1.3 网桥另一端的建立TUN/TAP 配置
在此建立网桥的另一端 tap0 它一边通过网桥 br0 连接到 host 的网卡 ens33另一边连接到运行于 QEMU 内的 guest 虚拟网卡。我们来看建立 tap0 的操作步骤
sudo tunctl -t tap0 -u whoami # 建立 tap0仅限当前用户使用也可指定其它用户如 root
sudo brctl addif br0 tap0 # 将 tap0 添加到网桥 br0
sudo ifconfig tap0 0.0.0.0 promisc up # 将 tap0 设置为混杂模式此时我们的连接拓扑变成了如下结构 host guest---------------------- ----
Internet - | en33 - br0 - tap0 | - | ??? |---------------------- -----到此host 的配置完成了现在我们用 QEMU 来启动 guest
sudo qemu-system-arm \-M vexpress-a9 -smp 4 -m 512M \-kernel $1/output/arch/arm/boot/zImage \-dtb $1/output/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \-append root/dev/mmcblk0 rw rootfstypeext4 consolettyAMA0 \-sd rootfs/arm-ubuntu-16.04.img \-nographic \-net nic -net tap,ifnametap0,scriptno,downscriptno重点是参数序列
-net nic -net tap,ifnametap0,scriptno,downscriptno-net nic: 让 QEMU 虚拟一张 guest 网卡将是后文看到的 eth0 ;
-net tap,ifnametap0,scriptno,downscriptno: 主要意思是 host tap0 连接 guesteth0和 host 的通信3.2 guest 端的配置
QEMU 启动 guest 后登录 guest 系统先查看网卡信息
$ ifconfig -a
eth0 Link encap:Ethernet HWaddr 52:54:00:12:34:56 inet addr:192.168.0.10 Bcast:192.168.0.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:43 errors:0 dropped:0 overruns:0 frame:0TX packets:25 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:4824 (4.8 KB) TX bytes:2258 (2.2 KB)Interrupt:31 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0UP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
上面看到 eth0 和 lo 。上面看到 eth0 已经有了 IP事实上这是配置后结果初始 eth0 是没有 IP 的需要对文件 /etc/network/interfaces 进行如下配置
# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
#source-directory /etc/network/interfaces.dauto lo
iface lo inet loopbackauto eth0
iface eth0 inet dhcp保存文件 /etc/network/interfaces 重启网口 eth0 然后检查是否能上网了
$ ping www.baidu.com
PING www.baidu.com (14.119.104.189) 56(84) bytes of data.
64 bytes from 14.119.104.189: icmp_seq1 ttl55 time10.4 ms
64 bytes from 14.119.104.189: icmp_seq2 ttl55 time17.8 ms
64 bytes from 14.119.104.189: icmp_seq3 ttl55 time9.48 ms
^C
--- www.baidu.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2012ms
rtt min/avg/max/mdev 9.485/12.603/17.876/3.750 ms最终形成了如下的网络拓扑结构 host guest---------------------- ---------------
Internet - | en33 - br0 - tap0 | - | 虚拟网卡 eth0 |---------------------- ---------------好了已经可以上网了工作结束休息下喝杯茶 ~~
4. 参考链接
https://blog.csdn.net/HaiLanLin/article/details/109845929 https://blog.csdn.net/OnlyLove_/article/details/124536607 https://blog.csdn.net/u014022631/article/details/53411557 https://blog.csdn.net/qq_41146650/article/details/126465032 https://wiki.qemu.org/Documentation/Networking#Network_Basics