Ubuntu、windows及其ubuntu(wsl)子系统的网络代理问题
起因是本人电脑是windows并安装了ubuntu(wsl)子系统,想远程连接Ubuntu服务器,在服务器上访问GitHub,在自己电脑上的两个系统中绕来绕去,在三者之间的网络代理中踩了很多坑,因此记录一下。
(一)让本机 ubuntu 子系统使用 Windows 中的网络代理
1、在 ubuntu(wsl)里拿到 Windows 主机 IP:
(bash)WIN_IP=$(ip route | awk '/^default/ {print $3; exit}') echo $WIN_IP会输出类似 172.xx.xx.xx 的一串 IP,这是你 Windows 的地址。
2、用这个 IP 配置代理(其中10000替换为自己的本地网络代理端口)
(bash)export http_proxy=http://$WIN_IP:10000 export https_proxy=http://$WIN_IP:10000 curl https://www.google.comWSL 程序 → $WIN_IP:10000 → Windows 上的网络代理 → 外网
(二)让远程 ubuntu 服务器使用本地 Windows 中的网络代理
1、在 Windows 上开 ssh:
“本地 ssh -R 远程端口:本地代理端口 + 远程 export http_proxy=远程本地端口”
(powershell)ssh -R 10000:127.0.0.1:10000 user@远程服务器IP2、在远程服务器上
(bash)export http_proxy=http://$WIN_IP:10000 export https_proxy=http://$WIN_IP:10000 curl https://www.google.com这样远程的 127.0.0.1:10000 会通过 ssh 隧道转到本机 Windows 的 127.0.0.1:10000,也就是网络代理端口。
直接在 windows 的 powershell 里面开启反向代理连接远程服务器就可以,无需通过 wsl 。
之前被绕进去的点,企图通过wsl去设置远程代理,但其实wsl只是用于发起 ssh 的媒介,本质上还是 windows 代理,只是里面的 WIN_IP 需要换成 windows 的实际 IP,而非 wsl 自身的 IP(127.0.0.1)
但也可以 WSL 自己不开代理,直接把远程流量从 WSL 转发到 Windows 网络代理端口
1、在 ubuntu(wsl)里拿到 Windows 主机 IP:
(bash)WIN_IP=$(ip route | awk '/^default/ {print $3; exit}') echo $WIN_IP2、在 wsl 里执行:
(bash)ssh -R 10000:${WIN_IP}:10000 user@远程服务器IP3、在远程服务器上:
(bash)export http_proxy=http://127.0.0.1:10000 export https_proxy=http://127.0.0.1:10000 curl https://www.google.com链路 “远程→反向代理windows的端口”,其中 wsl 只是用来发起 ssh。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)