搭建一个完整的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. 【JVM】JVM 概述、内存结构、溢出、调优(基础结构+StringTable+Unsafe+ByteBuffer)

    什么是 JVM ? 定义 Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境) 好处 一次编写,到处运行 自动内存管理,垃圾回收功能 数组下标越界 ...

  2. HouseRobber II

    // // Created by Administrator on 2021/7/27. // #ifndef C__TEST01_HOUSEROBBER2_HPP #define C__TEST01 ...

  3. SpringSecurity+Jwt遇到的bug

    最近在使用springsecurity整合Jwt的时候,遇到了一Bug,卡住了很久,记录一下. 编写Jwt工具类JwtUtil,编写Jwt认证的核心过滤器JwtAuthenticationFilter ...

  4. Anaconda 安装与卸载

    Anaconda是一个免费开源的Python和R语言的发行版本,用于计算科学(数据科学.机器学习.大数据处理和预测分析),Anaconda致力于简化软件包管理系统和部署.Anaconda的包使用软件包 ...

  5. CMake 工程调用 Makefile 编译项目

    本文主要介绍如何将一个依赖 Makefile 项目(MIDG)移植到 CMake 上. 首先介绍项目文件结构,文件主要由三个目录组成 3rdParty include src 其中,3rdParty ...

  6. Mysql查询优化汇总 order by优化例子,group by优化例子,limit优化例子,优化建议

    Mysql查询优化汇总 order by优化例子,group by优化例子,limit优化例子,优化建议 索引 索引是一种存储引擎快速查询记录的一种数据结构. 注意 MYSQL一次查询只能使用一个索引 ...

  7. 【Python小试】统计一条核酸序列中频数非0或为2的双核苷酸

    概念 双核苷酸由任意2个碱基组成 测试1 dna = "AATGATGAACGAC" #一一列举 dinucleotides = ['AA','AT','AG','AC', 'TA ...

  8. GO 语言使用copy 拷贝切片的问题

    使用copy,直接改变原片的值,而不是先创建一个副本.

  9. 关于基因GO分析的DAVID简单使用

    利用DAVID简单的进行GO富集度分析(这里只做简单的分析,即看基因是否存在在GO的三个过程里面) 比如我们有一组要分析的基因:TRPV6    CXADR    PROM1    GRAMD2   ...

  10. 1.TwoSum-Leetcode

    #include<iostream> #include<algorithm> #include<map> using namespace std; class So ...