搭建一个完整的frp服务链需要:

  1. VPS一台(也可以是具有公网IP的实体机)

  2. 访问目标设备(就是你最终要访问的设备)

  3. 简单的Linux基础(如果基于Linux配置的话)

我这里使用了腾讯云服务器作为服务端(Ubuntu Server 20.04 LTS)、本地Linux虚拟机作为要访问的客户端(Ubuntu 20.04 LTS)和本地Xshell(用于远程连接客户端)进行测试。

最后是想把实验室的电脑进行内网穿透实现 ssh 远程访问。

流程很简单,服务端和客户端都下载 frp 配置文件,分别修改配置(地址、端口映射),然后启动运行即可。本文基于 Linux 配置,macOS 和 Windows 流程一致,最多是命令可能有点区别。


服务端配置

下载 frp 的安装包(GitHub连接在此),注意服务端和客户端要同一版本。我这里是64位Linux,最新版是0.38.0,根据需要选择即可,速度太慢自己想办法,可以考虑本地下了通过ftp传到服务器。

wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz

解压,文件夹改名为frp,方便使用。腾讯云可能把这玩意当作木马,去控制台信任即可。

tar -zxvf frp_0.38.0_linux_amd64.tar.gz
cp -r frp_0.38.0_linux_amd64 frp
cd frp

看一下文件夹下的内容:

ubuntu@VM-0-10-ubuntu:~/frp$ ls -a
. .. frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE systemd

我们只需要关注如下几个文件

  • frps

  • frps.ini

  • frpc

  • frpc.ini

前两个文件(s结尾代表server)分别是服务端程序和服务端配置文件,后两个文件(c结尾代表client)分别是客户端程序和客户端配置文件。因为我们正在配置服务端,可以删除客户端的两个文件(删不删无所谓),然后修改frps.ini文件。

rm frpc
rm frpc.ini vim frps.ini

frps.ini文件内容如下:

[common]
bind_port = 7000

bind_port表示用于客户端和服务端连接的端口,默认绑定 7000 端口,云服务器注意打开相应端口。其实还有其他参数可选配置实现其他功能,这里只实现ssh远程访问,不作讨论。

编辑完成后即可保存,运行服务端应用:

./frps -c frps.ini

如下则成功运行:

2021/12/12 00:32:59 [I] [root.go:200] frps uses config file: frps.ini
2021/12/12 00:32:59 [I] [service.go:192] frps tcp listen on 0.0.0.0:7000
2021/12/12 00:32:59 [I] [root.go:209] frps started successfully

此时的服务端仅运行在前台,如果 Ctrl+C 停止或者关闭 SSH 窗口后,frps 均会停止运行,因而我们使用 nohup 命令将其运行在后台。nohup命令可以让你的shell命令忽略SIGHUP信号,即可以使之脱离终端运行;“&”可以让你的命令在后台运行。

nohup ./frps -c frps.ini &

此时可先使用Ctrl+C关闭nohup,frps依然会在后台运行,使用jobs命令查看后台运行的程序jobs在结果中我们可以看到frps正在后台正常运行:

[1]+  Running                 nohup ./frps -c frps.ini &

客户端配置

以同样的方式下载 frp

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

frpc.ini文件内容如下:

