起因
这几天重新写 6.824 Lab1,在把 wc.go
文件编译成 wc.so
文件的时候总会出现很多行的乱码,以为是 Go 对 ARM 架构的支持不够(实际上是有问题,修复了,但是会显示),所以想搞个 x86 架构的 Linux 环境。可惜家里找不到闲置的电脑,于是装上 Arch Linux on WSL2,但是一直连不上网,找了半天找到了一篇文章救我狗命!再次让我感觉到了世界的美好
过程
WSL 选择了 Arch Linux,别问,问就是 Arch 天下第一!没想到安装的过程异常的简单,只需要动动鼠标轻轻两点,你就可以得到一个美丽的界面~( ̄▽ ̄)~*
当你吃着辣条唱着歌,进行常规更新 sudo pacman -Syyu
,突然 就让麻匪给截了(bushi 就发现连不上网了,ping
宿主机也 ping
不通。
OK,这很 Arch(可是别人的 WSL2 都不会这样的喂(#`O′))。
解决方案
要解决这个问题首先要了解 WSL2 的网络拓扑,如图
那么我们首先需要在宿主机查看 IP
注意到 WSL 的这一部分,有两个重要参数,宿主机 IPv4 和网络掩码。
找到了这两部分之后跳转到 WSL 中,使用 ip addr
来查看可以看到的网卡。
注意到这个叫 eth0
的网卡,搜索了一下,它应该是指物理网卡来着,但是具体有啥用,不知道ㄟ( ▔, ▔ )ㄏ
在初次查看的时候,所有的网卡应该都是处于 DOWN
的状态。那么此时我们先将这个 eth0
启动。
ip link set dev eth0 up
然后它就应该会变成上图中 UP 的那个状态,但是此时 WSL 还没有 IP 地址,用屁股想也知道连不上网,那么此时我们就要为他分配一个 IP,用于和宿主机保持连接。
现在就要用到之前看到的两个参数,粗略计算子网的掩码的 CIDR 表示应该是 $32-8-4=20$ ,那么也就知道了我们应该分配子网的范围,在这个范围里面随便分配一个。
ip addr add 172.18.20.142/20 dev eth0
分配完 IP 之后还需要在指定路由(就是之前在宿主机上看到网卡的 IP addr ),将 WSL 的流量通过宿主机流出。
ip route add default via 172.18.16.1 dev eth0
网络配置就搞完了~( ̄▽ ̄)~*
如果还连不上网,那么可能是 Windows Defener 防火墙做了屏蔽,可以在控制面板将防火墙关闭。这可能会出现不安全的情况,下面的链接有指出应该如何加强防御,但是笔者只是搭个环境跑程序,就无所谓了。