杜郎俊赏 - dujun.io

开源实例之frp

前言

frp(fast reverse proxy)是一款知名的开源内网穿透软件。本篇介绍用 frp 搭建 ssh、web 内网穿透的方法。

内网穿透介绍

内网穿透,也即 NAT(Network Address Translation,网络地址转换)穿透(NAT traversal),进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。

简单来说,内网穿透就是内网主机通过NAT与公网建立TCP/UDP连接,实现接收/发送公网数据包。

《开源实例之自建服务器下篇:工控机部署》一文中提到了内网穿透的应用,这就是内网穿透的典型使用场景,通过内网穿透将配置较高的内网服务器“映射”到公网提供服务,而配置较低的公网服务器只需消耗流量。

frp介绍

frp is a fast reverse proxy to help you expose a local server behind a NAT or firewall to the Internet. As of now, it supports TCP and UDP, as well as HTTP and HTTPS protocols, where requests can be forwarded to internal services by domain name. frp also has a P2P connect mode.

架构图

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

仓库地址:https://github.com/fatedier/frp

文档地址:https://gofrp.org

frp部署

frp 是 Go 语言编写的独立程序,不需要其他依赖,部署非常容易。分为服务端(公网服务器)和客户端(内网服务器)。

软件下载

到 git 下载 release 包解压即可。以 linux 0.47.0 版为例,下载地址是https://github.com/fatedier/frp/releases/download/v0.47.0/frp_0.47.0_linux_amd64.tar.gz

解压目录中,frps前缀为服务端程序和配置文件,frpc前缀为客户端程序和配置文件。

服务端部署

在公网服务器创建目录,例如/frp,放入文件frpsfrps.ini

启动服务端:

/frp/frps -c /frp/frps.ini

客户端部署

在内网服务器创建目录,例如/frp,放入文件frpcfrpc.ini

启动客户端:

/frp/frpc -c /frp/frpc.ini

进程保护

建议用 supervisor 保护进程,服务端配置示例 frps.conf:

[program:frps]
command = /frp/frps -c /frp/frps.ini
autostart = true
startsecs = 5
startretries = 63072000
user = root

frp配置

配置示例

服务端frps.ini

[common]
bind_addr = 0.0.0.0
bind_port = 7000
quic_bind_port = 7000

vhost_http_port = 8080
vhost_https_port = 8443

token = ****

dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = ****
dashboard_pwd = ****

enable_prometheus = true

log_level = info
log_max_days = 3
log_file = /var/log/frpc.log

subdomain_host = dujun.eu.org

max_pool_count = 5
max_ports_per_client = 0

tls_enable = true

[ssh]
listen_port = 6000

客户端frpc.ini

[common]
server_addr = *.*.*.*
server_port = 7000
protocol = quic

pool_count = 1

token = ****

log_level = info
log_max_days = 30
log_file = /var/log/frpc.log

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

[dujun.eu.org]
type = http
local_port = 8000
custom_domains = dujun.eu.org

[example.dujun.eu.org]
type = http
local_port = 8787
subdomain = example

配置说明

详细配置参数可以阅读官方文档,或者安装包中的frps_full.ini(服务端)、frpc_full.ini(客户端)。下面介绍几个关键参数设置。

QUIC协议

默认通信协议为 TCP,存在不稳定的情况,建议使用 QUIC协议。设置方法是服务端设置 quic_bind_port(与 bind_port 数值相同),客户端设置 protocol = quic。QUIC 基于 UDP,所以需要在公网服务器安全组开放 UDP 相关端口。

token

服务端与客户端需要设置相同的 token。

面板

dashboard_ 前缀字段为 frp 自带面板的配置参数。

ssh

在 [ssh] 项中,客户端 remote_port 要与服务端 listen_port 相同。

web

如果服务端设置了 subdomain_host 字段,客户端设置子域名只要设置 subdomain,组成 subdomain.subdomain_host 域名。如果客户端设置单独域名则需要设置 custom_domains 字段。

frp 面板展示

首页

统计

后记

体验更多开源实例

标签: 开源实例
日期:2023-02-21