首页 > 其他分享 >WSL2代理问题

WSL2代理问题

时间:2022-12-04 21:58:52浏览次数:39  
标签:Windows 端口 代理 防火墙 问题 Linux WSL2

在使用WSL1时,由于Linux子系统和Windows共享网络端口,所以在Windows开代理时,Linux子系统也可以共享,但是WSL2使用虚拟化运行Linux内核,也有自己独立的网络端口,所以无法像WSL1一样轻松使用代理,本文记录解决这一问题的过程。

WSL1使用代理

如上文所说,WSL1与Windows共享网络端口,所以只需要设置代理指向本地回环地址的代理端口,即可使用代理:(例如Windows上的代理端口为1080)

export ALL_PROXY="http://127.0.0.1:1080"
  • 但是WSL2基于Hyper-V运行,所以Linux子系统和Windows在网络上是两座孤岛,需要一个小船来互通。

WSL2使用代理

基本原理&可能遇到的问题

需要马上使用的小伙伴可以跳到配置代理脚本部分直接食用(在这一部分先多叨叨一些~)

  • WSL2访问Windows

要想从Linux子系统(孤岛A)通向Windows宿主机(孤岛B),从WSL2发出网络请求到Windows(从孤岛A派出小船到孤岛B),首先需要知道Windows的IP地址(孤岛B的停靠码头)。

boat

由于Windows在开启WSL2时配置了相关路由(已知了小船航行的地图),所以在大多数情况下,只要知道Windows的IP地址(停靠码头),就可以访问成功。在windows终端中输入ipconfig可查看windows相关IP地址(我们需要的是WSL相关的)。从Linux子系统中ping该地址,可以成功通信。

win_ip ping
  • WSL2若无法从局域网与Windows通信

但是,Windows一些版本的防火墙会从中作梗,使得从子系统发出的请求被防火墙挡住,无法到达Windows(从WSL2出发的小船被海防误认为外来入侵)。这时我们会发现从WSL2ping不通上图中的Windows的IP172.17.240.1,所以我们需要告诉防火墙,让从WSL2发来的请求通过。可使用如下命令给防火墙建立一条入站规则(需要以管理员身份运行cmd或powershell,创建规则默认名称为WSL,在下一个图片中可见):

New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow
  • WSL2若无法访问代理端口

此外,当我们可以从WSL2与Windows进行通信后,还可能无法访问Windows的代理端口(可使用telnet命令访问),这也是因为防火墙将向相关端口的网络请求挡住了,需要我们手动添加防火墙入站规则。

控制面板->系统和安全->Windows Defender防火墙->高级设置(左边栏)->入站规则

  • 右边栏点击新建规则 ->
  • 规则类型选择端口(O) ->
  • 规则应用于**TCP **&& 规则应用于特定端口(输入自己的代理端口,比如我的是10080) ->
  • 进行操作:允许连接 -> 配置文件直接下一页 -> 名称自行填写
port

此时我们从WSL2使用telnet命令访问Windows代理端口,可以访问成功:

telnet

配置代理脚本

  • 在Linux子系统中获取Windows的IP地址,可使用如下命令:
cat /etc/resolv.conf | grep "nameserver" | cut -f 2 -d " "

比如这里我们获取Windows的IP为172.17.240.1

  • 用获取的IP地址(此处以我的代理端口10080为例)导出全局代理变量$ALL_PROXY
export ALL_PROXY="http://172.17.240.1:10080"
  • 综合成一个可以快速执行的脚本(注意在=前后不要乱加空格):
# ~/.proxyrc
export host_ip=$(cat /etc/resolv.conf | grep "nameserver" | cut -f 2 -d " ")
export ALL_PROXY="http://$host_ip:10080"
# 由于WindowsIp会变化,这里顺便一次性配置git的代理(只对github做代理,节省机场流量)
git config --global http.https://github.com.proxy http://$host_ip:10080
git config --global https.https://github.com.proxy http://$host_ip:10080

可将该脚本存作~/.proxyrc文件,执行时使用source ~/.proxyrc即可

  • 遇到问题请回到上一部分~~
  • 排除问题思路:
    • 先使用ping测试WSL2与Windows是否可网络通信
    • 再使用telnet命令测试对应端口是否可正常通信

标签:Windows,端口,代理,防火墙,问题,Linux,WSL2
From: https://www.cnblogs.com/lemontreeyi/p/16950898.html

相关文章

  • VSCode外部终端中文乱码问题
    转载自:https://www.cnblogs.com/stu-jyj3621在处理这个问题之前,你首先得知道为什么会出现这个这个问题。你在使用VScode编辑代码时,代码页面中文正常,而终端输出那里中文......
  • 小程序上传问题
    1.80200,mainpackagesourcesize2590KBexceedmaxlimit2MB要求每个分包不能大于2MB一般就是静态资源太大,放在服务器上即可2.background真机调试图片不显示把图......
  • 动态代理与责任链模式
    动态代理和责任链设计模式适用范围广,在Spring和MyBatis有着重要的应用,比如SpringAOP、Mybatis的插件技术,想要搞懂当中的技术原理必须掌握上面两个设计模式。    代......
  • Request_获取请求参数中文乱码问题处理以及请求转发
    Request_获取请求参数中文乱码问题处理中文乱码问题:get方式:tomcat8已经将get方式乱码问题解决了post方式:会乱码解决:在获取参数前,设置request的编码:r......
  • redis之缓存问题
    一缓存穿透1什么是缓存穿透缓存穿透是指查询一个在redis和DB中都不存在的数据,redis中查不到去DB查,DB查不到则不写入redis,导致每次查询这个数据都要穿过redis穿透到DB......
  • sql题解--打折日期交叉问题
    题目-打折日期交叉问题现有各品牌优惠周期表(promotion_info)如下,其记录了每个品牌的每个优惠活动的周期,其中同一品牌的不同优惠活动的周期可能会有交叉。promotion_id......
  • Win10下SDK Manager应用程序闪退问题的解决方法
    SDKManager闪退原因:未找到Java的正确路径解决办法:1、在压缩包中找到Android.bat文件,右键编辑2、打开的Android文件内容,找到如图的几行代码将上面的代码替换成:其中......
  • 记录使用 aws lambda +apigateway 过程中遇到的问题
    我希望创建一个api-gatewayhttpapi,把$default路由全发给一个lambda函数。SAM配置:...Events:ExplicitApi:#warning:createsapublicendpoint......
  • 网络通信中的粘包问题
    什么是粘包?在网络传输层有TCP和UDP两种协议;如果使用TCP进行通信,则在大多数场景下是不存在丢包和包乱序问题的,因为TCP通信是可靠的通信方式,TCP栈通过序列号和包重传确认机......
  • 《一些特殊的数论函数求和问题》阅读笔记
    好至少它教会了我如何把质数求和转化成积分的渐进对着\(\pi(x)\)微就行了然后直接\(u\textdv=uv-v\textdu\)18.3k……阿巴阿巴引言这玩意挺常见的。而且你会......