内网穿透工具frp安装使用

摘要: 之前使用的 nps 目前没有维护更新了,和在使用的过程中做内网穿透的的网速应该有限制,不论云服务器带宽是多少,下载速度都比较慢。这里切换到 frp 试试,对安装和使用简单记录,其和 nps 有很大的操作配置不同之处。

相关文章

一、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链接地址

在进行安装前可以自行细读官网教程,教程很详细:

二、工作电脑上网环境测试

测试环境共计 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 等
对比项 rpm rpm 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 的后台面板会显示信息

frp后台面板

3.2.1.1 客户端(centos7.9)

1、服务端配置文件如下,其 # 为注释说明

可以利用 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步:

  1. 在域名平台绑定域名
  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>

运行成功后,可以在服务里面进行查看到服务。也可以参考链接章节的 计划任务方式(未测试,之前用于设置定时关机)

WinSW运行成功

六、参考链接

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,861评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,263评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,033评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,999评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,000评论 6 400
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,483评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,850评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,827评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,366评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,404评论 3 346
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,525评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,130评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,853评论 3 338
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,293评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,426评论 1 276
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,082评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,590评论 2 366

推荐阅读更多精彩内容