内网穿透是一种将内部网络中的应用程序通过公共网络访问的技术。它可以帮助用户轻松地在外部网络访问内部网络中运行的应用程序,而无需在路由器上进行端口转发或使用VPN。
创新互联公司致力于互联网品牌建设与网络营销,包括成都网站建设、成都网站设计、SEO优化、网络推广、整站优化营销策划推广、电子商务、移动互联网营销等。创新互联公司为不同类型的客户提供良好的互联网应用定制及解决方案,创新互联公司核心团队十载专注互联网开发,积累了丰富的网站经验,为广大企业客户提供一站式企业网站建设服务,在网站建设行业内树立了良好口碑。
内网穿透的实现方式有多种,其中较为常见的是基于反向代理服务器的方式。反向代理服务器可以将公共网络请求转发到内部网络中的应用程序,并将响应返回给客户端。这种方式需要在公共网络上配置反向代理服务器,并在内部网络中配置相应的应用程序和端口转发规则。
另一种实现方式是使用专门的内网穿透软件。这些软件通常需要在内部网络中安装代理客户端,并在公共网络上安装代理服务器。用户可以通过代理客户端连接到代理服务器,然后访问内部网络中运行的应用程序。这种方式相对比较简单,但需要额外安装和配置软件。
内网穿透的使用场景非常广泛,例如远程桌面、文件共享、监控系统等。特别是在疫情期间,远程办公成为了趋势,内网穿透技术也因此得到了更广泛的应用。
然而,内网穿透也存在一些安全风险。由于内网穿透技术可以将内部网络中的应用程序暴露在公共网络上,如果没有正确的安全措施,可能会导致网络攻击和数据泄露等问题。因此,在使用内网穿透技术时需要注意加强网络安全,例如限制访问IP地址、加密数据传输等。
frp 是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp, udp, http, https等协议。
frp 项目官网是
https://github.com/fatedier/frp,中文官方文档地址:https://gofrp.org/docs/。除了安装过程,中文文档对使用过程已经介绍的非常详细,如遇到问题,建议先查看官方文档。
frp工作原理为:
除了开源的frp,还有如下内网穿透/远控工具:
1、部署前需准备
1.1、准备一台能被公网访问到的(通过ip能够直接访问得到服务器)服务器,一台内网的测试机(你自己电脑就行),本人用的服务器是华为云的linux服务器,ip为124.5.23.6,测试机为win10系统。
1.2、访问官方项目地址:Releases · fatedier/frp · GitHub 下载最新的包:
根据系统类型下载对应的包
2、部署服务端
2.1、把
frp_0.48.0_linux_386.tar.gz(如果服务器为window,解压frp_0.48.0_windows_386.zip) 解压出来保留以下三个文件
2.2、修改配置文件,用编辑器打开frps.ini文件,做如下修改
[common]
#服务器监听穿口
bind_port = 15000
#身份认证 后面客户端连接也需配置这个token 还有另一种oidc验证比较复杂,可以参考官方文档
token=332361857
#web界面端口
dashboard_port = 15001
# dashboard 用户名密码,可选,默认为空
dashboard_user = admin
dashboard_pwd = admin332361857
#设置每个代理可以创建的连接池上限,避免大量资源占用,客户端设置超过此配置后会被调整到当前值
max_pool_count = 5
#端口白名单
allow_ports = 15000,15001,15002-15009
#http监听的端口
vhost_http_port = 15003
#日志文件配置
log_file = ./frps.log
#日志级别配置
log_level = info
以上是本次测试需要用到的参数,详细参数如下:
参数 |
类型 |
说明 |
默认值 |
可选值 |
备注 |
bind_addr |
string |
服务端监听地址 |
0.0.0.0 |
||
bind_port |
int |
服务端监听端口 |
7000 |
接收 frpc 的连接 |
|
bind_udp_port |
int |
服务端监听 UDP 端口 |
0 |
用于辅助创建 P2P 连接 |
|
kcp_bind_port |
int |
服务端监听 KCP 协议端口 |
0 |
用于接收采用 KCP 连接的 frpc |
|
quic_bind_port |
int |
服务端监听 QUIC 协议端口 |
0 |
用于接收采用 QUIC 连接的 frpc |
|
quic_keepalive_period |
int |
quic 协议 keepalive 间隔,单位: 秒 |
10 |
||
quic_max_idle_timeout |
int |
quic 协议的最大空闲超时时间,单位: 秒 |
30 |
||
quic_max_incoming_streams |
int |
quic 协议最大并发 stream 数 |
100000 |
||
proxy_bind_addr |
string |
代理监听地址 |
同 bind_addr |
可以使代理监听在不同的网卡地址 |
|
log_file |
string |
日志文件地址 |
./frps.log |
如果设置为 console,会将日志打印在标准输出中 |
|
log_level |
string |
日志等级 |
info |
trace, debug, info, warn, error |
|
log_max_days |
int |
日志文件保留天数 |
3 |
||
disable_log_color |
bool |
禁用标准输出中的日志颜色 |
false |
||
detailed_errors_to_client |
bool |
服务端返回详细错误信息给客户端 |
true |
||
tcp_mux_keepalive_interval |
int |
tcp_mux 的心跳检查间隔时间 |
60 |
单位:秒 |
|
tcp_keepalive |
int |
和客户端底层 TCP 连接的 keepalive 间隔时间,单位秒 |
7200 |
负数不启用 |
|
heartbeat_timeout |
int |
服务端和客户端心跳连接的超时时间 |
90 |
单位:秒 |
|
user_conn_timeout |
int |
用户建立连接后等待客户端响应的超时时间 |
10 |
单位:秒 |
|
udp_packet_size |
int |
代理 UDP 服务时支持的最大包长度 |
1500 |
服务端和客户端的值需要一致 |
|
tls_cert_file |
string |
TLS 服务端证书文件路径 |
|||
tls_key_file |
string |
TLS 服务端密钥文件路径 |
|||
tls_trusted_ca_file |
string |
TLS CA 证书路径 |
2.3、把三个文件上传至服务器指定目录,运行命令
./frps -c frps.ini
输出如下命令说明服务端运行成功
2023/03/31 10:59:01 [I] [root.go:206] frps uses config file: /home/web/frp/frps.ini
2023/03/31 10:59:01 [I] [service.go:200] frps tcp listen on 0.0.0.0:15000
2023/03/31 10:59:01 [I] [service.go:261] http service listen on 0.0.0.0:15003
2023/03/31 10:59:01 [I] [service.go:317] Dashboard listen on 0.0.0.0:15001
2023/03/31 10:59:01 [I] [root.go:215] frps started successfully
2.4、访问web界面 124.5.23.6:15001,如下:
2.5、至此服务端配置成功
3、客户端基础配置
3.1、把
frp_0.48.0_windows_386.zip(如果服务器为window,解压frp_0.48.0_linux_386.tar.gz) 解压出来保留以下三个文件
3.2、修改配置文件,用编辑器打开frpc.ini文件,做如下修改
[common]
#外网-服务器端ip
server_addr = 124.5.23.6
#外网-服务器端监听的端口(必须与frps.ini中的配置一致)
server_port = 15000
#token验证需与服务端配置的一致
token=332361857
#日志文件配置
log_file = ./frps.log
#日志级别配置
log_level = info
#连接池大小
pool_count=5
#客户端的web界面
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin
以上是本次测试需要用到的参数,详细参数如下:
参数 |
类型 |
说明 |
默认值 |
可选值 |
备注 |
server_addr |
string |
连接服务端的地址 |
0.0.0.0 |
||
server_port |
int |
连接服务端的端口 |
7000 |
||
connect_server_local_ip |
string |
连接服务端时所绑定的本地 IP |
|||
dial_server_timeout |
int |
连接服务端的超时时间 |
10 |
||
dial_server_keepalive |
int |
和服务端底层 TCP 连接的 keepalive 间隔时间,单位秒 |
7200 |
负数不启用 |
|
http_proxy |
string |
连接服务端使用的代理地址 |
格式为 {protocol}://user:passwd@192.168.1.128:8080 protocol 目前支持 http、socks5、ntlm |
||
log_file |
string |
日志文件地址 |
./frpc.log |
如果设置为 console,会将日志打印在标准输出中 |
|
log_level |
string |
日志等级 |
info |
trace, debug, info, warn, error |
|
log_max_days |
int |
日志文件保留天数 |
3 |
||
disable_log_color |
bool |
禁用标准输出中的日志颜色 |
false |
||
pool_count |
int |
连接池大小 |
0 |
||
user |
string |
用户名 |
设置此参数后,代理名称会被修改为 {user}.{proxyName},避免代理名称和其他用户冲突 |
||
dns_server |
string |
使用 DNS 服务器地址 |
默认使用系统配置的 DNS 服务器,指定此参数可以强制替换为自定义的 DNS 服务器地址 |
||
login_fail_exit |
bool |
第一次登陆失败后是否退出 |
true |
||
protocol |
string |
连接服务端的通信协议 |
tcp |
tcp, kcp, quic, websocket |
|
quic_keepalive_period |
int |
quic 协议 keepalive 间隔,单位: 秒 |
10 |
||
quic_max_idle_timeout |
int |
quic 协议的最大空闲超时时间,单位: 秒 |
30 |
||
quic_max_incoming_streams |
int |
quic 协议最大并发 stream 数 |
100000 |
||
tls_enable |
bool |
启用 TLS 协议加密连接 |
false |
||
tls_cert_file |
string |
TLS 客户端证书文件路径 |
|||
tls_key_file |
string |
TLS 客户端密钥文件路径 |
|||
tls_trusted_ca_file |
string |
TLS CA 证书路径 |
|||
tls_server_name |
string |
TLS Server 名称 |
为空则使用 server_addr |
||
disable_custom_tls_first_byte |
bool |
TLS 不发送 0x17 |
false |
当为 true 时,不能端口复用 |
|
tcp_mux_keepalive_interval |
int |
tcp_mux 的心跳检查间隔时间 |
60 |
单位:秒 |
|
heartbeat_interval |
int |
向服务端发送心跳包的间隔时间 |
30 |
建议启用 |
|
heartbeat_timeout |
int |
和服务端心跳的超时时间 |
90 |
||
udp_packet_size |
int |
代理 UDP 服务时支持的最大包长度 |
1500 |
服务端和客户端的值需要一致 |
|
start |
string |
指定启用部分代理 |
当配置了较多代理,但是只希望启用其中部分时可以通过此参数指定,默认为全部启用 |
||
meta_xxx |
map |
附加元数据 |
会传递给服务端插件,提供附加能力 |
3.3、用cmd运行
frpc -c frpc.ini
3.4、访问管理端 http://127.0.0.1:7400/,出现如下说明配置成功
4、代理配置
4.1、代理的基础配置如下:
参数 |
类型 |
说明 |
是否必须 |
默认值 |
可选值 |
备注 |
type |
string |
代理类型 |
是 |
tcp |
tcp, udp, http, https, stcp, sudp, xtcp, tcpmux |
|
use_encryption |
bool |
是否启用加密功能 |
否 |
false |
启用后该代理和服务端之间的通信内容都会被加密传输 |
|
use_compression |
bool |
是否启用压缩功能 |
否 |
false |
启用后该代理和服务端之间的通信内容都会被压缩传输 |
|
proxy_protocol_version |
string |
启用 proxy protocol 协议的版本 |
否 |
v1, v2 |
如果启用,则 frpc 和本地服务建立连接后会发送 proxy protocol 的协议,包含了原请求的 IP 地址和端口等内容 |
|
bandwidth_limit |
string |
设置单个 proxy 的带宽限流 |
否 |
单位为 MB 或 KB,0 表示不限制,如果启用,会作用于对应的 frpc |
||
bandwidth_limit_mode |
string |
限流类型,客户端限流或服务端限流 |
否 |
client |
client, server |
4.2、代理的本地服务配置
local_ip 和 plugin 的配置必须配置一个,且只能生效一个,如果配置了 plugin,则 local_ip 配置无效。
参数 |
类型 |
说明 |
是否必须 |
默认值 |
可选值 |
备注 |
local_ip |
string |
本地服务 IP |
是 |
127.0.0.1 |
需要被代理的本地服务的 IP 地址,可以为所在 frpc 能访问到的任意 IP 地址 |
|
local_port |
int |
本地服务端口 |
是 |
配合 local_ip |
||
plugin |
string |
客户端插件名称 |
否 |
见客户端插件的功能说明 |
用于扩展 frpc 的能力,能够提供一些简单的本地服务,如果配置了 plugin,则 local_ip 和 local_port 无效,两者只能配置一个 |
|
plugin_params |
map |
客户端插件参数 |
否 |
map 结构,key 需要都以 “plugin_” 开头,每一个 plugin 需要的参数也不一样,具体见客户端插件参数中的内容 |
4.3、代理的负载均衡和健康检查
参数 |
类型 |
说明 |
是否必须 |
默认值 |
可选值 |
备注 |
group |
string |
负载均衡分组名称 |
否 |
用户请求会以轮询的方式发送给同一个 group 中的代理 |
||
group_key |
string |
负载均衡分组密钥 |
否 |
用于对负载均衡分组进行鉴权,group_key 相同的代理才会被加入到同一个分组中 |
||
health_check_type |
string |
健康检查类型 |
否 |
tcp,http |
配置后启用健康检查功能,tcp 是连接成功则认为服务健康,http 要求借口返回 2xx 的状态码则认为服务健康 |
|
health_check_timeout_s |
int |
健康检查超时时间(秒) |
否 |
3 |
执行检查任务的超时时间 |
|
health_check_max_failed |
int |
健康检查连续错误次数 |
否 |
1 |
连续检查错误多少次认为服务不健康 |
|
health_check_interval_s |
int |
健康检查周期(秒) |
否 |
10 |
每隔多长时间进行一次健康检查 |
|
health_check_url |
string |
健康检查的 HTTP 接口 |
否 |
如果 health_check_type 类型是 http,则需要配置此参数,指定发送 http 请求的 url,例如 “/health” |
4.4、代理的TCP配置,在下面我们配置访问内网的SSH。
4.4.1、接上一节继续修改配置文件frpc.ini,在前面的基础上加入
#代理名称 注意代理名称不能重复,配置多个需要区分,如[ssh] [ssh1] [ssh2]
[ssh]
#配置类型为http协议
type = tcp
#内网机器的IP
local_ip = 127.0.0.1
#内网需要监听的端口(win10所启服务端口)
local_port = 22
remote_port = 15002
#是否开启加密
use_encryption = true
#是否开启压缩
use_compression = true
4.4.2、运行客户端后
ssh -p 15002 name@124.5.23.6
4.4.3、成功访问
4.5、代理的Http配置,下面我们配置一个访问内网web的例子
4.5.1、接上一节继续修改配置文件frpc.ini,在前面的基础上加入
[web]
type = http
#本地端口
local_port = 8080
#服务器绑定自定义域名,需把域名解析到服务器ip
custom_domains = proxy.test.com
4.5.2、运行客户端后,即可访问到本地的http服务了,15003是服务端配置的http监听端口
4.6、frp还可以代理STCP\SUDP\XTCP\TCPMUX\UDP,由于本人暂时没用到,等用到时候再给大家分享,有问题可以评论区提出,谢谢!
网站栏目:如何使用frp实现内网穿透
文章URL:http://www.csdahua.cn/qtweb/news20/499870.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网