frp内网穿透服务搭建

背景

回家后不方便登录校园网,但是仍有同学需要访问实验室服务器进行实验等其他任务。

遂通过frp搭建隧道,使外网可以直接SSH连接校园网中的服务器。

准备

一台公网IP服务器(阿里云、腾讯云等)
实验室内网服务器

安装

包地址

目前可以在 Github 的 Release 页面中下载到最新版本的客户端和服务端二进制文件,所有文件被打包在一个压缩包中。

部署

公用IP服务器部署

  1. 登录阿里云服务器,在 home 目录下 执行 wget命令下载
wget https://github.com/fatedier/frp/releases/download/v0.43.0/frp_0.43.0_linux_amd64.tar.gz

如果出现

ERROR: cannot verify github.com's certificate, issued by ‘CN=DigiCert TLS Hyb                       rid ECC SHA384 2020 CA1,O=DigiCert Inc,C=US’:
  Unable to locally verify the issuer's authority.
To connect to github.com insecurely, use `--no-check-certificate'.

使用以下方式下载:

wget https://github.com/fatedier/frp/releases/download/v0.43.0/frp_0.43.0_freebsd_amd64.tar.gz --no-check-certificate
  1. 下载完毕,解压
tar -xvf frp_0.43.0_linux_amd64.tar.gz
  1. 解压完毕后进入目录
~ cd /frp_0.43.0_linux_amd64
  1. 解压文件夹内:
  • “frps”、“frps_full.ini”、"frps.ini"是放在服务器端运行的可执行文件和配置文件。

  • “frpc”、“frpc_full.ini”、"frpc.ini"是放在客户端端运行的可执行文件和配置文件。

公用IP服务器配置修改

就是frp服务器配置

  1. 修改配置文件

在具有公网 IP 的机器上部署 frps后,修改 frps.ini 文件,这里使用了最简化的配置,设置了 frp 服务器用户接收客户端连接的端口:

vi frps.ini
[common]
bind_port = 7000

其他配置方法

vi frps.ini
[common]
bind_addr=0.0.0.0
bind_port = 7000
token=12345678
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin123

说明:

  • "bind_addr"是服务器本地IP,不改。

  • "bind_port"是frp监听端口。

  • "token"是验证token建议设置上。

  • "dashboard_port"是frp面板端口。

  • “dashboard_user”"dashboard_pwd"是面板的账户密码。

  • 除了"bind_addr"参数之外的其他参数,都可以根据需求自行修改,务必记住改过的参数。

  • 配置项中用到的端口,需要在服务器上开启

内网服务器部署

与公网IP服务器部署操作相同

内网服务器配置修改

就是修改frp客户端服务器配置

在需要被访问的内网机器上(SSH 服务通常监听在 22 端口)部署 frpc,修改 frpc.ini 文件,假设 frps 所在服务器的公网 IP 为 x.x.x.x:

[common]
server_addr = x.x.x.x
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

local_ip 和 local_port 配置为本地需要暴露到公网的服务地址和端口。remote_port 表示在 frp 服务端监听的端口,访问此端口的流量将会被转发到本地服务对应的端口。

启动

编写配置文件后,分别启动 frps 和 frpc。

  • 先通过 ./frps -c ./frps.ini 启动服务端(公网IP服务器)
启动成功日志
2022/05/29 21:47:44 [I] [root.go:200] frps uses config file: ./frps.ini
2022/05/29 21:47:44 [I] [service.go:194] frps tcp listen on 0.0.0.0:7000
2022/05/29 21:47:44 [I] [root.go:209] frps started successfully
  • 再通过 ./frpc -c ./frpc.ini 启动客户端(内网服务器)
    启动成功日志
2022/05/29 22:05:20 [I] [service.go:349] [7a66655c123dcec2] login to server success, get run id [7a66655c123dcec2], server udp port [0]
2022/05/29 22:05:20 [I] [proxy_manager.go:144] [7a66655c123dcec2] proxy added: [ssh]
2022/05/29 22:05:20 [I] [control.go:181] [7a66655c123dcec2] [ssh] start proxy success

出现启动失败,请见下文常见问题

通过 SSH 访问内网机器,假设用户名为 test:

ssh -oPort=6000 test@x.x.x.x

frp 会将请求 x.x.x.x:6000 的流量转发到内网机器的 22 端口。

后台长期运行

终端模式下,中断关闭,frp服务也会关闭,需要启用后台进程运行。

服务端后台运行

nohup ./frps -c frps.ini >/dev/null 2>&1 &

客户端后台运行

./frpc.-c ./frpc.ini  &

其他方法

在后台长期运行,也可以结合其他工具使用,例如 systemdsupervisor

定时检查服务

意外情况可能导致后台frp服务中断,需要定时检查出现进程退出及时重启。

shell脚本

frpc_check.sh

#!/bin/bash 
ps -fe|grep frpc.ini |grep -v grep
if [ $? -ne 0 ];then
   ./frpc -c ./frpc.ini &
else
   echo "frpc IS Running"
fi

frps_check.sh

#!/bin/bash 
ps -fe|grep frpc.ini |grep -v grep
if [ $? -ne 0 ];then
   ./frps -c ./frps.ini &
else
   echo "frps IS Running"
fi

$?:

最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;

如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确,或者无结果

crond 定时任务启动

crond-e

编辑:每隔五分钟执行frp服务检查

*/5 * * * * sh frpc_check.sh

常见问题

问题1:

输入

./frps -c ./frps.ini

报错

bash: ./frps: Permission denied
解决方法
sudo ./frps -c ./frps.ini

问题2

输入

sudo ./frps -c ./frps.ini

报错

sudo: ./frps: command not found
解决方法
sudo chmod 777 frps

问题3

如何关闭frp?

#锁定进程并杀死
ps -aux|grep frp
kill -9 frpPID

问题4

输入

./frps -c ./frps.ini

报错

Segmentation fault

安装包版本问题,下载指定版本

问题5

多端口映射:

#frpc.ini
[range:test_tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 6000-6005,6007
remote_port = 6000-6005,6007

实际连接成功后会创建 7 个 proxy,命名为 test_tcp_0, test_tcp_1 ... test_tcp_6。

相关连接

frp (gofrp.org)
https://blog.csdn.net/weixin_57351182/article/details/118598853

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容