查看 ubuntu 里的 ip
shell
# or ip addr show
ip a
wsl 端口映射到主机
js
module.exports = {
devServer: {
host: '0.0.0.0', // 监听所有IP地址,包括局域网IP
port: 8080, // 设置服务的端口号
disableHostCheck: true, // 禁用主机检查(开发环境中可以使用)
},
}
cmd
ip addr show eth0
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=8080 connectaddress=<WSL_IP_ADDRESS>
#查看所有代理了的端口
netsh interface portproxy show all
开启自动映射 wsl 端口到主机
创建setup_wsl_portproxy.bat
文件添加到开机目录 C:\Users\【your user】\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
bat
@echo off
REM Start WSL
echo Starting WSL...
wsl -d Ubuntu-22.04 -e echo WSL is now started
REM Function to get WSL IP address
:GET_WSL_IP
for /f "tokens=*" %%i in ('powershell.exe -Command "(wsl -e ip -4 addr show eth0 | Select-String -Pattern 'inet\s+(\d+\.\d+\.\d+\.\d+)' ).Matches.Groups[1].Value"') do set wsl_ip=%%i
REM Check if WSL IP is empty
if "%wsl_ip%"=="" (
echo Waiting for WSL to start...
timeout /t 5 > nul
goto GET_WSL_IP
)
REM Configure port forwarding
netsh interface portproxy delete v4tov4 listenport=5003 listenaddress=0.0.0.0
netsh interface portproxy add v4tov4 listenport=5003 listenaddress=0.0.0.0 connectport=5003 connectaddress=%wsl_ip%
netsh interface portproxy delete v4tov4 listenport=3006 listenaddress=0.0.0.0
netsh interface portproxy add v4tov4 listenport=3006 listenaddress=0.0.0.0 connectport=3006 connectaddress=%wsl_ip%
echo Port forwarding set for IP %wsl_ip%
mysql 代理
- 确认 MySQL 在 Windows 上允许远程访问:
默认情况下,MySQL 可能只监听 localhost。你需要确保 MySQL 配置为监听所有 IP 地址。
打开 MySQL 的配置文件(通常是 my.ini 或 my.cnf),文件位置可能在 C:\ProgramData\MySQL\MySQL Server 8.0\my.ini 或 C:\Program Files\MySQL\MySQL Server 8.0\my.ini。
找到 [mysqld] 部分,确保有以下配置项:
ini
bind-address = 0.0.0.0
- 保存文件并重启 MySQL 服务。
- 创建允许远程访问的 MySQL 用户: 打开 MySQL 命令行客户端,使用具有足够权限的账户登录,并执行以下 SQL 命令:
sql
CREATE USER 'your_user'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'root'@'%';
- 在 WSL 中安装 MySQL 客户端:
shell
sudo apt update
sudo apt install mysql-client
- 重启 MySQL 服务
cmd
# MySQL80 替换成自己的mysql服务名
Restart-Service -Name 'MySQL80'
# or use below shell
# net stop MYSQL57
# net start MYSQL57
# 查询window服务 TODO grep
sc query type= service state= all | findstr "MySQL"
wsl clash proxy
WSL 通过 Win 访问网络,所以 WSL 的网关指向的是 Windows,DNS 服务器指向的也是 Windows,设置 WSL 的 proxy 为 win 的代理 ip+端口即可
WSL 中的 DNS server 在/etc/resolv.conf 中查看,该文件是由/etc/wsl.conf 自动生成的。
如果关闭了 wsl.conf 中自动生成 resolve.conf 并自行修改了 resolve.conf,DNS nameserver 并不是本机 win ip
需要开启 wsl.conf 的自动生成,再运行以下命令
添加到环境变量设置中,例如~/.zshrc
shell
# 定义一个函数来设置WSL代理
set_proxies() {
# 获取 IPv4 地址并去除前后的空白字符
hostip=$(powershell.exe -Command "ipconfig" | awk '/IPv4/{print $NF}' | tail -n 1 | tr -d '[:space:]'| tr -d '\n'| tr -d '\r')
# 等待 hostip 变量被赋值后再设置代理
if [ -n "$hostip" ]; then
export https_proxy="http://$hostip:7890"
echo 主机IP: $hostip
echo Proxy URL:$https_proxy
export http_proxy="http://$hostip:7890"
export all_proxy="socks5://$hostip:7890"
export no_proxy="localhost,127.0.0.1,::1,192.168.1.32"
else
echo "Failed to get hostip"
fi
}
set_proxies
# 注意: clash 需要开启 Allow Lan