Skip to content

SSH 隧道实现端口映射

丹摩实例没有独立公网IP,当前为统一的外网 IP 接入。大多数服务发布的需求,可通过丹摩的自定义服务功能实现,但当前只支持 http/grpc/websocket 传输协议的服务转发。

如果实例内部服务为 TCP/UDP 服务,则可以使用 ssh 打隧道的方式实现端口映射。自定义服务默认只能创建 5 条,也可以使用 ssh 隧道的方式规避这个限制。

⭐️ ssh 隧道映射的效果:

  • 正向代理,把远端实例内的端口 映射 到本地电脑上。
  • 反向代理,把本地的服务的端口 映射 到丹摩实例内部。

ssh-tunnel-2.png

代理方式

正向代理

🔥 把丹摩远端实例内的一个端口映射到本地电脑上的一个端口上,即在本地启动端口,把本地端口数据转发到远端。

ssh-tunnel-3.png

使用方法

使用方法如下:

bash
ssh -p [ssh端口] -CNg -L [本地的端口]:localhost:[实例的端口] root@cn-north-b.ssh.damodel.com

举例说明,如果想把丹摩实例中 50000 端口代理映射到本机的 9001,执行下面命令即可。

bash
ssh -p 37191 -CNg -L 9001:localhost:50000 root@cn-north-b.ssh.damodel.com

测试效果

在本地对端口进行请求。

bash
curl 127.0.0.1:9001

telnet 127.0.0.1 9001

反向代理

🔥 把本地的服务端口映射到丹摩实例内的一个端口上,即在丹摩实例启动端口,把远端端口数据转发到本地。

ssh-tunnel-4.png

⭐️ 场景说明

比如,你在本地电脑起了一个 web 服务,但丹摩实例内部是无法直接访问你的服务,需要你有外网 IP 才可以。这里可以通过 ssh 反向代理的方式,把你本地的 web 服务通过 ssh 隧道映射到丹摩实例内。在丹摩实例内部可以直接 127.0.0.1 地址来请求。

使用方法

使用方法如下:

bash
ssh -p [ssh端口] -CNg -R [本地的端口]:localhost:[实例的端口] root@cn-north-b.ssh.damodel.com

⚠️ 跟上面相比,区别是 -R

举例说明,如果想把本地的 50000 端口代理映射到丹摩实例内的 9001 端口,则执行下面命令。

bash
ssh -p 37191 -CNg -R 9001:localhost:50000 root@cn-north-b.ssh.damodel.com

测试效果

在丹摩实例内,可以执行下面的测试命令,也可以使用对应的客户端做访问测试。

bash
# 判断端口是否存在
lsof -i :9001
netstat -tunalp|grep 9001
ss -an|grep 9001

# 端口连通性探测
curl 127.0.0.1:9001
telnet 127.0.0.1 9001

FAQ

🤔 如何获取实例的 ssh 地址及账号密码。

ssh-tunnel-1.png

bash
ssh -p 37191 root@cn-north-b.ssh.damodel.com

cQweBoss!@#
  • 37191 是该实例 ssh 对外端口。
  • cQweBoss!@# 是该实例的 root 密码。

😅 搞不定 SSH 端口映射

通常 Mac 和 Linux 主机,方便操作 ssh 端口映射,而 windows 需要费点功夫。

联系丹摩技术客服,解决无法映射问题。或者,由技术人员直接在丹摩侧进行临时的公网端口映射。

类似效果:

bash
nc -vz 211.93.18.36 40001