自己动手部署内网穿透:frp
source link: https://juemuren4449.com/archives/frp
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
如果你有云服务器,就可以考虑自己部署内网穿透服务,这篇文章就来说下 frp -- 一个简单、高效的内网穿透工具。
本文测试使用的服务器是腾讯云服务器,系统为 64 位的 CentOS 7.6;客户端是 macOS;测试的 frp 版本为 v0.34.3。
frp 简介
frp 是一个开源项目, 采用 C/S 模式,将服务端部署在具有公网 IP 的机器上,客户端部署在内网或防火墙内的机器上,通过访问暴露在服务器上的端口,反向代理到处于内网的服务。 在此基础上,frp 支持 TCP, UDP, HTTP, HTTPS 等多种协议,提供了加密、压缩,身份认证,代理限速,负载均衡等众多能力。
项目地址:https://github.com/fatedier/frp
frp 部署要求有一定的 Linux 基础知识,而且需要有一台公网服务器作为服务端。如果是纯小白或没有服务器,可以直接看上一篇文章「免费内网穿透服务推荐」,动手能力或者好奇心强的继续往下看。
frp 基本用法
frp 下载
下载地址:https://github.com/fatedier/frp/releases
服务端和客户端在一个压缩包里,但是由于服务端和客户端系统不一样,可能要下载两个包才行。我这里下载了 frp_0.34.3_linux_amd64.tar.gz
和 frp_0.34.3_darwin_amd64.tar.gz
。
服务端安装
将 frp_0.34.3_linux_amd64.tar.gz
解压,并将 frps
和 frps.ini
上传到服务器,我这里上传到了 /usr/local/frp
下。
启动 frp 服务端:
./frps -c ./frps.ini
客户端安装
将 frp_0.34.3_darwin_amd64.tar.gz
解压,用到的文件其实只有 frpc
和 frpc.ini
。
启动 frp 客户端:
./frpc -c ./frpc.ini
启动完服务端和客户端,就可以用了吗?当然不可以,默认的配置都没有修改,接下来就来看看怎么修改。
自定义域名访问内网 Web 服务
这里,我们以「自定义域名访问内网 Web 服务」为例,对服务端和客户端的配置文件(.ini 文件)进行修改。
修改 frps.ini 如下:
[common]
bind_port = 7000
vhost_http_port = 80
这里的 vhost_http_port 是 HTTP 服务绑定的端口,可以修改为其他端口,使用 80 端口的好处是访问的时候域名后不用加端口。
修改 frpc.ini 如下:
[common]
server_addr = 42.194.190.195
server_port = 7000
[web]
type = http
local_port = 80
custom_domains = j.963564449.xyz
这里的 server_addr 就是你服务器的 IP,local_port 是本地程序的端口,custom_domains 是自定义的域名。
还要做几件事情:
- 将域名 j.963564449.xyz 解析到 42.194.190.195
- 云服务器安全组要放通 7000 端口
- 启动本地 80 端口的程序
- 分别启动服务器和客户端
然后访问 http://j.963564449.xyz 即可。
这就是 frp 内网穿透的基本用法,如果觉得够用了下面的不看也可以,但如果觉得不够安全、一个映射不够用等等,那就接着往下看。
frp 进阶玩法
为了防止有人随意使用你的 frp 服务,可以添加身份认证,最简单的就是 token 认证。
设置方法:在 frps.ini 和 frpc.ini 的 [common] 段落中配置上相同的 token 参数即可。
[common]
token = juemruen
当然还有更高级的认证,可以参考文档:「frp 身份认证 」。
设置自启动
前面说到的服务端是通过命令启动的,一旦关闭远程连接,服务就会关闭,那怎么让服务保持后台运行呢?
frp_0.34.3_linux_amd64.tar.gz
解压之后可以看到一个 systemd
目录,将其中的 frps.service
文件复制到服务器的 /etc/systemd/system/
目录下,并修改 ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
,完整配置文件如下:
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
[Install]
WantedBy=multi-user.target
特别提示,如果使用此方法启动 frps 服务,vhost_http_port 又想用 80 端口,需要将配置文件中的 User=nobody 注释掉或删掉,当然也可以使用 Nginx 端口转发,这里就不细说了。
设置 frps 服务开机启动:
sudo systemctl enable frps
启动 frps 服务:
sudo systemctl start frps
这样 frps 服务就可以在后台运行了,即使服务器关机重启也会自动启动。
其他命令如下:
- 手动重启 frps 服务:
sudo systemctl restart frps
- 停止 frps 服务:
sudo systemctl stop frps
自定义二级域名
如果同时需要多个代理,那就需要多个域名,是不是要把每个域名都解析到服务器呢?
当然不是, frp 提供了「自定义二级域名」的功能。
首先,解析 *.963564449.xyz 到 42.194.190.195。
然后,修改 frps.ini 如下:
[common]
bind_port = 7000
vhost_http_port = 80
token = juemruen
subdomain_host = 963564449.xyz
再修改 frpc.ini 如下:
[common]
server_addr = 42.194.190.195
server_port = 7000
token = juemruen
[web]
type = http
local_port = 80
subdomain = j
[web1]
type = http
local_port = 8080
subdomain = w
这里的 web 和 web1 的名称可以自定义,但是不能重复。
最后,重启服务端和客户端,分别访问 http://j.963564449.xyz 和 http://w.963564449.xyz,也就是本地 80 端口和 8080 端口对应的服务。
这样,即使有很多的代理,也无需一一解析域名,只需要写配置文件就可以了。
服务端 Dashboard
服务端 Dashboard 使用户可以通过浏览器查看 frp 的状态以及代理统计信息。
想要知道有多少客户端连接了服务端?有多少个代理?通过服务端 Dashboard 就可以查看。
在 frps.ini 的 [common] 段落添加下面的代码:
dashboard_port = 7500
# dashboard 用户名密码,默认都为 admin,如果不需要,需要主动设置为空
dashboard_user = admin
dashboard_pwd = admin
云服务器安全组放通 7500 端口,然后访问「服务器IP:7500」,即 http://42.194.190.195:7500,就可以查看 Dashboard 了。
通过 Proxies-->HTTP 可以查看详细信息:
当然,文中提到的只是 frp 的部分用法,更多关于 frp 的用法和说明可以参考官方文档:https://gofrp.org/docs。
本文由 掘墓人 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: 五月 12,2021
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK