多终端网络穿透与连接:

1.业务描述

1.1.实现终端 A 借助自建中继链路,访问远端终端 C 部署的各类服务,具体可访问服务及对应访问方式如下:

  (1)SSH 服务:占用22端口,可通过 XShell 等 SSH 客户端建立连接;

  (2)SFTP 服务:复用22端口,可通过 WinSCP、XFtp 等文件传输客户端操作文件;

  (3)HTTP 网页服务:占用8080端口,直接使用浏览器即可访问;

  (4)MySQL 数据库服务:占用3306端口,可通过 Navicat 这类数据库管理客户端连接操作。

1.2.现存问题:

  终端 A 与终端 C 网络不通,A 无法直接发起对 C 的网络访问,跨网络环境下常规直连方案无法生效。

1.3.解决方案:

  A通过1台或多台中间机器组成的“中继链路”,跳转访问到C。

2.工作模式

2.1.简单转接

2.1.1.网络环境

  (1)中间节点B1可直接访问目标设备C;C也可以是部署在B1上的虚拟机

  (2)访问端A无法直连C,但可以正常连通B1

2.1.2.中继链路配置

  在B1部署、配置 socks 服务,做端口转发:

    SSH 转发:本地端口2201,转发至C:22

    HTTP 转发:本地端口2801,转发至C:8080

    MySQL 转发:本地端口2601,转发至C:3306

2.1.3.A 端最终访问方式

  (1)SSH/SFTP:填写B1的 IP、端口2201即可连接

  (2)HTTP 网页服务:填写B1的 IP、端口2801通过浏览器访问

  (3)MySQL 数据库:填写B1的 IP、端口2601通过数据库客户端连接

适用单中继节点场景,部署最简单,包含两种拓扑:B1、C 为两台独立设备;C 属于 B1 内部虚拟机。

2.2.多通道级联模式

2.2.1.网络环境

  (1)最内侧中继B2可直接访问目标C

  (2)外层中继B1无法直连C,但可以访问B2

  (3)访问端A可直接访问B1

2.2.2.中继链路配置

  需要逐层在中继节点配置 socks 端口转发:

    B2配置:

      SSH 端口2201 → C:22

       端口2801 → C:8080

      MySQL 端口2601 → C:3306

    B1配置:

      SSH 端口2201 → B2:2201

      HTTP 端口2801 → B2:2801

      MySQL 端口2601 → B2:2601

2.2.3.A 端最终访问方式

  和简单转接一致,均使用B1IP + 对应端口:

    SSH/SFTP:B1:2201

    HTTP:B1:2801

    MySQL:B1:2601

2.2.4.说明

  (1)支持任意数量中继节点B1、B2、B3…链式延伸,每一级都要配置全套服务转发端口,指向下一跳中继

  (2)缺点是多级节点端口配置工作量大,更推荐使用下文隧道级联模式降低运维成本

2.3.隧道模式

2.3.1.网络环境

  (1)内侧中继B2可直连目标C

  (2)外层中继B1不能直连C,可正常访问B2

  (3)访问端A可访问B1,A也可以和B1部署在同一台机器

2.3.2.中继链路配置

  依托单一隧道端口承载所有业务流量:

    B2部署 socks:隧道端口2400,转发本地127.0.0.1:2400

    B1部署 socks:

      隧道端口2401,转发B2:2400,建立底层传输隧道

      SSH 端口2201转发C:22、HTTP2801转发C:8080、MySQL2601转发C:3306,三项业务全部绑定隧道2401传输

2.3.3.A 端最终访问方式

  依旧通过B1IP + 业务端口访问:

    SSH/SFTP:B1:2201

    HTTP:B1:2801

    MySQL:B1:2601

2.3.4.适用场景

  当内侧节点B2防火墙严格限制对外开放端口、仅能放行少量端口时优先选用;仅需要对外开放隧道端口(如 2400),所有业务流量都通过这一条隧道传输,大幅减少需要放行的端口数量。

2.4.隧道级联模式

2.4.1.网络环境

  (1)访问端A、目标侧C分属不同私网,仅有内网私网 IP,无法互相直接连通

  (2)内网中继B2与C处于同一私网,可互相访问;B2也可直接和C合并为同一台设备

  (3)公网中继B1部署在公网,拥有独立公网 IP

  (4)A、B2都可以主动向外连接公网B1,但B1无法主动向内访问A、B2的私网地址

