生产调试之服务转发至本地

2022-11-30 2426点热度 2条评论

今天办公室停电,数据库等服务均无法直接连接,然后数据库、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

Jalena

原创内容,转载请注明出处! 部分内容来自网络,请遵守法律适用!

文章评论

  • harley

    博主,你这个主题是最新版本的Seaton Jiang主题吗?

    2022-12-12
    • Jalena

      @harley 是的。最底部有连接的

      2022-12-14