Windows与wsl2的互ping
启动wsl2或启动基于wsl的docker容器后,在Windows系统上ipconfig可以看到,多了一个网卡vEthernet
这个网卡是专门跟wsl2通讯的网卡,与wsl的网卡在同一网段,可以打开wsl2,ifconfig一下,可以看到对应网卡,通过子网掩码一算,这两个ip是在同一网段的。然后ping一下,发现Windows可以ping通wsl2,但是wsl2 ping不通Windows,查了一下说是Windows防火墙给屏蔽了,测试后发现关闭防火墙里的“公用网络”那一项,可以使wsl2 ping通Windows。
wsl2和Windows的网络关系可以参考WSL2 网络异常排查 [ping 不通、网络地址异常、缺少默认路由、被宿主机防火墙拦截] - 简书 (jianshu.com),讲的简单明了。
根据上边文章配置一个防火墙规则,给wsl2f访问Windows的权限后,wsl2可以ping通Windows了。
Docker容器的网络
- 用默认的bridge网络模式启动了一个docker容器,然后测试网络,ifconfig一下,可以看到此模式下有两个网卡,一个eth0,一个lo,eth0卡是网桥通讯的卡。此时在容器中ping一下wsl2的ip,没问题,可以通,然后ping Windows的vEthernet,也可以ping通。当然ping Windows的另一张对外网卡就不通了,为什么不通就不知道了,感觉不通也是对的。
- 反过来,用wsl2 ping容器的eth0。不通,用Windows ping容器的eth0,也不通。
- wsl2通过桥接网络,将容器连成了一个虚拟局域网,然后容器对外通讯则是由wsl nat服务进行转发,docker0起到路由作用,把容器的访问转发出去。