wsl跟qemu通信

大年初二

Posted by 婷 on February 11, 2024 本文总阅读量

简介

打算用WSLqemu通信学习IPv6。利用下tap网卡的使用。

tap网卡

wsl准备

首先wsl这边先安装相关软件包

sudo apt install uml-utilities

image-20240210134841325

然后生成tap0网卡并配置IP,这里把网卡的混杂模式打开

sudo tunctl -u root -t tap0
sudo ifconfig tap0 172.16.16.10 promisc up

image-20240210134943289

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

image-20240210135003726

qemu准备

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

image-20240210175135924

编译好内核后,在qemu的启动脚本中加入这一行

-net tap,ifname=tap0,script=no,downscript=no\

image-20240210140119568

抓包测试

启动qemu

sudo ./run_rlk_arm64.sh run

image-20240210140203048

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

image-20240210141029207

qemu发送ping包给wsl

image-20240210141058672

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

image-20240210142047838

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

image-20240210142154888

wslmac地址

image-20240210142212487

qemumac地址

image-20240210142233493

ipv6测试

qemu使用Slirp实现了一整套TCP/IP协议栈,但是好像对icmp协议的支持不太行?在测试ping的时候会一直报qemu-system-aarch64: Slirp: external icmpv6 not supported yet警告,但是并不影响通信。

因为qemuwslipv6地址有site-local address (已弃用)跟linklocal address,所以下面两个地址都用来测试

wsl这边进行抓包

image-20240210145517231

qemu先跟wslsite-local address进行ping

image-20240210181211715

image-20240210145443017

再跟wsllinklocal address进行ping

image-20240210181311925

image-20240210145536025

抓包文件为tapipv6.pcap,已上传到此链接

前半部分报文是site-local address相关的,报文56就是明显的一对requestreply了。不过有个点,报文1314ANS消息请求Bsite-local addressmac地址,却是用链路地址去请求的?

image-20240210181528375

后半部分报文是linklocal address相关的,报文4142是一对requestreply

image-20240210181746284

参考链接