2.4.2.中继链路配置

  B2部署 socks:托管端口2401,反向连接转发至公网B1:2400

    B1部署 socks:

      SSH2201→C:22、HTTP2801→C:8080、MySQL2601→C:3306,所有业务流量依托隧道2401传输

2.4.3.A 端最终访问方式

  统一使用公网B1的 IP + 业务端口访问:

    SSH/SFTP:B1:2201

    HTTP:B1:2801

    MySQL:B1:2601

2.4.4.适用场景

  两端设备都在内网、无公网 IP,借助一台公网服务器做托管中继,实现跨私网穿透访问,是异地内网互通最常用的模式。

2.5.托管隧道模式

2.5.1.网络环境(多层内网隔离)

  (1)最内侧中继B3与C在内网 N3,B3可直连C

  (2)B2无法访问C,可连通B3

  (3)B1无法访问C,可连通B2

  (4)访问端A可以正常访问最外层B1

2.5.2.中继链路配置

  逐层搭建底层隧道,业务端口仅需在最外层B1配置:

    B3:隧道端口2400转发本地127.0.0.1:2400

    B2:隧道端口2401转发B3:2400

    B1:隧道端口2401转发B2:2401;再配置业务端口2201/2801/2601分别转发 C 的对应服务,全部复用同一条隧道传输

2.5.3.A 端最终访问方式

  直接访问最外层B1:

    SSH/SFTP:B1:2201

    HTTP:B1:2801

    MySQL:B1:2601

2.5.4.模式优势

  对比普通多通道级联,只需要逐级配置隧道端口,业务转发规则仅需配置一次,大幅降低多层内网场景下的配置维护工作量,多层网络跳转优先选用该模式。

3.运行方式

3.1.Linux版:

3.1.1.执行文件:socks点击下载

3.1.2.配置文件:socks.conf点击下载

3.1.3.操作

  (1)部署:下载linux版本的socks文件及socks.conf后,存放于在服务端任意文件夹下

  (2)运行:访问socks文件所属目录下,执行./socks & 进行后台启动。

  (3)停止:可使用命令 ps -ef | grep socks 查询端口并kill pid

  (4)访问:浏览器访问服务端socks地址:http://服务端ip或域名:2300/socks。输入配置文件中的账号密码进行登陆。

3.2.Windows版:

3.2.1.执行文件:socks.exe点击下载

3.2.2.配置文件:socks.conf点击下载

3.2.3.操作

  (1)下载:点击前文中windows版文件下载,进行下载socks.exe及socks.conf文件,存放于相同目录下。

  (2)运行:双击本地socks.exe或powershell运行: .socks.exe -o log.txt 将日志写入log.txt

  (3)使用:浏览器访问http://ip:2800/index.html转发至http://127.0.0.1:本地端口/index.html

  (4)停止:运行时,会同步打开黑窗口输出日志,关闭黑窗口即停止运行。

4.socks配置

4.1.socks自带简易http服务,可以从浏览器中通过网页对其进行配置

  (1)从socks运行的本机浏览器上进行配置:http://127.0.0.1:2300/socks

  (2)从其他机器的浏览器上进行配置:http://IP:2300/socks,IP为socks所在主机的IP地址

4.2.通道(Socket Listen List):当前开启的转发端口

4.3.缺省通道:socks首次运行时缺省打开2个通道端口

  (1)admin:端口=2300,用于从浏览器对其进行配置

  (2)tunnel:端口=2400,用于支持隧道

