Linux-SSH反向连接(内网穿透,打洞)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux-SSH反向连接(内网穿透,打洞)相关的知识,希望对你有一定的参考价值。

参考技术A 对于外网来说,公司内部的是内网,中间隔了个防火墙,如果想从外网去访问公司内部网络,正常情况下是不可行的,也无法做到端口转发(除非在公司防火墙上打个洞),一般场景有外网访问公司内网,外网访问学校的内网。

外网无法访问到内网,归根结底就是因为内网对于外网不可见,一般要实现外网访问到内网,有两种方法:一种是端口映射,就相当于将内网主机的某个端口在防火墙上开放出来,这样一来就相当于是两台外网主机的通信了;另一种就是SSH反向连接,就是内网是可以访问到外网的,那么内网主机先主动连接外网主机,这样一来就建立了连接,然后外网主机就可以ssh登录到内网主机了,这就是所谓的反向连接。但是这种连接是不稳定的,可能会断掉,但也有方法解决。

前面说过这种反向连接不稳定,可能随时会断开,这时候又得重复上面步骤去打通,而当你无法登陆上内网主机去操作以上的步骤时候,那就没法玩了。
这时可以使用autossh来解决这个随时断开的问题。
具体指令为:
autossh -M 2000 -NfR 1234:localhost:22 user1@172.16.32.11 -p 88
解释:

ubuntu下设置autossh开机自动启动

然后执行

注意:

阿里云服务器ECS利用反向代理FRP内网穿透

阿里云ECS利用反向代理 F#R#P 内@网@穿@透

FRP 服务端搭建

有时候在外地要访问家里的电脑或者网络硬盘,没有固定IP怎么办呢?这时候就面临内网穿透需求了。*

内@网@穿@透

一般内@网@穿@透有哪些解决方法呢?一般有反向代理、动态域名等等。前者用的多有frp,后者有花生壳等。

  • frp,即本文所讲的。frp 是一个可用于内网穿透的高性能的反向代理应用。其官网链接为:https://github.com/fatedier/frp
  • sunny_ngrok,国外反向代理。
  • 花生壳,动态域名,通过解析域名和对应的IP地址。这个国产商业软件,要实名制,绝大多数产品是要付费的。

frp简介

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp
协议。其官网链接为:https://github.com/fatedier/frp

frp分为服务器端frps客户端frpc

准备条件

带公网IP的VPS服务器,假设IP地址是111.111.111.111。如果没有VPS服务器具体可以参考阿里云域名注册与备案、服务器ECS购买与登录.

  • 外网PC ACentOS7 。
  • 内网PC B Windows Server 2016 。
  • 内网PC C CentOS7 。

VPS服务器端搭设

  • 下载frps到服务器
frp_0.34.3_linux_arm64.tar.gz
https://github.com/fatedier/frp/releases
  • 修改服务器配置文件(frps.ini):
[common]
#与客户端绑定的进行通信的端口
bind_port = 7000
  • 启动frp命令:
./frps -c ./frps.ini &

内网PC 客户端搭设(windows版本)

  • 下载客户端的frp:

在这里 https://github.com/fatedier/frp/releases 找到对应版本的frp。
因为在服务器端是使用了0.16.0版本,所以需要找到对应版本下载。

  • 编辑frpc.ini文件
[common]
server_addr = 111.111.111.111
server_port = 7000
​
[RemoteDesktop]
#windows下使用远程桌面
type = tcp
local_addr = 127.0.0.1
local_port = 3389
remote_port = 7002
  • 启动frp客户端frpc:

找到frpc.exe对应文件夹,在其地址栏输入cmd,则进入以该文件夹为路径的cmd命令行。在命令行下输入以下命令即可启动。

frpc -c frpc.ini

远程连接

外网PC在命令行下输入mstsc,启动远程桌面

在远程桌面的计算机输入框中,输入VPS对应ip及客户端frpc.ini中对应的remote_port。

