如何通过WSL2隧道将Windows本地pgAdmin连接到CF数据库服务?
WSL2 建立CF SSH隧道供Windows pgAdmin访问解决方案
问题根因
- WSL2默认采用NAT网络模式,宿主机Windows无法直接通过
127.0.0.1访问WSL2内部监听的端口 - 默认的
cf ssh端口转发规则仅绑定WSL2内部的127.0.0.1回环接口,不会暴露给外部网络访问
解决方案1(直接绑定公网接口,配置简单)
- 替换WSL2内的CF SSH命令,指定转发端口绑定所有接口:
cf ssh -L 0.0.0.0:8888:servername:5432 app-name
注:如果出现端口绑定权限报错,可在命令后追加--allow-ssh参数重试
2. 放行WSL2内部防火墙的对应端口,以Ubuntu默认的ufw为例:
sudo ufw allow 8888/tcp
如果使用CentOS等带firewalld的发行版,执行:
sudo firewall-cmd --add-port=8888/tcp --permanent && sudo firewall-cmd --reload
- 获取WSL2当前的内网IP地址:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
执行后会输出类似172.27.12.34的IP地址,记录该地址
4. 打开Windows端的pgAdmin,新建连接时地址填写上述获取的WSL2内网IP,端口填8888,其余数据库账号密码等配置按正常规则填写即可连接。
解决方案2(端口代理模式,安全性更高)
如果不希望CF隧道端口暴露到公网,可通过Windows自带的端口代理实现127.0.0.1访问:
- WSL2内执行原始的CF SSH命令,仅绑定内部回环:
cf ssh -L 127.0.0.1:8888:servername:5432 app-name
- 按上述方案1的步骤3获取WSL2内网IP
- 打开Windows端的命令提示符/终端,使用管理员权限执行端口代理命令:
netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=8888 connectaddress=<替换为WSL2的内网IP> connectport=8888
- 此时pgAdmin直接填写
127.0.0.1端口8888即可正常访问数据库。
常见优化
WSL2重启后内网IP会自动变更,可通过以下方式简化配置:
- 在WSL2的
~/.bashrc或~/.zshrc末尾添加获取IP的命令,每次启动终端时自动打印IP - 编写Windows脚本自动获取WSL2 IP并更新
C:\Windows\System32\drivers\etc\hosts文件,绑定固定域名如wsl.local,后续pgAdmin直接填写域名即可,无需每次修改IP
内容的提问来源于stack exchange,提问作者Bitfighter
相关产品推荐
相关产品推荐