4.4.新增通道:在页面中部设置参数后,点击“Insert”即可

  (1)Type:必填。协议类型。其中admin、tunnel、hosting为socks用于支持自身功能的特殊协议,其余为普通业务协议,如果所需转发的协议不在列表中,只需要选择“tcp”即可

  (2)Listen Port:必填。中转端口号。该端口号不能重复,也不能被系统中其他进程所占用

  (1)Forward IP:必填。前转目标IP地址,或下1跳socks的IP地址;

  (2)Forward Port:必填。前转目标端口,或下1跳socks的中转端口;

  (3)Tunnel:可选。如果前转的目标地址不是本机直达,而是通过隧道模式穿越其他中继结点,则填写所使用的隧道号,即当前socks通道中协议类型为tunnel、hosted的通道的“Listen Port”值;

  (4)External IP:可选。仅对于ftp、iiop、tunnel协议,如果本机在防火墙内,其外网访问IP与自身IP地址不一致时,应在此处填写其外网访问IP。其他情况无需填写;

  (5)nternel IP:可选。仅对于ftp协议,如果本机在防火墙外,其在防火墙内映射IP与自身IP地址不一致时,应在此处填写其墙内映射IP。其他情况无需填写;

  (6)Description:可选。该通道的简要描述,便于区分各通道用途。

4.5.编辑通道

  (1)点击某个通道的“Forward”栏,在页面中部可编辑通道的部分参数包括Type、Forward IP、Forward Port、tunnel、Description,之后点击“Modify”即可

  (2)通道的”Listen Port”值不能修改,需要变更时,需先删除该通道,然后新增

  (3)部分由socks内部派生的通道无法编辑,只能查看,包括hosted、ftp-U、ftp-D、iiop等

4.6.关闭(删除)通道

  在上面的通道列表中,选中需要关闭的通道,点击“Shutdown”即可

4.7.活跃信道(Socket Connection List)

  列出当前正在使用某一通道进行通信的活跃连接信息

4.8.断开(关闭)信道

  下方表格中,选中需要断开的信道,点击“Shutdown”即可

4.9.自解析通道

  (1)某些协议的通道,其前转目标IP和端口在配置时无需确定,而是从信道中动态提取真实的前转目标IP和端口

  (2)配置方法:

    Forward IP = 127.0.0.1

    Forward Port = Listen Port

    Tunnel = 0,即不借助其他隧道

  (3)支持自解析通道的协议类型包括:

    admin:socks直接解析信道中的HTTP请求,返回其自身配置页面,不进行前转

    tunnel:从信道中提取前转目标的类型、IP、端口和隧道号

    http:本通道可用作浏览器的HTTP代理,从信道HTTP Header中的Host指令中提取实际访问的Web服务器地址

    ftp:本通道可用作FTP代理,从信道的SITE指令中提取实际访问的FTP服务器地址

    telnet:本通道可用作访问多个telnet服务器,连接时用户在提示“Host: ”后输入真实服务器地址

4.10.admin通道

  (1)admin通道用于对socks进行配置管理

  (2)admin的3种配置模式:

    自解析模式:管理当前socks

      自解析通道,默认端口号=2300

      访问方式:http://IP:Port/socks

      更换端口的方法:Port1 ==> Port2

        打开网址:http://IP:Port1/socks

        新建类型为admin、端口为Port2的自解析通道

        打开网址:http://IP:Port2/socks

        关闭端口号为Port1的admin通道

    虚拟端口转发模式:管理其他socks

      Forward IP、Forward Port、Tunnel指向其他socks

      Listen Port = 0,即不占用额外端口

      从当前socks页面内,点击“Listen on”栏链接打开对方管理页面

    实体端口转发模式:管理其他sock

      Forward IP、Forward Port、Tunnel指向其他socks

      Listen Port 为有效端口

      可以从当前socks页面内点击”Listen on”栏链接打开对方管理页面

      也可以直接输入URL打开:http://IP:Port/socks

4.11.tunnel通道

  (1)tunnel通道用于创建端到端隧道,优点:

    当存在多个中继结点B1,B2,B3,...时,业务通道(ssh、ftp、http等)只需在B1上配置和修改,无需在后续的B2,B3,...上逐一配置,减轻配置和修改的工作量

    减少中间结点B2、B3、...需要开启的端口数量,尤其是当B2在防火墙内,对外暴露的端口数量很少时,可达到单端口多路复用的效果

  (2)tunnel通道的4种配置模式:

    隧道入口模式:

      Forward IP、Forward Port指向下1跳结点的tunnel端口,Tunnel=0

      在当前socks上配置其他各类业务通道,这些通道的Tunnel值均等于本隧道端口值

    隧道中转模式:

      Forward IP、Forward Port指向下1跳结点的tunnel端口,Tunnel=0

    隧道出口模式:

      自解析通道,默认端口号=2400

    隧道接驳模式:

      该模式为隧道入口模式的一个变种,仅用于一种特殊情形:隧道出口端仍不能直达最终的目标IP,还需要接驳出口端上的其他反向隧道(hosted),才能到达最终目的地

      Forward IP、Forward Port指向下1跳结点的tunnel端口,Tunnel=在隧道出口端需要接驳的其他隧道端口,该隧道端口一般为反向隧道端口(hosted)

