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

需求:远程ssh连接到内网中的一台Linux主机

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的版本后,问题解决

  • 首先还是通过链接下载:https://github.com/fatedier/frp/releases,由于我的服务端和客户端均为linux,因此我都下载的是frp_0.59.0_linux_amd64.tar.gz这个版本(下载解压缩即可),唯一需要注意的是,不同的端侧修改不同的配置文件即可
  • 在服务端修改frps.toml配置文件,写入以下内容
#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数据库等等
启动方式和之前一致,然后即可成功连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值