wsl2 访问宿主机解决思路

wsl2 中获取宿主机 ip 可以通过

export WINDOWS_HOST=`cat /etc/resolv.conf | grep nameserver | cut -d ' ' -f 2`

的方式获得宿主机 IP

因为很多地方会需要访问 windows 的代理。比如 git。

可以写一个脚本修改 host 文件:

记得用 sudo chmod 777 /etc/hosts 修改一下权限

$HOME/host.sh:

#!/usr/bin/bash

HOST_NAME="windows_host"
FILE=/etc/hosts
HOST_LINE=$(grep "windows_host" $FILE)
TEMP_FILE=$HOME/hosts_tmp
if [ -n "$HOST_LINE" ]
then
  sed "s/$HOST_LINE/$WINDOWS_HOST $HOST_NAME/g" $FILE > $TEMP_FILE
  cat $TEMP_FILE > $FILE
  rm $TEMP_FILE
else
  echo "$WINDOWS_HOST $HOST_NAME" >> $FILE
fi

这样每次执行 $HOME/host.sh 就可以将最新的 windows 宿主机的 IP 地址写进 host 文件,就能通过 windows_host 进行访问。

考虑到 wsl 太特殊,好像仿佛是很难做到开机自启。

我这里只是替换个文件而已,没什么性能考虑,每次打开 terminal 都替换一次是可以接受的。

因此直接在 $HOME/.zshrc / $HOME/.bashrc加入以下两行即可:

export WINDOWS_HOST=`cat /etc/resolv.conf | grep nameserver | cut -d ' ' -f 2`
sh $HOME/host.sh

嗯。。。还凑活。

在配置 git 代理时就可以这样配置了:$HOME/.gitconfig:

[http "https://github.com"]
        proxy = socks5://windows_host:1080

配置一次即可,以后都不用操心了。

访问 windows 里的服务也很方便,大概这样:

curl http://windows_host:8080/api.json