4.12.特殊配置

  (1)FTP通道

    FTP协议与常规TCP差别:

      除了占用常规的21端口(控制端口)外,在目录列表、文件上传、文件下载过程中,需要动态占用另一端口(数据端口)

      FTP数据端口支持Active/Passive两种端口模式,由客户端和服务器协商,Active模式由客户端创建数据接收端口,服务端主动连接客户端;Passive相反(简称PASV)

    socks配置时只需要配置控制端口的转发通道,数据端口由socks根据协议内容自动按需分配和释放,无需干预

    使用FTP客户端中,应在服务器属性(一般在“高级设置”)中,强制使用PASV模式

    如果socks位于防火墙内,外网地址与本机地址不一致,需填写通道的External IP为外网IP地址,以便FTP客户端可以正确通过该IP连接数据端口

  (2)HTTP通道

    假设要访问的Web服务器为C,端口为8080;现准备使用服务器B的2800端口为其中转

    如果Web服务器其返回的HTML页面中无下面的特殊情形,则可以简单配置http类型的中转通道,Forward IP = C,Forward Port = B;之后,在浏览器中输入URL即可访问C上的Web服务: http://B:2800/

    特殊情形包含如下几类:

      页面内包含类似”http://C:8080/”形式的完整URL。此时浏览器将无法顺着该链接打开页面或者调用后台API

      Web服务程序检查Web请求,只对主机名称为“C:8080”时才能正确响应,对“B:2800”无法返回正确网页

    解决方法:使用浏览器的HTTP代理机制

      将该http通道配置为自解析通道,即Forward地址为:127.0.0.1:2800

      在浏览器的代理设置中,设置HTTP代理为B:2800(Windows系统中,代理设置一般位于“控制面板”-->Internet属性-->连接-->局域网设置-->高级-->HTTP)

      在浏览器地址栏直接输入目标URL,可正确打开网页及后续链接: http://C:8080/

    socks暂不支持”https://”形式的HTTP代理

4.13.中转端口分配原则

  (1)初始至少创建以下2个自解析通道(建议使用socks初次运行时默认开启的2个通道)

    admin: 2300 ==> 127.0.0.1:2300

    tunnel: 2400 ==> 127.0.0.1:2400

  如果该socks只转接到单台主机上的服务端口

    可以直接使用目标端口值作为中转端口值,以便在客户端使用缺省端口。无需记忆端口值,例如:

      mysql : 3306 ==> C:3306

      http : 8080 ==> C:8080

    但对于某些协议类型,该端口在中转结点上已经被系统其它服务所占用,如ssh(22);或者该端口虽未占用,但需为未来的本机服务预留,如http(80);则需要更换中转端口,例如:

      ssh : 2200 ==> C:22

      http : 8080 ==> IP:80

    另外,如果需要转接的目标端口值小于1024,为了使用与之相同的中转端口,在Linux/Unix系统上,需要以root身份运行socks,可能带来安全风险。此时也建议将中转端口更换为1024以上的值,例如:

      smtp : 2500 ==> C:25

  (2)推荐采用的中转端口值范围为:2000 ~ 2999,理由:

    大于1024

    不与常规的各种服务端口冲突

    在防火墙上配置接入端口访问规则时,连续的端口号可以简化规则配置

  如果该socks需要转接到同一子网/不同子网的多台主机,应按照一定的规律来进行中转端口的分配,便于统一管理。以2000~2999之间的端口范围,即2XYZ为例,推荐如下机制:

    2X用于区分协议:(参见附表)

    YZ用于区分不同的目标主机

    当需要转接多个子网时,Y用于区分子网,Z用于区分子网内的主机

