zoukankan      html  css  js  c++  java
  • 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 端口转发

  • 相关阅读:
    微信坚硬的后脚跟
    [项目整理]Win32,MFC的可执行文件只能运行一次
    美司法部索要维基解密志愿者谷歌账户内容
    QML性能
    OSGi 的核心配置、动态化及问题
    OSGi 的由来和本质特性
    机器视觉与计算机视觉
    人工智能与深度学习
    活着就能改变世界
    选择与执行
  • 原文地址:https://www.cnblogs.com/ph1sh/p/14710629.html
Copyright © 2011-2022 走看看