wayne
wayne
Published on 2025-06-09 / 0 Visits
0
0

WSL2 配置 Windows v2ray 代理指南 (学习用途)

因为在win用的v2ray,为了解决 WSL2 内访问受限资源(如 Google 搜索、安装 Go 语言包等)的网络问题,仅用于学习,文章灵感来源于 知乎-WSL2内使用windows的v2ray代理配置方式 并重新排版。

配置步骤:

  1. Windows v2ray 客户端设置:

    • 打开你的 v2rayN 或其它 v2ray 客户端。

    • 开启“允许来自局域网的连接” (Allow connections from LAN) 选项。这是关键一步,使 WSL2 能访问到代理服务。

    • 记下客户端使用的 SOCKS5 代理端口 (通常是 10808,请根据你的实际设置确认)。

  2. WSL2 内 DNS 配置 (解决域名解析问题):

    • 默认 WSL2 使用 Windows 主机的 DNS,但配合代理时可能导致解析失败,也就是域名无法转换成ip地址。

    • 关闭 WSL2 自动生成 DNS 配置:

      sudo nano /etc/wsl.conf
      • 添加或修改为以下内容:

        [network]
        generateResolvConf = false
      • 保存并退出 (Ctrl+O, Enter, Ctrl+X)。

    • 重启 WSL2 (在 Windows PowerShell 或 CMD 中执行 wsl --shutdown,然后重新打开 WSL 终端)。

    • 手动设置 DNS 服务器:

      sudo nano /etc/resolv.conf
      • 删除所有现有 nameserver 行,替换为可用的公共 DNS (例如 Google DNS):

        nameserver 8.8.8.8
        nameserver 8.8.4.4
        # 或者 nameserver 1.1.1.1 (Cloudflare)
      • 重要: 为防止文件被自动覆盖,设置其不可变属性 (每次 WSL 重启后可能需要重新设置):

        sudo chattr +i /etc/resolv.conf
  3. 配置代理环境变量和快捷命令:

    • 编辑 WSL2 用户的 ~/.bashrc 文件:

      nano ~/.bashrc
    • 在文件末尾添加以下内容 (请将 10808 替换为你在 步骤 1 中确认的 v2ray 客户端 SOCKS5 端口):

      # ====== v2ray Proxy Configuration for WSL2 ======
      # Get the IP address of the Windows host visible inside WSL2
      export hostip=$(ip route | grep default | awk '{print $3}')
      # Set the port to your v2ray SOCKS5 port (DEFAULT: 10808)
      export hostport=10808
      
      # Alias to ENABLE the proxy
      alias proxy='
          export HTTPS_PROXY="socks5://${hostip}:${hostport}";
          export HTTP_PROXY="socks5://${hostip}:${hostport}";
          export ALL_PROXY="socks5://${hostip}:${hostport}";
          echo -e "Acquire::http::Proxy \"http://${hostip}:${hostport}\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null;
          echo -e "Acquire::https::Proxy \"http://${hostip}:${hostport}\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null;
          echo "Proxy settings (including APT) ACTIVATED.";
      '
      
      # Alias to DISABLE the proxy
      alias unproxy='
          unset HTTPS_PROXY;
          unset HTTP_PROXY;
          unset ALL_PROXY;
          sudo sed -i -e '/Acquire::http::Proxy/d' /etc/apt/apt.conf.d/proxy.conf;
          sudo sed -i -e '/Acquire::https::Proxy/d' /etc/apt/apt.conf.d/proxy.conf;
          echo "Proxy settings DEACTIVATED.";
      '
      # ====== End of Proxy Configuration ======
    • 保存并退出 (Ctrl+O, Enter, Ctrl+X)。

    • 使更改立即生效 (或打开新的终端):

      source ~/.bashrc
  4. 启用代理并测试:

    • 在 WSL2 终端中输入命令启用代理配置:

      proxy
      • 你应该会看到 Proxy settings (including APT) ACTIVATED. 的提示。

    • 使用 curl 测试访问 Google:

      curl -v https://google.com.hk
      • 如果代理工作正常,你应该能看到 Google 主页的 HTML 内容返回 (或经过重定向后的内容)。-v 参数会输出详细过程,有助于观察是否通过代理连接。

  5. 验证通过后:

    • 现在在 WSL2 中执行的命令 (如 go get, git clone, wget, curl, apt update/install 等),只要它们遵守 HTTP_PROXY/HTTPS_PROXY/ALL_PROXY 环境变量或 APT 的代理配置,就会通过 Windows 上的 v2ray 代理进行网络访问。

    • 使用 unproxy 命令可以随时关闭代理设置。

故障排除 (如果测试 curl 失败):

  1. 检查域名解析:

    • 运行 ping google.com.hk

    • 期望结果: 能解析出 IP 地址 (如 142.250.xxx.xxx)。即使所有 ping 包都丢失 (100% packet loss) 也没关系,只要能解析出 IP 就说明 步骤 2 的 DNS 配置基本正确。

    • 如果失败: 无法解析 IP 地址,请仔细检查 步骤 2 (/etc/wsl.conf, /etc/resolv.conf, chattr +i) 是否正确执行并重启了 WSL。

  2. 验证 Windows v2ray 客户端本身:

    • Windows 上打开 PowerShell 或 CMD。

    • 尝试在 Windows 终端内运行:

      curl -x socks5://127.0.0.1:10808 -v https://google.com.hk

      (将 10808 替换为你的实际端口)

    • 期望结果: 能成功获取 Google 的响应。如果这里也失败,说明 v2ray 客户端本身配置有问题或节点不可用,请先解决 Windows 端的代理问题。

  3. 检查 WSL2 环境变量:

    • 在 WSL2 终端运行 proxy 后,执行:

      echo $HTTP_PROXY
      echo $HTTPS_PROXY
      echo $ALL_PROXY
    • 期望结果: 三个命令都应输出 socks5://<Windows_host_IP>:<Your_Port> (例如 socks5://172.25.112.1:10808)。<Windows_host_IP> 应该是 WSL2 默认网关的 IP (可用 ip route | grep default 查看)。

  4. 确认 v2ray 客户端端口:

    • 仔细核对你在 步骤 1 中记下的 v2ray 客户端的 SOCKS5 监听端口,确保与 步骤 3~/.bashrc 文件里设置的 hostport 变量值 完全一致。这是最常见的配置错误点。

  5. 检查 Windows 防火墙:

    • 确保 Windows 防火墙没有阻止 WSL2 虚拟机网络适配器对 localhost (或 127.0.0.1) 上代理端口的访问。可以尝试暂时完全关闭 Windows 防火墙测试是否是它的问题。

使用提示:

  • 每次需要让 WSL2 通过代理访问外网时,在终端输入 proxy

  • 不需要代理时,输入 unproxy



Comment