2X协议/业务示例
20telnet及远程桌面telnet : 2000 ==> 23
vnc : 2201 ==> 5900
21FTPftp : 2100 ==》 21
22SSH及Windows远程桌面ssh : 2200 ==> 22
winterm : 2202 ==> 3389
23socks管理admin : 2300 ==> 2300
24socks隧道tunnel : 2400 ==> 2400
25邮件类smtp : 2500 ==> 25
pop : 2501 ==> 110
26数据库类mysql : 2600 ==> 3306
oracle : 2601 ==> 1521
27应用自定义 
28HTTP2800 ==> 80
2801 ==> 8080
29应用自定义 

4.13.远程运维典型示例

  场景描述

    在客户内网中部署有2台主机

      C1:应用服务器,Linux系统,Web服务+MYSQL

      C2:采集设备,Windows系统

    C1和C2在内网中,外部无法访问

    客户现场有1台Windows电脑B2(或者运维人员自带的笔记本),其具备上Internet能力,同时可连到内网访问C1/C2

    公网上有1台厂家托管的Linux服务器B1,其具备公网地址,但是防火墙安全限制,只能访问该服务器的22、2400端口

    现运维人员在公司内,其电脑A可以上网,欲对C1、C2进行各类运维操作:

      通过浏览器访问C1上的Web服务

      通过XShell登录C1

      通过XFtp向C1上传文件

      通过Windows远程桌面登录C2

      通过Navicat访问C1的数据库

4.14.各主机配置过程

  C1:无需特殊配置

  C2:开启Windows远程桌面服务

  B2:

    安装和运行Windows版socks

    打开本机浏览器,输入URL访问管理页面:http://127.0.0.1:2300/socks

    增加通道:hosting : 2402 = B1 : 2400

  B1:

    安装和运行Linux版socks

    因B1的2300端口外网不可访问,故无法从A上通过URL(http://B1:2300/socks)对B1进行配置

  A:

    安装和运行Windows版socks

    打开本机浏览器,输入URL访问管理页面:

    增加通道:tunnel : 2401 = B1:2400

    增加通道:tunnel : 2402 = B1:2400:2402(第2个冒号后为Tunnel参数值,以下同)

    增加通道:admin : 2301 = 127.0.0.1:2300:2401

    增加通道:admin : 2302 = 127.0.0.1:2300:2402

    增加通道:ssh : 2201 = C1:22:2402

    增加通道:http : 2801 = C1:80:2402

    增加通道:winterm : 2202 = C2:3389:2402

    增加通道:http : 2801 = C1:80:2402

    增加通道:mysql : 2601 = C1:3306:2402

4.15.远程运维操作

  以下操作均在A上完成

    管理A上的socks:

      在浏览器中输入: http://127.0.0.1:2300/socks

    管理B1上的socks:

      在A的socks管理页面中,点击通道2301的Listen on栏链接

    管理B2上的socks:

      在A的socks管理页面中,点击通道2302的Listen on栏链接

    用XShell登录C1

      主机地址设置为:IP地址 = 127.0.0.1,端口 = 2201

    用Xftp登录C2并传输文件

      主机地址设置为:IP地址 = 127.0.0.1,端口 = 2201

    用远程桌面客户端登录C2

      主机地址设置为:127.0.0.1:2202

    用浏览器访问C1的Web服务页面

      输入URL: http://127.0.0.1:2801/

    用Navicat访问C1上的MYSQL数据库

      数据库连接地址设置为:IP = 127.0.0.1,端口 = 2601

5.注意事项(非常重要):

5.1.Linux

  5.1.1.执行文件需赋予可执行权限

    chmod +x socks

  5.1.2.配置文件与可执行文件需在统计目录

  5.1.3.服务端端口需添加白名单

  5.1.4.务必对配置文件进行配置用户名和密码,否则将影响服务启动

    admin_user->->登陆账号

 

    admin_password->->登录密码

5.2.Windows

  5.2.1.配置文件与可执行文件需在统计目录

  5.2.2.保证本地服务端口启动

  5.2.3.需能连通服务端,为避免出现不可估计情况,请关闭防火墙,或使用cmd进行telnet测试

 

 

 

本文档来自—microbee-http 丨 软件开发框架平台