因公司内网有两个端口需要外网访问,在网上找到这个方法,可以把内网端口映射到外网。
1、frp是什么?
1、frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
frp 主要由两个组件组成:客户端(frpc) 和 服务端(frps)。通常情况下,服务端部署在具有公网 IP 地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。 由于内网服务缺乏公网 IP 地址,因此无法直接被非局域网内的用户访问。用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。
在 frp 中,一个代理对应一个需要公开访问的内网服务。一个客户端可以同时配置多个代理,以满足不同的需求。
2、frp和nginx的区别
FRP 和 Nginx 存在多方面的区别,以下是详细介绍:
功能特性
Nginx:支持 HTTP/2、IPv6、WebSockets、gRPC 以及 HTTP/3(通过 Nginx QUIC 传输模块)等多种协议和技术,能很好地服务静态文件,支持 SSL,还包含用于转换响应的模块,可通过第三方模块进行扩展5.
FRP:支持 TCP、UDP、HTTP、HTTPS、WebSocket 等协议,拥有丰富的插件系统,支持全锥型 NAT、P2P 连接、会话保持、健康检查以及热重载而不中断连接等功能.
使用场景
Nginx:适用于复杂的负载均衡场景、高性能环境以及服务网格架构等,在需要诸如速率限制、缓存或高级路由等高级功能时表现出色,常被用于容器化环境如 Kubernetes 中的入口控制,以管理对集群中服务的外部访问.
FRP:擅长将位于 NAT 或防火墙后的内部服务快速、简便地暴露到互联网上,例如位于 NAT 后的 Web 服务器或用于远程管理的 SSH 服务器,适用于较为简单的场景,无需 Nginx 的高级功能.
易用性
Nginx:配置语法相对简单,有庞大的社区提供丰富的文档和示例,但要处理复杂任务可能需要深厚的技术专业知识.
FRP:设置和管理相对容易,即使没有丰富的网络知识,也能轻松地将内部服务器暴露到互联网上.
反向代理与负载均衡能力
Nginx:作为高性能的负载均衡器,支持 HTTP、TCP 和 UDP 的负载均衡,具备 SSL 终止、会话保持、健康检查和服务器名称指示(SNI)等功能,能提供容错和实时活动监控,不过其高级负载均衡功能仅在付费的 Nginx Plus 版本中可用,复杂场景下的配置可能会变得复杂.
FRP:可将任何位于 NAT 或防火墙后的 HTTP 和 HTTPS 服务暴露到互联网,支持会话保持和健康检查,能在同一端口上复用流量以代理多个服务,但负载均衡功能相较于 Nginx 不够成熟.
对不同协议的支持
HTTP 和 HTTPS:Nginx 在 HTTP 和 HTTPS 方面表现卓越,提供了丰富的路由、重写、重定向和负载均衡选项,还有缓存和速率限制等高级功能;FRP 虽也能处理 HTTP/HTTPS 流量,但缺少 Nginx 的高级选项.
SSH:Nginx 不适合处理 SSH 流量,而 FRP 能够将来自公网的 SSH 流量转发到私网,方便管理位于 NAT 或防火墙后的服务器.
WebSockets:Nginx 对 WebSockets 有强大的支持,可提供代理和负载均衡;FRP 支持 WebSockets,但缺乏 Nginx 的高级负载均衡和路由功能.
要配置frp内网穿透服务器有2个前提条件---------------------------------------------------------------------------------------------------------------
1.必须有一台可以公网访问的服务器,我这里用的是阿里云的云服务器。
2.内网的服务器要能ping通云服务器。
下面开始frp服务器的部署
1.frp服务端部署
首先在公网服务器下载frp插件,github地址https://github.com/fatedier/frp/
wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz
下载完成后解压
注意这里有frpc和frps,frpc.toml和frps.toml分别代表frp客户端和服务端的配置文件。这里只需要配置服务端的配置frps.toml
编辑frps.toml文件
[common] bind_port = 9911 dashboard_port = 9912 dashboard_user = admin dashboard_pwd = admin
详解
bind_port frp服务端口,frpc的配置会调用
dashboard_port frp的web控制台端口
dashboard_user frp的web控制台端口账号
dashboard_pwd frp的web控制台端口密码
部署完成后,运行
./frps -c frps.toml
也可以后台启动 nohup ./frps -c ./frps.toml &> /dev/null &
加入系统服务
vim /etc/systemd/system/frps.service
[Unit] Description=frp server After=network.target syslog.target Wants=network.target [Service] Type=simple # 启动frps的命令,需修改为您的frps的安装路径 ExecStart=/root/data/frp/frp_0.59.0_linux_amd64/frps -c /root/data/frp/frp_0.59.0_linux_amd64/frps.toml [Install] WantedBy=multi-user.target
启动 systemctl start frps
启动成功访问xxxxxxx:9912,出现如下页面说明服务端部署完成
2.frp客户端部署
在需要映射的内网服务器上部署frpc。
配置frpc.toml文件
[common] server_addr = 公网ip server_port = 9911 [tcp_9000] type = tcp local_ip = 127.0.0.1 local_port = 9000 remote_port = 9000 [tcp_admin] type = tcp local_ip = 192.168.124.222 local_port = 9090 remote_port = 9090 [tcp_nacos] type = tcp local_ip = 192.168.124.200 local_port = 8848 remote_port = 8848 [tcp_api] type = tcp local_ip = 192.168.124.222 local_port = 80 remote_port = 80 [Web] # http服务 ## 数据类型 type = http ## 本地IP localhost、127.0.0.1或你用ipconfig得到的内网IP都可 local_ip = 127.0.0.1 ## 本地需要暴露在外网的端口,一般为你本地的项目端口 local_port = 80 ## 是该条规则在服务端开放的端口号,自己填写并记录即可,服务端对https设置的端口为8200,所以此处也为8200 ## remote_port = 8200 ## subdomain = test custom_domains= **.**.**.**
local_ip 指定的就是需要外网映射的端口,可以配置多个端口
配置成系统命令
vim /etc/systemd/system/frpc.service
[Unit] Description=frp client After=network.target syslog.target Wants=network.target [Service] Type=simple # 启动frps的命令,需修改为您的frps的安装路径 ExecStart=/data/frp/frp_0.59.0_linux_amd64/frpc -c /data/frp/frp_0.59.0_linux_amd64/frpc.toml [Install] WantedBy=multi-user.target
启动
systemctl start frpc.service
客户端启动会连接公网的frps服务器地址
启动成功后 访问 公网ip:8848 或者 公网ip:9090, 出现相关页面,已经成功映射到公网ip。
标签:frps,实现,穿透,Nginx,frp,公网,内网,port From: https://www.cnblogs.com/yylucky666/p/18662366