frp 内网穿透
1. 背景介绍
哈喽,大家好啊!我是你们的新朋友 Paxtonx。马上就要“五一”了,小伙伴们准备去哪浪啊?最近一封邮件打破了我的思绪,提醒我要续费了,想起两年前的那个下午手贱点开了某链接。于是,本着不折腾就会死的精神,我决定实施下搁置很久的内网穿透计划。这篇文章就是记录下内网穿透的学习步骤,方便大家在需要的时候做参考。希望能给大家带来一丢丢的帮助,ok,废话不多说,我们开始吧!
2. frp 是什么?
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
本次选用的工具就是 frp 啦,更多资料请移步至官网( gofrp.org )。
3. 环境介绍
简单介绍下,外网服务器是 CentOS 7 系统(以下简称服务端),客户端是 Mac mini 的 Apple M1 版本(以下简称客户端)。
4. 安装
4.1 下载安装文件
在客户端与服务端上分别下载 frp ,需要注意的是,由于客户端是 Apple 的 M1 芯片,需选择对应的版本。
# 服务端
wget https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gz
# 客户端
wget https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_darwin_arm64.tar.gz
4.2 解压
下载完成之后进行解压,如果嫌文件名太长,那就改个名字先
# 服务端
tar -zxvf frp_0.48.0_linux_amd64.tar.gz
# 客户端
tar -zxvf frp_0.48.0_darwin_arm64.tar.gz
4.3 修改配置文件
进入对应的目录,观察下里面有什么东东。
# 服务端
[root@localhost frp_0.48.0_linux_amd64]# ls -l
总用量 27420
-rwxr-xr-x 1 1001 123 12505088 3月 7 19:46 frpc
-rw-r--r-- 1 1001 123 11345 3月 7 19:51 frpc_full.ini
-rw-r--r-- 1 1001 123 126 3月 7 19:51 frpc.ini
-rwxr-xr-x 1 1001 123 15532032 3月 7 19:47 frps
-rw-r--r-- 1 1001 123 5907 3月 7 19:51 frps_full.ini
-rw-r--r-- 1 1001 123 157 4月 25 04:28 frps.ini
-rw-r--r-- 1 1001 123 11358 3月 7 19:51 LICENSE
# 客户端
➜ frp_0.48.0_darwin_arm64 ls -l
total 57784
-rw-r--r-- 1 paxtonx staff 11358 3 8 11:51 LICENSE
-rwxr-xr-x 1 paxtonx staff 13040018 3 8 11:45 frpc
-rw-r--r-- 1 paxtonx staff 264 4 25 19:35 frpc.ini
-rw-r--r-- 1 paxtonx staff 11345 3 8 11:51 frpc_full.ini
-rwxr-xr-x 1 paxtonx staff 16501506 3 8 11:45 frps
-rw-r--r-- 1 paxtonx staff 26 3 8 11:51 frps.ini
-rw-r--r-- 1 paxtonx staff 5907 3 8 11:51 frps_full.ini
这里需要说明的是, frps
、frps.ini
、frps_full.ini
是服务端所需文件,frpc
、frpc.ini
、frpc_full.ini
是客户端所需文件,其中 .ini
是配置文件。
那么接下来就需要进行一些配置,分别修改下frps.ini
、frpc.ini
,具体配置如下:
# 服务端
[root@localhost frp_0.48.0_linux_amd64]# vi frps.ini
[common]
bind_port = 7000
dashboard_port = 7500
token = 123456
dashboard_user = admin
dashboard_pwd = 123456
vhost_http_port = 8080
vhost_https_port = 443
# 客户端
➜ frp_0.48.0_darwin_arm64 vim frpc.ini
[common]
server_addr = xxx.xx.xxx.xxx
server_port = 7000
token = 123456
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[web-test]
type = http
local_ip = 127.0.0.1
local_port = 8080
remote_port = 8080
custom_domains = www.yourdomain.com
4.4 启动服务
配置好文件之后启动对应的服务,出现以下信息,即为成功。
# 服务端
[root@localhost frp_0.48.0_linux_amd64]# ./frps -c frps.ini
2023/04/25 18:56:18 [I] [root.go:206] frps uses config file: frps.ini
2023/04/25 18:56:18 [I] [service.go:200] frps tcp listen on 0.0.0.0:7000
2023/04/25 18:56:18 [I] [service.go:261] http service listen on 0.0.0.0:8080
2023/04/25 18:56:18 [I] [service.go:276] https service listen on 0.0.0.0:443
2023/04/25 18:56:18 [I] [service.go:317] Dashboard listen on 0.0.0.0:7500
2023/04/25 18:56:18 [I] [root.go:215] frps started successfully
# 客户端
➜ frp_0.48.0_darwin_arm64 ./frpc -c frpc.ini
2023/04/26 08:58:41 [I] [service.go:299] [4f32f1d8ccdd802b] login to server success, get run id [4f32f1d8ccdd802b], server udp port [0]
2023/04/26 08:58:41 [I] [proxy_manager.go:142] [4f32f1d8ccdd802b] proxy added: [ssh web-test]
2023/04/26 08:58:42 [I] [control.go:172] [4f32f1d8ccdd802b] [ssh] start proxy success
2023/04/26 08:58:42 [I] [control.go:172] [4f32f1d8ccdd802b] [web-test] start proxy success
4.5 frps dashboard
frp 启动成功后,在浏览器中输入服务端的地址 server_addr:dashboard_port ,会提示输入用户名、密码。也就是 frps dashboard ,展示 Overview、Proxies 等信息。其他信息小伙伴们自行探索吧。
5. 服务管理
如果想让服务在后台一直默默运行,我们使用 nohup
命令即可:
# 服务端
[root@localhost frp_0.48.0_linux_amd64]# nohup ./frps -c frps.ini >/dev/null 2>&1 &
# 客户端
➜ frp_0.48.0_darwin_arm64 nohup ./frpc -c frpc.ini >/dev/null 2>&1 &
查找进程
# 服务端
[root@localhost frp_0.48.0_linux_amd64]# ps -aux|grep frp
root 4063 0.1 3.0 719652 15304 pts/0 Sl 18:59 0:00 ./frps -c frps.ini
# 客户端
➜ frp_0.48.0_darwin_arm64 ps -ef|grep frpc
501 39057 37065 0 10:44上午 ttys000 0:00.07 ./frpc -c frpc.ini
501 39174 37065 0 10:48上午 ttys000 0:00.01 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox frpc
终止进程
# 服务端
[root@localhost frp_0.48.0_linux_amd64]# kill -9 4063
# 客户端
➜ frp_0.48.0_darwin_arm64 kill -9 37065
6. 应用场景
以上就介绍完整个流程了,那么会有小伙伴疑问了,什么场景下使用呢?
首先,如果在客服端上安装 nginx,作为一个 Web 服务器,在 8080 端口上部署对应的 Web 服务比如 localhost:8080 ,显然这个地址在外网是不能访问的。
其次,借助 frp ,我们将 localhost:8080 修改成服务端的 IP 及端口进行访问,如果有域名绑定的话,这样 www.yourdomian.com:8080 就可以访问到客户端的内容啦。
最后,感谢小伙伴能够看到这里。。
7. 文档参考
官方参考文档 gofrp.org/docs/refere…