WSL2 配合 Clash 使用的方案
解决 WSL 怎么使用 Clash 翻墙的问题

WSL2 配合 Clash 的代理方案

WSL2 不能像 WSL 一样直接使用 127.0.0.1:7890这样的语句实现代理设置,因为 WSL2 是一台独立的虚拟机,所以 WSL2 想要实现代理和一台单独的设备想要用你 PC 的代理原理是一样的。通过本机暴露的 IP 地址加上端口号来设置。

网上有现成的脚本:

#!/bin/bash
host_ip=$(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ")
export ALL_PROXY="http://$host_ip:7890"

这个不能像 Powershell 的函数一样直接调用,而且我试了几次都不行。查到了另外一个解决方案:

export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')
export https_proxy="http://${hostip}:7890"
export http_proxy="http://${hostip}:7890"
export all_proxy="sock5://${hostip}:7891"

比上一个脚本更加详细一些。

嫌麻烦直接看这里

我的思路是想要放在 .zshrc文件里,直接通过命令开启关闭。查了一下“怎么设置 zsh 的网络代理”,结合刚才的脚本,最终方案是:

0:开启 Clash for Windows 的 Allow Wlan开关,允许局域网设备访问代理。

  1. .zshrc 文件里增加如下语句:

    proxy () {
        export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')
        export https_proxy="http://${hostip}:7890"
        export http_proxy="http://${hostip}:7890"
        export all_proxy="sock5://${hostip}:7891"
        echo "HTTP Proxy on: ${hostip}"
    }
    
    noproxy () {
        unset http_proxy
        unset https_proxy
        unset all_proxy
        echo "HTTP Proxy off"
    }
    
  2. 刷新 zsh 环境。

    source ~/.zshrc
    
  3. 通过执行 proxynoproxy 来开关代理。可行。

有问题看这里

  1. 检查是否在 Clash 中打开了 Allow Wlan

  2. 检查 Clash 端口是否是 7890

  3. 搜索防火墙设置,检查是否允许 Clash for Windows 在所有网络上访问,两个小箭头都勾选即可。

  4. 必要时可以关闭 WSL2 环境重新打开试试。

希望可以帮到其他人。


Last modified on 2021-02-20