问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

使用frp搭建内网穿透实现远程ssh连接

创作时间:
作者:
@小白创作中心

使用frp搭建内网穿透实现远程ssh连接

引用
CSDN
1.
https://blog.csdn.net/weixin_46267824/article/details/140524480

本文将详细介绍如何使用frp实现内网穿透,从而实现远程SSH连接到内网中的Linux主机。文章将从frp的基本概念入手,逐步介绍服务端和客户端的配置步骤,最后完成远程连接的完整流程。

frp介绍

frp 是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp, udp, http, https等协议。想了解更多可浏览该项目的Github主页: https://github.com/fatedier/frp/

本文仅对基于frp实现ssh作说明,其他功能不赘述

基本流程

首先我们需要三台机器

  • 内网机器(也就是我们需要远程控制的机器,它是frp的客户端)
  • 中转机器(一台具有公网IP的机器,我这里使用的是腾讯云的机器,它是frp的服务端)
  • 操作端(即我们手边的机器)

简单来说,frp所做的就是利用中转机器进行一个端口映射,以ssh为例,我们需要访问中转机器的某个端口(比如7000),然后frp将该请求映射到内网机器中对应的端口上(22)

服务端配置

进入服务端(中转机器)的命令行,执行以下命令

wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_linux_amd64.tar.gz
tar -zxvf frp_0.22.0_linux_amd64.tar.gz
cp -r frp_0.22.0_linux_amd64 frp
cd frp

进入该目录后,我们仅需关注frps.ini文件,因为这是服务端的配置文件,将以下配置写入:

bind_port = 7000
dashboard_port = 7500
token = 12345678
dashboard_user = admin
dashboard_pwd = admin
  • bind_port:服务端和客户端连接的端口
  • dashboard_port:服务端面板的端口
  • token:服务端和客户端连接的口令
  • dashboard_user:面板登陆的用户名
  • dashboard_pwd:面板登陆的密码

然后启动服务端并持续运行

nohup ./frps -c frps.ini &

如果你的公网IP为2.2.2.2,此时应该可以通过访问2.2.2.2:7500进入面板,如下:

客户端配置

进入内网机器,在该网站下载对应的软件版本:https://github.com/fatedier/frp/releases,下载后解压缩、进入目录(和服务端配置类似),此时我们仅关注frpc.toml(新版本的软件是.toml而不再是.ini),写入以下配置

[common]
server_addr = 2.2.2.2
server_port = 7000
token = 12345678
tls_enable = false
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7001
  • server_addr:中转机器的公网IP
  • server_port:服务端和客户端连接的端口,和上述一致
  • token:连接口令
  • tls_enable:不加上这个配置项会报错(session shutdown),设置为true也会报错(EOF),因此设置为false,表示不使用TLS协议
    [ssh]是ssh的基本配置,表示将服务端的7001端口映射到本地的22端口

然后在命令行运行以下命令即可

nohup ./frpc -c frpc.toml &

操作端连接

在操作端打开命令行,输入以下命令

ssh -p 7001 user@ip

需要注意的是,user是内网机器的用户名而不是中转机器的用户名(密码也是),ip是公网IP

以上,即可成功连接。

2024/07/22更新

由于上述服务端frps使用的版本是0.22,而客户端frpc使用的版本是0.58,所以虽然可以连接,但是会出现连接掉线的问题;在尝试将服务端和客户端都更换为0.59的版本后,问题解决

#bindPort是服务端与客户端之间通信使用的端口号
bindPort = 7000
# 验证方式
auth.method = "token" # 选择token方式验证
auth.token = "123456" # 必须与客户端的token一致,用于验证连接
#服务端可视化面板开启端口
webServer.addr = "0.0.0.0"
webServer.port = 7500
# 服务端可视化面板登录信息
webServer.user = "用户名"
webServer.password = "密码"
# 多路复用
transport.tcpMux = true
# 最大连接池数量
transport.maxPoolCount = 10

在客户端修改frpc.toml文件,写入以下内容

serverAddr = "2.2.2.2" # 你的公网IP
#服务端与客户端之间通信使用的端口号,和服务端保持一致
serverPort = 7000
auth.method = "token"
auth.token = "123456"
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 7001

这里仅配置了ssh,也可以配置其他内容,比如mysql数据库、redis数据库等等

启动方式和之前一致,然后即可成功连接

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号