前言
最近在做自己的服务器的基础组件配置,服务器没有外网IP,但是又有很多服务需要对外提供。看了下市面上常用内网穿透服务,不是贵就是限制多。说白了还是想白嫖或者弄一个有性价比的。最后找到了Frp这个免费、开源的软件,如果有GO基础的还能做二开,话不多说开整。
一、安装环境和安装包准备
系统:centos7.4
安装包下载地址:https://github.com/fatedier/frp/releases
安装包版本:v0.61.1(我选的最新的安装包:frp_0.61.1_linux_amd64.tar.gz)
.
官方文档:https://gofrp.org/zh-cn/docs/reference/common/
服务器上软件安装位置:/opt/frp
域名:xxx.com,域名要解析到下边外网的IP。我是通过域名做下边的处理,IP每次都要配置端口太麻烦了。
服务名 | IP | 备注 |
---|---|---|
frps | 192.168.1.120 | 当前服务是流量的入口,IP必须是外网 |
frpc | 192.168.1.121 | 被转发的服务,内网想要对外开放的服务器 |
二、服务端安装流程
服务端要安装在有外网IP的服务器上
--解压文件
--tar zxvf frp_0.61.1_linux_amd64.tar.gz
--mv frp_0.61.1_linux_amd64 frp
--mv frp /opt
--cd /opt/frp/
--配置frps.service管理文件
--sudo vim /etc/systemd/system/frps.service
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /opt/frp/frps -c /opt/frp/frps.toml
[Install]
WantedBy = multi-user.target
--配置frps开启自启动
--sudo systemctl enable frps
--frps基础配置
--vim /opt/frp/frps.toml
#webServer 监听地址,默认为 127.0.0.1。
webServer.addr = "0.0.0.0"
## webServer 监听端口。
webServer.port = 9999
## HTTP BasicAuth 用户名。
webServer.user = "admin"
## HTTP BasicAuth 密码。
webServer.password = "admin"
## 是否提供 Prometheus 监控接口,需要同时启用了 webServer 后才会生效。
enablePrometheus = true
## 服务端监听地址,用于接收 frpc 的连接,默认监听 0.0.0.0。
bindAddr="0.0.0.0"
## 服务端口
bindPort=7000
#配置使用的域名
subDomainHost="自己的域名"
## HTTP 类型代理监听的端口,启用后才能支持 HTTP 类型的代理。
vhostHTTPPort=7001
## vhostHTTPTimeout:HTTP 类型代理在服务端的 ResponseHeader 超时时间,默认为 60s。
## HTTPS 类型代理监听的端口,启用后才能支持 HTTPS 类型的代理。
vhostHTTPSPort=7002
##鉴权方式,可选值为 token 或 oidc,默认为 token。
auth.method="token"
## 在 method 为 token 时生效,客户端需要设置一样的值才能鉴权通过。
auth.token="5f74584dbf1f4020ad81e4a3e9a2eba5"
## 日志输出文件路径,如果为 console,则会将日志打印在标准输出中。
log.to="/opt/frp/log/detail.log"
## 日志级别,可选值为 trace, debug, info, warn, error,默认级别为 info。
log.level="trace"
#
## 日志文件最多保留天数,默认为 3 天。
log.maxDays=3
#允许客户端设置的最大连接池大小,如果客户端配置的值大于此值,会被强制修改为最大值,默认为 5。
transport.maxPoolCount=100
--frps常用管理命令
# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
三、客户端安装流程
客户端安装在内网,需要对外开放的服务器上
--解压文件
--tar zxvf frp_0.61.1_linux_amd64.tar.gz
--mv frp_0.61.1_linux_amd64 frp
--mv frp /opt
--cd /opt/frp/
--配置frpc.service管理文件
--sudo vim /etc/systemd/system/frpc.service
[Unit]
# 服务名称,可自定义
Description = frp client
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /opt/frp/frpc -c /opt/frp/frpc.toml
[Install]
WantedBy = multi-user.target
--frpc基础配置
--vim /opt/frp/frpc.toml
#webServer 监听地址,默认为 127.0.0.1。
webServer.addr = "0.0.0.0"
#webServer 监听端口。
webServer.port = 9998
#HTTP BasicAuth 用户名。
webServer.user = "admin"
#HTTP BasicAuth 密码。
webServer.password = "admin"
# 外网的frps服务器地址
serverAddr = "101.43.163.229"
# 外网的frps服务器开放的注册端口
serverPort = 7000
#鉴权方式,可选值为 token 或 oidc,默认为 token。
auth.method="token"
#在 method 为 token 时生效,客户端需要设置一样的值才能鉴权通过。
auth.token = "5f74584dbf1f4020ad81e4a3e9a2eba5"
#日志输出文件路径,如果为 console,则会将日志打印在标准输出中。
log.to="/opt/frp/log/detail.log"
#日志级别,可选值为 trace, debug, info, warn, error,默认级别为 info。
log.level="trace"
#日志文件最多保留天数,默认为 3 天。
log.maxDays=3
# 连接池大小。
transport.poolCount=100
includes = ["/opt/frp/config/*.toml"]
--提取出来的文件配置
[[proxies]]
name = "ssh-frpc"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 9000
[[proxies]]
name = "ssh-db-01"
type = "tcp"
localIp="192.168.1.161"
localPort=22
remotePort=9001
[[proxies]]
name = "ssh-db-02"
type = "tcp"
localIp="192.168.1.162"
localPort=22
remotePort=9002
[[proxies]]
name = "http-frpc-admin"
type = "tcp"
localIP = "127.0.0.1"
localPort = 9998
remotePort = 9998
#默认映射到服务端的http配置端口。frps配置的域名加上当前配置的子域名会打到配置的指定服务器。比如你在frps配置的域名是xxx.com。那么panel.xxx.com域名地址就会打到当前服务器转发给127.0.0.1:8000服务。多个二级域名转发到不同服务器配置多个。
[[proxies]]
name = "frc-panel"
type = "http"
localIP = "127.0.0.1"
localPort = 8000
subdomain="panel"
--配置frps开启自启动
--sudo systemctl enable frpc
完成以后客户端展示