今天办公室停电,数据库等服务均无法直接连接,然后数据库、redis这些服务都没有对外开放。
于是想到了使用SSH将服务转发到本地来。
SSH的转发文章可以参考:SSH隧道:动态转发本地请求
SSH 端口转发
以下命令在Windows11下使用。
开启转发
ssh -NPf blog -L 3306:172.16.16.2:3306 -L 6379:172.16.16.5:6379
命令说明:
- -N 不执行远程指令,仅用于端口转发
- -P 用一个非特权端口进行出去的连接
- -f SSH完成认证并建立port forwarding后转入后台运行
- -C 使用压缩功能,是可选的,加快速度。
验证
Get-NetTCPConnection -LocalPort 3306
关闭
由于使用了f命令将其转入后台,在控制台使用ctrl + c
是无法直接关闭的,因此需要使用命令进行关闭。
Stop-Process -Id (Get-NetTCPConnection -LocalPort 3306).OwningProcess
Stop-Process -Id (Get-NetTCPConnection -LocalPort 6379).OwningProcess
基于Windows的端口转发
自Windows XP开始,Windows就内置了网络转发的功能,任何传入到本地端口的TCP连接(IPv4或IPv6)都可以被重定向到另一个本地端口或可以访问的远程计算机端口。并且系统不需要有一个专门用于侦听该端口的服务。目前只支持tcp协议的端口转发。
使用例子:
netsh interface portproxy add v4tov4 listenaddress=[localaddress] listenport=[localport] connectaddress=[destaddress]
解释一下这其中的参数意义
参数 | 说明 |
---|---|
listenport | 按端口号或服务名称指定要对其进行侦听的 IPv4 端口。 |
connectaddress | 指定要连接的 IPv4 地址。 可接受的值为 IP 地址、计算机 NetBIOS 名称或计算机 DNS 名称。 如果未指定地址,则默认值为本地计算机。 |
connectport | 按端口号或服务名称指定要连接的 IPv4 端口。 如果未指定 connectport,则默认值为本地计算机上 listenport 的值 。 |
listenaddress | 指定要侦听的 IPv4 地址。 可接受的值为 IP 地址、计算机 NetBIOS 名称或计算机 DNS 名称。 如果未指定地址,则默认值为本地计算机。 |
protocol | 指定要使用的协议。 |
举个栗子,现在某某某服务运行于172.27.20.12的8088端口,但这个服务又需要通过VPN才能访问,那么我们就需要先通过VPN打通该地址的访问通道。然后再将这个服务使用端口转发的形式暴露在内网下。
netsh interface portproxy add v4tov4 listenport=8088 connectaddress=172.27.20.12 connectport=8088
这样我们就创建好了一个对应的转发服务。
一些常用的命令:
# 显示创建的转发规则
netsh interface portproxy show v4tov4
# 删除规则
netsh interface portproxy delete v4tov4 listenport=8088
# 查看是否启动成功
netstat -ano | find listenport
# 显示系统中的转发规则列表
netsh interface portproxy show all
# 查看portproxy设置
netsh interface portproxy dump
# 清除所有端口转发规则
netsh interface portproxy reset
文章评论
博主,你这个主题是最新版本的Seaton Jiang主题吗?
@harley 是的。最底部有连接的