oflyhigh avatar

每天进步一点点:将远程端口映射到本地的几种方法

oflyhigh

Published: 23 Nov 2024 › Updated: 23 Nov 2024每天进步一点点:将远程端口映射到本地的几种方法

每天进步一点点:将远程端口映射到本地的几种方法

最近有个工作上的需求,需要把远程主机上的一个端口映射到本地主机上,比如将1.1.1.1:1234映射到本地机器上的127.0.0.1:2234上来,实现访问127.0.0.1:2234和直接访问1.1.1.1:1234一样的效果。

image.png
(图源 :pixabay)

为了达成这个目的,我的大脑是高速运转啊,都有什么方法能实现这个功能呢?

以前在Linux下实现类似的功能,我一般可以选择用SSH转发iptables转发或者Nginx代理转发等方式来实现。

不过Windows下似乎没有iptables;Nginx代理转发需要安装Nginx软件且不说,是不是只支持http\https流量;那么貌似只有SSH转发可选了?

使用SSH转发

既然暂时没啥可选的,那就试试SSH转发喽,先来回顾一下SSH转发的三种类型:

  • 动态转发:-D [bind_address:]port
  • 本地转发:-L [bind_address:]port:host:hostport
  • 远程转发:-R [bind_address:]port:host:hostport

对比一下我们的需求,貌似本地转发是我们所需要的。

不过虽然指令看起来很简单,但是由于好久没用过,已经很是生疏,所以还是费了一番力气之后才搞定它。

为了便于演示,我将演示如何将本地127.0.0.1:23和一台远程服务器的上SSH端口(假设是1.1.1.1:1234,实际IP和端口隐掉啦)建立映射,并测试映射后的效果。

根据我们的需求,最基本的指令如下:

plink.exe -L 127.0.0.1:23:1.1.1.1:1234 user@1.1.1.1 -P 1234

对上述指令的简单解释如下:

  • 127.0.0.1:23 是我们要访问的端口
  • 1.1.1.1:1234是远程服务器的目标地址和端口
  • user@1.1.1.1是使用用户user登录到远程服务器1.1.1.1
  • -P 1234远程服务器SSH服务使用1234端口(而不是默认的22端口)

执行上述指令,会弹出SSH窗口并提示我们输入密码,然后回车启动会话,这时端口映射就建立起来了。
1732334976106.png

好了,现在我们来测试一下:
1732335075655.png

看熟悉的登录界面出来了,我们登录上去后,发现确实也是目标主机:
1732335107058.png

所以,上述使用SSH本地转发,将本地端口映射到目标端口的操作是可行的呢。

而且上述操作,不限于SSH端口,对远程服务器上的任何端口和服务都是适用的,完全可以满足我们的需求。我们还可以加入-C启用压缩以及-N 不执行远程指令等参数来优化设置,这里就不再赘述了。

使用netsh转发

虽然SSH本地转发能达成我们的目标,但是依然有几个问题。

第一需要使用plink软件(之后又测试了一下,在对指令稍作修改后,windows 10之后自带的ssh就可以完美满足需求)。

如果说第一个还可以避免掉,第二问题就有些不能忍受了,就是我们需要登录远程服务器才能建立起来这个映射,而实际上我们并不需要登录就可以访问远程服务器上的端口,那么这个登录操作就有些多余(且不安全)。

所以,windows下有没有不需要使用额外软件,且不需要登录远程服务器,就实现相应的映射功能呢?

答案是有的,那就是使用netsh 设置转发

首先,以管理员方式运行命令行窗口:

image.png

然后使用如下指令添加转发:

netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=23 connectaddress=1.1.1.1 connectport=1234

使用如下指令查看转发:

netsh interface portproxy show all

1732353083458.png

使用如下指令删除转发:

netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=23

看,刚才新增的被我们删除啦。
1732353476393.png

至于使用netsh设置的映射是否好用?那当然是非常好用啦,O哥也逐一测试过,不过测试方法和上边的相同,所以就不再赘述啦。

总结

我们可以使用SSH转发或者netsh转发来将远程端口映射到本地,想必之下使用netsh无需额外安装(或下载)软件,也无需登录远程服务器,感觉更加方便。

你学废了吗?

反正经过我一番努力之后,成功实现了远程端口到本地的映射,但是我的工作却遇到了新问题,非映射所能解决,我是彻底废了,呜呜呜。

Leave 每天进步一点点:将远程端口映射到本地的几种方法 to:

Written by

Programmer, Maker, Freelancer, Witness. Make friends, Make money, Make life better!

Read more #cn posts


Best Posts From oflyhigh

We have not curated any of oflyhigh's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From oflyhigh