1. 前言
frp 是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp, udp, http, https等协议。frp 项目官网是 https://github.com/fatedier/frp
frp工作原理
服务端运行,监听一个主端口,等待客户端的连接;
客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;
服务端fork新的进程监听客户端指定的端口;
外网用户连接到服务器端指定的端口,服务端通过和客户端的连接将数据转发到客户端;
客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。
2. 前置条件
想要配置frp穿透,首先必须先要有一台具有外网ip(即:可以从因特网访问)的服务器。配置教程主要分为两个部分,一是服务器端(外网服务器)的配置;二是客户端(内网服务器)配置。
3. 安装并配置frp服务器
下载安装程序, 当前(2023/05/02)最新版本为0.48.0版本
1 2 3
| wget -O /tmp/frp_0.48.0_linux_amd64.tar.gz https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gz
|
解压frp压缩包
1
| tar -zxvf /tmp/frp_0.48.0_linux_amd64.tar.gz -C /usr/local
|
解压后文件目录结构如下
1 2 3 4 5 6 7 8 9 10
| $ tree /usr/local/frp_0.48.0_linux_amd64/ /usr/local/frp_0.48.0_linux_amd64/ ├── frpc ├── frpc_full.ini ├── frpc.ini ├── frps ├── frps_full.ini ├── frps.ini └── LICENSE
|
以frpc(c代表客户端client)开头的文件都是与frp客户端相关的可执行文件和配置, 如果只是配置frp服务器端可以将这些文件删除.
以frps开头的文件是frp服务端程序, 其中frps_full.ini里包含了frps完整的配置项, 而frps.ini是一个基础的配置, 未在配置文件中出现的选项都会使用默认值. 也即如果你完全精通了frp那么可以使用frps_full.ini逐项配置或调优, 如果你只是初入门frp, 建议使用frps.ini里面仅列出了用户必须修改或调整的选项.
同时创建两个软链接, 这样我们就不用将frps的安装目录添加到Path, 因为/usr/bin默认就在PATH路径中
1 2 3 4 5
| ln -s /usr/local/frp_0.48.0_linux_amd64/frps /usr/bin/frps mkdir -p /etc/frp ln -s /usr/local/frp_0.48.0_linux_amd64/frps.ini /etc/frp/frps.ini
|
修改服务器端配置
vi frps.ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| [common]
bind_port = 7000
token = 52010
dashboard_port = 7500
dashboard_user = admin dashboard_pwd = admin enable_prometheus = true
log_file = /var/log/frps.log log_level = info log_max_days = 3
|
此时可以使用命令行启动frp server了
1 2 3
| /usr/bin/frps -c /etc/frp/frps.ini
|
如果要设置为开机启动, 还需要自己准备service文件, 可以参考如下配置
vi /usr/lib/systemd/system/frps.service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [Unit] Description=Frp Server Service After=network.target
[Service] Type=simple User=nobody Restart=on-failure RestartSec=5s ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
[Install] WantedBy=multi-user.target
|
设置开机启动
启动frp server
1 2 3 4 5 6
| systemctl start frps
systemctl status frps
|
4. 安装并配置frp客户端
客户端安装在需要穿透内网的电脑上
安装过程与frp类似, 针对不同的操作系统有不同的安装包, 下载一个与想要穿透的主机操作系统匹配
1 2 3
| wget -O /tmp/frp_0.48.0_linux_amd64.tar.gz https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gz
|
解压frp压缩包
1
| tar -zxvf /tmp/frp_0.48.0_linux_amd64.tar.gz -C /usr/local
|
同时创建两个软链接, 这样我们就不用将frpc的安装目录添加到Path环境变量, 因为/usr/bin默认就在PATH路径中
1 2 3 4 5
| ln -s /usr/local/frp_0.48.0_linux_amd64/frpc /usr/bin/frpc mkdir -p /etc/frp ln -s /usr/local/frp_0.48.0_linux_amd64/frpc.ini /etc/frp/frpc.ini
|
修改客户端配置
vi /usr/local/frp_0.48.0_linux_amd64/frpc.ini
1 2 3 4 5 6 7 8 9 10 11
| server_addr = your_public_ip server_port = 8000 token = 52010
[ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000
|
此时可以使用命令行启动frp 客户端了
1 2 3
| /usr/bin/frpc -c /etc/frp/frpc.ini
|
如果要设置开机启动, 那么需要准备一个service文件并安装和启动它
vi /usr/lib/systemd/system/frpc.service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [Unit] Description=Frp client Service After=network.target
[Service] Type=simple User=nobody Restart=on-failure RestartSec=5s ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
[Install] WantedBy=multi-user.target
|
5. 测试穿透是否配置成功
在正式开始测试之前
服务器端防火墙需要放行7000, 7500, 6000端口
1 2 3 4 5 6 7 8 9
| sudo firewall-cmd --permanent --add-port=6000/tcp
sudo firewall-cmd --permanent --add-port=7000/tcp
sudo firewall-cmd --permanent --add-port=7500/tcp
sudo firewall-cmd --reload
|
测试成功后的效果, 访问公网ip:6000端口会被导向内网的主机的ssh服务上
从而达到使用公网ip访问内网服务的效果
1
| ssh -p 6000 root@public_ip
|
客户端防火墙需放行22端口
6. 相关阅读
frp内网穿透
更多网络相关请访问鹏叔的技术博客 - network
本文原文位于鹏叔的博客空间 - frp内网穿透, 若要获取最近更新, 请访问原文!
7. 参考文档
frp配置内网穿透教程(超详细
使用 systemd 管理 frp 服务