简介
打算用WSL跟qemu通信学习IPv6。利用下tap网卡的使用。
tap网卡
wsl准备
首先wsl这边先安装相关软件包
sudo apt install uml-utilities

然后生成tap0网卡并配置IP,这里把网卡的混杂模式打开
sudo tunctl -u root -t tap0
sudo ifconfig tap0 172.16.16.10 promisc up

配置好tap0网卡后就可以看到其信息了

qemu准备
首先qemu启动的内核为了方便把CONFIG_TAP选项内建到内核中

编译好内核后,在qemu的启动脚本中加入这一行
-net tap,ifname=tap0,script=no,downscript=no\

抓包测试
启动qemu
sudo ./run_rlk_arm64.sh run

qemu启动后配置enp0s1网卡地址跟wsl的tap0网卡地址在同个网段下,这里我们配置为172.16.16.20

qemu发送ping包给wsl

在wsl这边抓包,抓包文件为taptap.pcap,已上传到此链接

从抓包文件来看,wsl的mac地址跟qemu的mac地址都对的上,说明通信成功,确实都是从各自的网卡发出的

wsl的mac地址

qemu的mac地址

ipv6测试
qemu使用Slirp实现了一整套TCP/IP协议栈,但是好像对icmp协议的支持不太行?在测试ping的时候会一直报qemu-system-aarch64: Slirp: external icmpv6 not supported yet警告,但是并不影响通信。
因为qemu和wsl的ipv6地址有site-local address (已弃用)跟linklocal address,所以下面两个地址都用来测试
wsl这边进行抓包

qemu先跟wsl的site-local address进行ping


再跟wsl的linklocal address进行ping


抓包文件为tapipv6.pcap,已上传到此链接
前半部分报文是site-local address相关的,报文5跟6就是明显的一对request跟reply了。不过有个点,报文13跟14,A用NS消息请求B的site-local address的mac地址,却是用链路地址去请求的?

后半部分报文是linklocal address相关的,报文41跟42是一对request跟reply。
