WSL 设置端口号
上一篇文章中讲解《WSL2Linux 子系统(七)》,本篇则讲解WSL与Windows之间端口转发规则和正向端口代理。代理分为正向代理和反向代理。正向代理是为了减少避免用户直接访问服务器,造成服务器压力过大,内网用户要通过代理服务器才能访问外网。反向代理是外部的客户请求要通过代理服务器才能访问内部服务器,将服务器内部化的操作。在 Windows Subsystem for Linux (WSL) 中端口需要借用Windows netsh 添加端口转发规则,实现与Windows之间端口代理;而外网则需要指定代理服务器实现。
作者:炭烤毛蛋 ,点击博主了解更多。
提示:端口代理规则需要重启wsl生效。
文章目录
- WSL 设置端口号
- 1. Windows 设置代理端口号
- 1.1 IPV4 端口转发
- 1.2 IPV6 端口转发
- 1.3 端口映射错误
- 2. WSL启用代理
- 3. WSL 启用proxychains代理
- Tips
- 结语
1. Windows 设置代理端口号
在WSL (Windows Subsystem for Linux) 中,端口转发通常是通过Windows上的网络工具来实现的,而不是在Linux子系统内部直接处理。使用Windows上的netsh命令进行端口转发,打开Windows命令提示符或powershell(管理员)。
1.1 IPV4 端口转发
- 创建端口转发规则
从端口80到WSL的端口9090的流量转发,接下来以简单连接方法。
netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=9090 connectaddress=<WSL IP>
参数 | 说明 |
---|---|
listenport | 表示要监听的 Windows 端口 |
listenaddress | 表示监听地址, 0.0.0.0 表示匹配所有地址, 比如Windows 既有Wifi网卡, 又有有线网卡, 那么访问任意两个网卡, 都会被监听到,当然也可以指定其中之一的IP的地址,从而隔离内网 |
connectport | 表示要连接的 WSL 端口 |
connectaddress | 表示要转发的地址,如果可用通过localhost来访问WSL2,这里设置为localhost;如果暂不支持, 需要改为 WSL2的IP地址 |
替换为你的WSL实例的IP地址。如果不知道WSL IP,可以通过WSL查询。
ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 46:d8:85:b4:23:20 brd ff:ff:ff:ff:ff:ff
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 3e:2c:06:c4:9c:66 brd ff:ff:ff:ff:ff:ff
4: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
5: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/sit 0.0.0.0 brd 0.0.0.0
6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:55:78:A3:8C brd ff:ff:ff:ff:ff:ff
inet 172.24.60.66/20 brd 172.24.63.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:fe7f:a38c/64 scope link
valid_lft forever preferred_lft forever
如果你使用的是Windows防火墙,需要添加一个规则来允许这些端口的流量。确保防火墙设置允许流量通过用到的端口。
- 查看当前端口转发规则
netsh interface portproxy show all
侦听 ipv4: 连接到 ipv4:
地址 端口 地址 端口
--------------- ---------- --------------- ----------
0.0.0.0 80 172.24.60.66 9090
- 删除端口转发规则
删除之前创建的端口转发规则
netsh interface portproxy delete v4tov4 listenport=80 listenaddress=0.0.0.0
1.2 IPV6 端口转发
ipv6端口与ipv4基本相同,唯一区别参数 v4tov6。
netsh interface portproxy add v4tov6 listenport=80 listenaddress=0.0.0.0 connectport=9090 connectaddress=<WSL IP>
查看之前创建的ipv6端口转发规则
netsh interface portproxy show all
侦听 ipv4: 连接到 ipv6:
地址 端口 地址 端口
--------------- ---------- --------------- ----------
0.0.0.0 80 172.24.60.66 9090
可以看到已经连接到 ipv6 地址
删除之前创建的ipv6端口转发规则
netsh interface portproxy delete v4tov6 listenport=80 listenaddress=0.0.0.0
1.3 端口映射错误
错误 ssh_exchange_identification: read: Connection reset by peer
建议将connectaddress
指定为WSL2的ipv4的回环地址:
netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=9090 connectaddress=`WSL2 IP Address`
2. WSL启用代理
在WSL(Windows Subsystem for Linux)中设置代理通常涉及两个步骤:配置网络和修改环境变量。
# 打开WSL的网络配置文件
notepad $Env:WINDIR\System32\drivers\etc\hosts
在文件中添加代理服务器的IP和端口
# 代理服务器的IP和端口
0. 0.0.0 3128 your.proxy.server
WSL 修改环境变量以使用代理
# 设置环境变量
export http_proxy=http://your.proxy.server:3128
export https_proxy=https://your.proxy.server:3128
export ftp_proxy=http://your.proxy.server:3128
export no_proxy="localhost,127.0.0.1,::1"
请将your.proxy.server替换为你的代理服务器的实际IP地址或域名,将3128替换为你的代理端口。
需要用户名和密码的代理,你需要在URL中包含这些信息。
export http_proxy=http://username:password@your.proxy.server:3128
3. WSL 启用proxychains代理
某些场景中无法下载软件包,需要使用proxychains工具来强制应用程序通过代理服务器进行网络连接。
proxychains是一个在Linux下非常流行的工具,它可以用来通过SOCKS代理来转发TCP连接。
安装proxychains
sudo apt-get install proxychains
修改 proxychains 代理配置
proxychains.conf文件通常位于/etc/proxychains.conf。
#socks5 127.0.0.1 1080
socks5 192.168.1.100 3128
取消注释(删除#)并修改socks5行,将192.168.1.100和3128替换为你的代理服务器的实际IP地址和端口。
proxychains3 链接错误
ERROR: ld.so: object 'libproxychains.so.3' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
查找当前系统正确 libproxychains.so.3的路径信息
find /usr/lib/ -name libproxychains.so.3
/usr/lib/x86_64-linux-gnu/libproxychains.so.3
解决方式则是修正 LD_PRELOAD 声明
sudo vim /usr/bin/proxychains3
#!/bin/sh
echo "ProxyChains-3.1 (http://proxychains.sf.net)"
if [ $# = 0 ] ; then
echo " usage:"
echo " proxychains <prog> [args]"
exit
fi
-export LD_PRELOAD=libproxychains.so.3
+#export LD_PRELOAD=libproxychains.so.3
+export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libproxychains.so.3
exec "$@"
Tips
查找wsl IP
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
结语
不枉博主详细讲解,欢迎订阅博主–炭烤毛蛋 。