[common]
server_addr = 127.0.0.1
server_port = 7000 [ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

common字段下的三项即为服务端的设置。

  • server_addr为服务端IP地址,自行更改。

  • server_port为服务器端口,填入你设置的端口号即可,如果未改变就是7000。

[xxx]表示一个规则名称,自己定义,便于查询即可。这里用于 ssh 所以命名为 [ssh] 了。

  • type 连接类型,默认为 tcp,如有需要请自行查询 frp 手册。

  • local_ip 本地 IP

  • local_port 用于 ssh 的端口号,默认 22

  • remote_port 映射的服务端端口,访问该端口时默认转发到客户端的 22 端口,不同的客户端设置不同的端口号。

配置好后可以使用同样的方法后台运行客户端程序:

nohup ./frpc -c frpc.ini &

测试

启动完成后就可以通过 ssh 连接到内网服务器了,同时也可以用 sftp 传输文件。

ssh -p 6000 user@host

参考

[1] 使用 frp 进行服务器内网穿透

[2] 使用frp进行内网穿透

[3] 如何使用 frp 实现内网穿透

[4] win10下用frp内网穿透实现ssh远程连接linux服务器(Windows可参考这篇)

使用frp进行内网穿透,实现ssh远程访问Linux服务器的更多相关文章

  1. frp实现内网穿透

    frp实现内网穿透 目标 通过外网访问内网设备,本文中实现通过手机的移动流量,可以访问到树莓派设备 设备准备 需要被访问的设备(本文中使用Raspberry Pi`).公网IP设备(本文中使用阿里云 ...

  2. frp+nginx内网穿透

    frp+nginx内网穿透 背景:自己有台内网Linux主机,希望被外网访问(ssh.http.https): 准备工作 内网Linux主机-c,可以访问c主机和外网的主机-s(windows/lin ...

  3. 疫情之下,使用FRP实现内网穿透,远程连接公司电脑进行办公

    当前情况下,经常会有需要到公司电脑进行一些操作,比如连接内网OA,数据库或者提交文档.为了减少外出,将使用frp进行内网穿透的方法进行一个说明. 前提条件 1. 一台拥有公网 IP 的设备(如果没有, ...

  4. 基于frp的内网穿透实例4-为本地的web服务实现HTTPS访问

    原文地址:https://wuter.cn/1932.html/ 一.想要实现的功能 目前已经实现将本地的web服务暴露到公网,现想要实现https访问.(前提:已经有相应的证书文件,如果没有就去申请 ...

  5. frp 用于内网穿透的基本配置和使用

    frp 用于内网穿透的基本配置和使用 今天是端午节,先祝端午安康! frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便 ...

  6. 基于frp的内网穿透实例1-通过SSH访问内网机器

    原文地址:https://wuter.cn/1804.html/ 老母鸡终于到了,作为一个能运行linux系统的四核1G硬件,它还是比较小巧的. FRP 全名:Fast Reverse Proxy.F ...

  7. 分享下超实用的用skura frp做内网穿透的经验

    操作目的: 使无公网ip的主机能被外网访问,实现ssh对服务器的远程管理 硬件准备: 1.服务端:skura frp主机(skura frp 免费提供,有待创建) 2.客户端:接在无线路由器(内网)上 ...

  8. 使用FRP做内网穿透

    Github地址:https://github.com/fatedier/frp 什么是FRP? frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 h ...

  9. 如何使用 frp 实现内网穿透

    这有一个专注Gopher技术成长的开源项目「go home」 背景 作为一名程序员,家里多多少少会有一些落了灰的电脑,如果把闲置的电脑变成服务器,不仅有良好的配置,还能用来做各种测试,那就再好不过了. ...

随机推荐

  1. 全球首发-基于.NET 6长线支持Zoomla!逐浪CMS v8.6.0正式发布

    传送门: https://www.z01.com/down/3778.shtml 全新Zoomla!逐浪CMS v8.6.0 全于首个基于.net 6长线支持的CMS-Zoomla!逐浪CMS v8. ...

  2. laravel DB 类库

    DB 类操作数据库    基本用法: DB::table('tableName'); 获取操作tableName 表        增加信息        对数据库中的某个表增加数据主要有两个函数可以 ...

  3. 面霸篇:Java 集合容器大满贯(卷二)

    面霸篇,从面试角度作为切入点提升大家的 Java 内功,所谓根基不牢,地动山摇. 码哥在 <Redis 系列>的开篇 Redis 为什么这么快中说过:学习一个技术,通常只接触了零散的技术点 ...

  4. Java 如何对文件进行多个Object对象流的读写操作

    思路:把已经序列化的对象存入容器(如LinkedList<?>)中,然后用ObjectInputStream和ObjectOutputStream对这个实例化的LinkedList< ...

  5. VC练习一

    1 #include<windows.h> 2 #include<stdio.h> 3 LRESULT CALLBACK WinSunProc(HWND hwnd,UINT u ...

  6. [gym102770L]List of Products

    有一个很重要的性质:若$a\le b$且$c\le d$,则$ac\le bd$ 根据这一性质,就可以利用单调性$o(n)$求出小于$a_{x}\cdot b_{y}$的数的个数(先要对$a$和$b$ ...

  7. 关于 RocketMQ ClientID 相同引发的消息堆积的问题

    首先,造成这个问题的 BUG RocketMQ 官方已经在 3月16号 的这个提交中修复了,这里只是探讨一下在修复之前造成问题的具体细节,更多的上下文可以参考我之前写的 <RocketMQ Co ...

  8. CF1477A Nezzar and Board

    考虑 \(2x - y\) 我们改为 \(x + (x - y)\) 是一个更好的形式. 我们可以表示一个数为\(x_i + \sum_{j,k}(x_j - x_k) = K\) 我们考虑移到 \( ...

  9. CF1562E Rescue Niwen!

    开始的时候只会一个\(O(n^2log)\) 即做出所有的\(n^2\)串,显然可以用\(SAM\)来进行这样一个排序,然后\(log\)做. 但这种题我们显然要找一些友好的性质: 我们发现字符串的比 ...

  10. Codeforces 526G - Spiders Evil Plan(长链剖分+直径+找性质)

    Codeforces 题目传送门 & 洛谷题目传送门 %%%%% 这题也太神了吧 storz 57072 %%%%% 首先容易注意到我们选择的这 \(y\) 条路径的端点一定是叶子节点,否则我 ...