相关文章摘要:之前使用的 nps 目前没有维护更新了,和在使用的过程中做内网穿透的的网速应该有限制,不论云服务器带宽是多少,下载速度都比较慢。这里切换到 frp 试试,对安装和使用简单记录,其和 nps 有很大的操作配置不同之处。
- 内网穿透工具frp安装使用
- 内网穿透工具NPS安装使用
- xftp5 连接 centos7.8
一、frp 官方概览
frp 是什么?
frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。
为什么选择 frp?
通过在具有公网 IP 的节点上部署 frp 服务端,您可以轻松地将内网服务穿透到公网,并享受以下专业特性:
- 多种协议支持:客户端服务端通信支持 TCP、QUIC、KCP 和 Websocket 等多种协议。
- TCP 连接流式复用:在单个连接上承载多个请求,减少连接建立时间,降低请求延迟。
- 代理组间的负载均衡。
- 端口复用:多个服务可以通过同一个服务端端口暴露。
- P2P 通信:流量不必经过服务器中转,充分利用带宽资源。
- 客户端插件:提供多个原生支持的客户端插件,如静态文件查看、HTTPS/HTTP 协议转换、HTTP、SOCKS5 代理等,以便满足各种需求。
- 服务端插件系统:高度可扩展的服务端插件系统,便于根据自身需求进行功能扩展。
- 用户友好的 UI 页面:提供服务端和客户端的用户界面,使配置和监控变得更加方便。
在进行安装前可以自行细读官网教程,教程很详细:
frp下载地址: https://github.com/fatedier/frp/releases
frp 使用教程: https://gofrp.org/zh-cn/docs/overview/
二、工作电脑上网环境测试
测试环境共计 3 台电脑,如果电脑不足,可采用虚拟机,网络环境为内网。采用 windows11 系统作为 frp 服务器端,win7系统做客服端。将客服端的远程桌面(3389)端口代理到服务器端口的 6000端口。
注:测试环境为内网环境,将服务端和客服端防火墙直接设置为关闭。和测试文件配置最要为验证是否部署成功,同正式环境配置文件有差异!
1.1 服务端(Windows 11)
1、服务端配置文件如下,其 # 为注释说明
#frps服务监听的本机端口
#bindAddr = "127.0.0.1"
bindPort = 7000
#frps服务web界面配置
webServer.addr = "127.0.0.1"
webServer.port = 7500
webServer.user = "cikkod"
webServer.password = "cikkod@123"
#鉴权配置
auth.method = "token"
auth.token = "cikkod"
#日志配置
#log.to = "console"
log.to = "./log"
log.level = "info"
log.maxDays = 7
注意:如果配置日志为文件形式,则运行后会将相关日志记录写入文件,不会在控制台显示打开成功的信息,会直接写入到配置的 log 文件中。
2、配置校验
frps verify -c ./frps.toml
如果正常,则是提示如下信息,如果异常则会提示对应信息
D:\software\frp\frp_0.53.0_windows_amd64>frps verify -c ./frps.toml
frps: the configuration file ./frps.toml syntax is ok
3、启动程序
如果配置文件检验没有问题,即可启动程序(后续会提到配置文件虽然检验正常,但是不一定能正常启动,经验应该只是针对格式检查),下面 2 中指令都可以正常启动。
启动成功后,需要注意事启动成功应该是 2 个端口。其中 7000 是 frp 的绑定端口,7500是 frp 的后台面板端口。可能会遇到只有 7000 端口成功,这个时候要检查配置文件是否正确。
方式一
frps.exe -c frps.toml
D:\software\frp\frp_0.53.0_windows_amd64>frps.exe -c frps.toml
2023/12/18 11:24:57 [I] [root.go:104] frps uses config file: frps.toml
2023/12/18 11:24:57 [I] [service.go:225] frps tcp listen on 127.0.0.1:7000
2023/12/18 11:24:57 [I] [root.go:113] frps started successfully
2023/12/18 11:24:57 [I] [service.go:338] dashboard listen on 127.0.0.1:7500
方式二
frps.exe -c ./frps.toml
D:\software\frp\frp_0.53.0_windows_amd64>frps.exe -c ./frps.toml
2023/12/18 11:32:46 [I] [root.go:104] frps uses config file: ./frps.toml
2023/12/18 11:32:46 [I] [service.go:225] frps tcp listen on 0.0.0.0:7000
2023/12/18 11:32:46 [I] [root.go:113] frps started successfully
2023/12/18 11:32:46 [I] [service.go:338] dashboard listen on 127.0.0.1:7500
2023/12/18 11:33:06 [I] [dashboard_api.go:106] Http request: [/api/serverinfo]
2023/12/18 11:33:06 [I] [dashboard_api.go:99] Http response [/api/serverinfo]: code [200]
启动后在浏览器中输入 127.0.0.1:7500 就可以打开后台面板
1.2 客服端(Windows7)
1、服务端配置文件如下,其 # 为注释说明
#token需要与服务端的token一致
auth.method = "token"
auth.token = "cikkod"
# 服务端的公网ip
serverAddr = "10.131.27.1"
serverPort = 7000
[[proxies]]
# 名称 需要唯一
name = "test-tcp"
# 类型tcp
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
#访问服务端被转到本机当前配置的对应端口
#比如此处是57002,那外网访问服务端公网ip:57002则会被转发访问本配置127.0.0.1:22端口
remotePort = 6000
2、配置校验
frpc verify -c ./frpc.toml
3、启动程序
frpc.exe -c frpc.toml
或
frpc.exe -c ./frpc.toml
1.3 验证
在同事电脑上打开桌面远程(mtsc),输入访部署服务器的 IP 和 客服端远程代理端口 10.131.27.1:6000,就能成功的连接到安装客户端的电脑。输入计算中账号后进入成功进入系统。
三、正式云服务器环境部署
正式环境采用一台华为云 ESC 服务器(同时服务器为公司门户网站),客户端目前部署2台,一台 centos7 的 gitlab 代码仓库;一台window7 的 提供公司常用软件下载
注:正式环境为华为云公网环境,服务器主要用于公司门户网站搭建,采用 nginx 将多个门户网站和 frp 共用。云服务器需要在安全组的入项规则中添加各个代理客户端设置的远端服务器端口。测试文件配置最要为验证是否部署成功,同正式环境配置文件有差异!
3.1 服务端(华为云 centos7.9)
1、查看系统版本
[root@ecs-396a frp]# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.9.2009 (Core)
Release: 7.9.2009
Codename: Core
[root@ecs-396a frp]#
如果没有安装插件,进行安装插件。具体根据系统而来,我这里是centos7
[root@ecs-396a frp]# lsb_release -a
-bash: lsb_release: command not found
不同系统其下载安装有差异,一般来说著名的 Linux 系统基本上分两大类:
RedHat 系列:Redhat、Centos、Fedora 等
Debian 系列:Debian、Ubuntu 等
yum install -y redhat-lsb
对比项 | rpm | yum | dpkg | apt |
---|---|---|---|---|
系列 | RedHat系 | RedHat系 | Debian系 | Debian系 |
区别 | 包安装工具 | 依赖管理工具 | 包安装工具 | 依赖管理工具 |
查询已安装 | rpm -qa | yum list installed | dkpg -l | apt list –installed |
安装 | rpm -i package.rpm 或 rpm –ivh http://www.xxx.net/package.rpm | yum install -y | dpkg -i package.deb | apt-get install package |
更新 | rpm –U software.rpm | yum update | apt upgrade | |
移除软件包 | rpm -e [module1][module2]… | yum -remove | dpkg -r package | apt remove package |
移除软件包及配置 | dpkg -P | apt purge package | ||
下载的包存放位置 | /var/cache/apt/archives | |||
软件安装默认位置 | rpm -ql | /usr/share | ||
可执行文件位置 | /usr/bin | /usr/bin | ||
配置文件位置 | /etc | /etc | ||
lib文件位置 | /usr/lib | /usr/lib | ||
使用手册 | /usr/share/doc | |||
帮助文档 | /usr/share/man | |||
更新 |
2、服务端配置文件如下,其 # 为注释说明
可以利用 xFTP 的方式将 frp 文件拷贝,并进行配置文件修改。[root@ecs-396a frp]# cat frps.toml
#frps服务监听的本机端口
#bindAddr = "127.0.0.1"
bindPort = 8001
#frps服务web界面配置
webServer.addr = "0.0.0.0"
webServer.port = 8101
webServer.user = "cikkod"
webServer.password = "jdxy@123"
#鉴权配置
auth.method = "token"
auth.token = "cikkod"
#日志配置
#log.to = "console"
log.to = "./log"
log.level = "info"
log.maxDays = 7
#端口白名单
allowPorts = [
{ start = 8000, end = 8500 },
{ single = 8765 }
]
#二级域名后缀
subDomainHost = "cikkod.com"
3、配置校验
./frps verify -c ./frps.toml
如果正常,则是提示如下信息,如果异常则会提示对应信息
[root@ecs-396a frp]# ./frps verify -c ./frps.toml
frps: the configuration file ./frps.toml syntax is ok
本次遇到权限问题,问题明细和解决办法如下:
[root@ecs-396a frp]# ./frps verify -c ./frps.toml
-bash: ./frps: Permission denied
查看当前用户
[root@ecs-396a frp]# who
root pts/2 2023-12-15 17:48 (118.116.12.165)
查看文件权限
[root@ecs-396a local]# ls -l frp
total 17636
-rw-r--r-- 1 root root 18042880 Dec 18 17:48 frps
-rwxrwxrwx 1 root root 356 Dec 18 17:51 frps.toml
-rwxrwxrwx 1 root root 11358 Dec 18 17:47 LICENSE
发现 frps 文件不可执行,分别将 frps 和 frps.toml文件权限设置为 777后,校验成功。
4、启动程序
因为配置了log 所以不会在控制台打印日志
[root@ecs-396a frp]# ./frps -c ./frps.toml
如果启动异常,则会提示相关的信息,本次遇到的问题如下:
[root@ecs-396a frp]# ./frps -c ./frps.toml
listen tcp 116.63.139.233:8101: bind: cannot assign requested address
因为我在设置 webServer.addr = "xxx.xxx.xxx.xxx" 时,直接设置为了公网的IP地址,正确的设置为 webServer.addr = "0.0.0.0" 。
启动后在浏览器中输入 IP:PORT 就可以打开后台面板,后台面板端口不需要在安全组中添加。
3.2 客服端
通过开篇 frp 的概览,我们知道支持很多种方式,包含:TCP & UDP ,HTTP & HTTPS,STCP & SUDP,XTCP,TCPMUX,不同方式其配置文件有所差异。
3.2.1 TCP & UDP
个人目主要部署了 TCP & UDP 方式,刚好为一个centos7 系统,一个为 windows7 系统,成功启用后在 frp 的后台面板会显示信息
3.2.1.1 客户端(centos7.9)
2、服务端配置文件如下,其 # 为注释说明
可以利用 xFTP 的方式将 frp 文件拷贝,并进行配置文件修改。
[root@localhost frp]# cat frpc.toml
#token需要与服务端的token一致
auth.method = "token"
auth.token = "cikkod"
# 服务端的公网ip和frp绑定端口,填写自己的服务IP地址和端口
serverAddr = "xxx.xxx.xxx.xxx"
serverPort = 8001
#代理配置
[[proxies]]
# 名称 需要唯一
name = "gitlab"
# 类型tcp, udp, http, https, tcpmux, stcp, sudp, xtcp。
type = "tcp"
#本地IP和端口
localIP = "127.0.0.1"
localPort = 80
#访问服务端被转到本机当前配置的对应端口
#比如此处是57002,那外网访问服务端公网ip:57002则会被转发访问本配置127.0.0.1:22端口
remotePort = 8166
#自定义域名列表[]string
#customDomains = [""]
#子域名
#subdomain = "gitlab"
[root@localhost frp]#
2、配置校验
./frpc verify -c ./frpc.toml
3、启动程序
[root@localhost frp]# ./frpc -c ./frpc.toml
2023/12/19 10:19:43 [I] [root.go:141] start frpc service for config file [./frpc.toml]
2023/12/19 10:19:43 [I] [service.go:288] try to connect to server...
2023/12/19 10:19:43 [I] [service.go:279] [5685ed2bec39a57d] login to server success, get run id [5685ed2bec39a57d]
2023/12/19 10:19:43 [I] [proxy_manager.go:173] [5685ed2bec39a57d] proxy added: [gitlab]
2023/12/19 10:19:43 [I] [control.go:169] [5685ed2bec39a57d] [gitlab] start proxy success
如果启动异常,则会提示相关的信息,本次遇到的问题如下:
[root@localhost frp]# ./frpc -c ./frpc.toml
2023/12/19 10:13:42 [I] [root.go:141] start frpc service for config file [./frpc.toml]
2023/12/19 10:13:42 [I] [service.go:288] try to connect to server...
2023/12/19 10:13:52 [W] [service.go:291] connect to server error: dial tcp 116.63.139.233:8001: i/o timeout
2023/12/19 10:13:52 [I] [service.go:288] try to connect to server...
2023/12/19 10:13:52 [W] [service.go:291] connect to server error: dial tcp 116.63.139.233:8001: operation was canceled
2023/12/19 10:13:52 [I] [root.go:159] frpc service for config file [./frpc.toml] stopped
login to the server failed: dial tcp 116.63.139.233:8001: i/o timeout. With loginFailExit enabled, no additional retries will be attempted
[root@localhost frp]#
超时原因是因为在云服务的安全配置没有放开绑定端口,云服务器的安全组的入方向规则中添加好frp 的 bindPort端口。(注意:非面板端口 webServer.port,面板端口不用打开也可以访问)
3.2.1.2 客户端(windows7)
其配置
1、服务端配置文件如下,其 # 为注释说明
#token需要与服务端的token一致
auth.method = "token"
auth.token = "cikkod"
# 服务端的公网ip,填写自己的服务IP地址和端口
serverAddr = "xxx.xxx.xxx.xxx"
serverPort = 8001
[[proxies]]
name = "download"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 8100
2、配置校验
frpc verify -c ./frpc.toml
3、启动程序
frpc.exe -c frpc.toml
或
frpc.exe -c ./frpc.toml
四、nginx配置域名
绑定域名主要有2步:
- 在域名平台绑定域名
- 在nginx中配置
1、域名绑定
2、nginx配置
#frp
server {
listen 80;
server_name ***t.cikkod.com;
location / {
proxy_pass http://127.0.0.1:8101;
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header X-Powered-By;
}
}
server {
listen 80;
server_name ***d.cikkod.com;
location / {
proxy_pass http://127.0.0.1:8100;
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header X-Powered-By;
}
}
server {
listen 80;
server_name ***b.cikkod.com;
location / {
proxy_pass http://127.0.0.1:8166;
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header X-Powered-By;
}
}
配置后重启 nginx 就可以通过域名访问
lnmp restart
五、设置后台运行
我们通过 Xshell 连接云服务器,如果我们关闭 Xshell 时,同时会关闭服务器,这里按照 centos7 系统 和 windows7 系统记录如何设置为后台服务,其 frps 和 frpc 设置同理。
5.1 centos7系统
在目录 /etc/systemd/system 下新建文件名为 frps.service 的文件,vi 可以编辑或新建文件 ,如果文件名称错误时,可以通过以下命令修改(将 frpc.sevice 修改为 frpc.service)。
[root@localhost system]# mv frpc.sevice frpc.service
[root@localhost system]#
说明: ExecStart = frps.exe所在的目录/frps -c frps.ini所在的目录/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.toml
[Install]
WantedBy=multi-user.target
创建成功后启动服务和设置为自启动
[root@ecs-396a system]# systemctl start frps
[root@ecs-396a system]# systemctl enable frps
Created symlink from /etc/systemd/system/multi-user.target.wants/frps.service to /etc/systemd/system/frps.service.
[root@ecs-396a system]#
文件新建好后用以下命令控制:
#设置开机启动
systemctl enable frps
#启动
systemctl start frps
#停止
systemctl stop frps
#状态
systemctl status frps
5.2 windows7系统
winsw 和 nssm 都可将 exe 转成服务,尴尬的时候目前都没有更新了,本次采用 winsw 使用为旧版本,新版本v3.0.0-alpha.11 和 2.12 都遇到报错情况。
这里也不具体说明怎么使用WinSW,感兴趣可以查看这篇文章:Windows Server 2012 通过winSW注册服务后,服务被系统强制中断的服务属性设置问题
WinSW配置文件
<configuration>
<!-- 该服务的唯一标识 -->
<id>frpc</id>
<!-- 该服务的名称 -->
<name>cikkod_frpc</name>
<!-- 该服务的描述 -->
<description>frpc客户端 这个服务用 frpc 实现内网穿透</description>
<!-- 要运行的程序路径 -->
<executable>D:\frp\frp_0.53.0_windows_amd64\frpc.exe</executable>
<!-- 携带的参数 -->
<arguments>-c frpc.toml</arguments>
<!-- 第一次启动失败 60秒重启 -->
<onfailure action="restart" delay="60 sec"/>
<!-- 第二次启动失败 120秒后重启 -->
<onfailure action="restart" delay="120 sec"/>
<!-- 日志模式 -->
<logmode>append</logmode>
<!-- 指定日志文件目录(相对于executable配置的路径) -->
<logpath>logs</logpath>
</configuration>
运行成功后,可以在服务里面进行查看到服务。也可以参考链接章节的 计划任务方式(未测试,之前用于设置定时关机)
六、参考链接
配置 Nginx 和 frps 共存 80/443 端口及泛域名支持教程
frp 官方文档
yum与apt的区别
云服务器搭建frp服务(超详细)
Frp后台自动启动的几个方法
frp内网穿透windows配置开机启动
Windows Server 2012 通过winSW注册服务后,服务被系统强制中断的服务属性设置问题