简介
打算用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
。