SSH端口转发

学校实验室置办了一台服务器,配置高、网速快,比我自己的笔记本不知道高到那里去了,但是虽然服务器是在校园网里,但是我想要连接我在服务器上NAT模式的Linux虚拟机。之前通过Bandit了解到SSH可以用来进行端口转发,构建安全隧道,因此想要通过SSH的转发机制穿透NAT,将思路整理一下,记在这里。【后来才发现vmware可以设置NAT映射……】

1. 基础知识

1.1 什么是端口转发

SSH是专为远程登录会话和其他网络服务提供安全性的协议,SSH会自动加密客户端与服务端之间通信的数据,所谓端口转发,就是一种能将其他TCP端口的网络数据通过SSH连接来转发,并提供SSH的加密服务,也可以称之为SSH隧道。因为ssh作为常见服务,同时提供加密保护,所以常被用来突破防火墙限制来建立连接,我的目的就是穿透NAT的限制。

1.2 SSH实现端口转发

SSH有两个参数可以用来进行端口转发:-L-R

官方文档解释如下:

-L [bind_address:]port:host:hostport

指定将本地(客户端)主机上给定TCP端口或Unix套接字的连接转发到远程端的给定主机和端口或Unix套接字。
这可以通过分配套接字来侦听本地端的TCP端口(可选地绑定到指定的bind_address)或Unix套接字。 只要连接到本地端口或套接字,就会通过安全通道转发连接,并从远程计算机连接到主机端口hostport或Unix套接字remote_socket。
也可以在配置文件中指定端口转发。 只有超级用户才能转发特权端口。 可以通过将地址括在方括号中来指定IPv6地址。
默认情况下,本地端口根据GatewayPorts设置进行绑定。 但是,可以使用显式bind_address将连接绑定到特定地址。 “localhost”的bind_address表示侦听端口仅限本地使用,而空地址或“*”表示该端口应该可从所有接口使用。

-R [bind_address:]port:host:hostport

指定将远程(服务器)主机上给定TCP端口或Unix套接字的连接转发到本地端。
这可以通过分配套接字来侦听TCP端口或远程端的Unix套接字。 每当连接到此端口或Unix套接字时,连接都通过安全通道转发,并且从本地计算机连接到主机端口hostport或local_socket指定的显式目标,或者,如果没有显式目标 指定后,ssh将充当SOCKS 4/5代理并转发到远程SOCKS客户端请求的目标的连接。
也可以在配置文件中指定端口转发。 只有在远程计算机上以root用户身份登录时,才能转发特权端口。 可以通过将地址括在方括号中来指定IPv6地址。
默认情况下,服务器上的TCP侦听套接字仅绑定到回送接口。 这可以通过指定bind_address来覆盖。 空的bind_address或地址'*'表示远程套接字应该侦听所有接口。 仅当启用了服务器的GatewayPorts选项时,才会指定远程bind_address(请参阅sshd_config(5))。
如果port参数为“0”,则侦听端口将在服务器上动态分配,并在运行时报告给客户端。 与-O forward一起使用时,分配的端口将打印到标准输出。

1.2.1 -L 选项

ssh -L [bind_address:]port:host:hostport user@remotehost

在主机A执行该命令,可以将通过主机A的端口port流量通过主机remotehost转发至主机host的指定端口hostport

流量如下:

A:port <---FireWall---> remotehost:SSH_Port <------> host:hostport

1.2.2 -R 选项

-R [bind_address:]port:host:hostport user@remotehost

在主机A执行该命令,将remotehostport的流量通过A发送至hosthostport

流量如下:

remotehost:port <---FireWall---> A:SSH_port <------> host:hostport

2. 通过端口转发穿透NAT

  • 服务器:实验室中vmware里的虚拟机
  • 本机:校园网中
  • 远程服务器:有公网地址的阿里服务器

2.1 远程服务器设置

  • 打开服务器sshd的GatewapPorts选项:
    • 修改/etc/ssh/shhd_config文件
    • 文件末尾添加GatewayPorts yes

2.2 服务器设置

  • 使用命令ssh -NfR 8888:127.0.0.1:22 user@remotehost
  • 成功登陆后就不用管了

2.3 本机

使用ssh命令直接连接远程服务器8888端口即可

网上的资料说,可以在服务器中使用autossh来替代ssh,维持连接的稳定,但是没搞懂,怎么配置……

3. 参考链接

使用ssh隧道穿透NAT访问内网主机(超干货)

ssh隧道转发内网穿透功能实现(反弹式木-马原理)

实战 SSH 端口转发

原文地址:https://www.cnblogs.com/ph1sh/p/14710629.html