WSL2版本:2.0.9.0
Windows版本:10.0.22621.2715
1. 打开或创建WSL配置文件(位于C:/User/%你的用户名/.wslconfig),并添加以下内容:
[experimental]
autoMemoryReclaim=gradual
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
2. 打开命令提示符并执行wsl --shutdown
命令。
3. 重新启动wsl就可以了
注意:wsl2版本2.0以前的不支持这个方法
使用镜像模式后,wsl2会自动共享主机的代理,比以前方便了不少。
问题:开启了镜像模式后似无法从宿主机中访问wsl中的docker服务
目前找到一个在我的电脑上有效的方法
1. 在wsl内的/etc/systemd/system/目录内添加network-mirrored.service文件,文件内容如下
[Unit]
Wants=network-pre.target
Before=network-pre.target shutdown.target
[Service]
User=root
ExecStart=/bin/sh -ec '\
[ -x /usr/bin/wslinfo ] && [ "$(/usr/bin/wslinfo --networking-mode)" = "mirrored" ] || exit 0;\
echo "\
add chain ip nat WSLPREROUTING { type nat hook prerouting priority dstnat - 1; policy accept; };\
insert rule ip nat WSLPREROUTING iif loopback0 ip daddr 127.0.0.1 counter dnat to 127.0.0.1 comment mirrored;\
"|nft -f -\
'
ExecStop=/bin/sh -ec '\
[ -x /usr/bin/wslinfo ] && [ "$(/usr/bin/wslinfo --networking-mode)" = "mirrored" ] || exit 0;\
for chain in "ip nat WSLPREROUTING";\
do\
handle=$(nft -a list chain $chain | sed -En "s/^.*comment \\"mirrored\\" # handle ([0-9]+)$/\\1/p");\
for n in $handle; do echo "delete rule $chain handle $n"; done;\
done|nft -f -\
'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
2. 在wsl内执行
sudo systemctl --now enable network-mirrored