在这里则是111.111.111.111:7002

内网PC 客户端搭设(linux版本)

  • 下载客户端的frp:

在这里 https://github.com/fatedier/frp/releases 找到对应版本的frp。

  • 编辑frpc.ini文件
[common]
server_addr = 111.111.111.111
server_port = 7000
​
[ssh1]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7003


  • 启动frpc客户端。
./frpc -c ./frpc.ini &

远程连接

外网电脑ssh登录内网PC,输入命令为

ssh -p 7003 root@111.111.111.111

其中 -p为端口号,登录用户名为root。

假若已经保存了秘钥文件id_rsa,可以用-i 指定秘钥文件

ssh -p 7003  root@111.111.111.111 -i id_rsa

过程问题

1.Windows server2016远程桌面默认关闭 ,需要手动打开

2. Windows10远程桌面连接提示:出现身份验证错误,要求的函数不受支持


修改win10 注册表

计算机\\HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System

然后在System文件夹内创建文件夹项:\\CredSSP\\Parameters

然后在Parameters文件夹内,新建 DWORD(32)位值(D),文件名为 AllowEncryptionOracle,值为2

重新远程连接一下,错误消失,可以正常连接

阿里云ECS 端口开放

  1. 7000 frp 服务端使用的端口
  2. 7002 frp 客户端(win)连接使用的端口
  3. 7003 frp 客户端(linux)连接使用的端口

开机自启

frp 服务端开机自启

创建服务文件

sudo vim /etc/systemd/system/frpc.service

填入如下信息,ExecStart请自行替换

[Unit]
Description=Frp Client
After=network.target
Wants=network.target

[Service]
Restart=on-failure
RestartSec=5
ExecStart=/root/frp/frp_0.34.3_linux_amd64/frps -c /root/frp/frp_0.34.3_linux_amd64/frps.ini

[Install]
WantedBy=multi-user.target
#刷新服务列表:
systemctl daemon-reload

#设置开机自启
systemctl enable frpc
#关闭开机自启
systemctl disable frpc

#启动服务
systemctl start frpc
#停止服务
systemctl stop frpc

frp 客户端(linux)开机自启

同上

frp 客户端(win)开机自启

方法一:

创建一个快捷方式到 C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp
里面 这个方法最大缺点是电脑要登录后才能连接,所以一般不用这个方法

方法二:

用计划任务实现,方法看这里 http://diannaobos.com/post/405.html

方法三:

用winsw将frp注册为系统服务 这个方法最稳定,这是我最终用的方法。 下载winsw
https://github.com/kohsuke/winsw/releases
,改名为winsw.exe,放到frp相同的目录里,在同一个目录里创建一个utf8编码的文本文件,文件名是 winsw.xml,内容是:

<service>
    <id>frp</id>
    <name>frp这里是服务的名称</name>
    <description>这里是服务的介绍,随便写</description>
    <executable>frpc</executable>
    <arguments>-c frpc.ini</arguments>
    <onfailure action="restart" delay="60 sec"/>
    <onfailure action="restart" delay="120 sec"/>
    <logmode>reset</logmode>
</service>

以管理员权限打开一个命令窗口,cd到frp所在目录,执行:

winsw install
winsw start

如果要卸载服务,执行命令:

winsw stop
winsw uninstall

以上是关于Linux-SSH反向连接(内网穿透,打洞)的主要内容,如果未能解决你的问题,请参考以下文章

内网穿透是什么意思?有什么用?用什么软件好?

红蓝对抗之隧道技术第一篇(内网穿透端口映射&端口转发Netsh端口转发CS正反向连接多层内网Burp设置上游代理访问内网MSF protfwd端口转发/重定向)

利用cpolar-内网穿透家中的树莓派,并开机自启动

阿里云服务器ECS利用反向代理FRP内网穿透

内网穿透的高性能的反向代理应用FRP-自定义404错误页实践可行版

NUC980开源项目40-PLC远程下载/内网穿透(非技术)