慧眼看世界 - 一个值得收藏的网站
内网穿透(NAT穿透)用于将处于内网中的设备或服务器,通过某种方式暴露给外网,实现外网设备能够访问内网服务。常见的内网穿透工具包括frp、ngrok、花生壳等。以下是详细的内网穿透配置步骤,重点介绍使用frp(Fast Reverse Proxy)来实现内网穿透。
1. 什么是内网穿透?
内网穿透是指通过代理或转发技术,将局域网中的服务器映射到公网,使得外部用户能够访问。这种技术常用于家用网络、企业内网等无法直接通过公网访问的场景。
2. 内网穿透常见场景
内网服务(例如网站、SSH服务等)暴露给外网用户。
远程办公时访问公司内网。
使用公网IP地址不足的场合。
3. 使用frp实现内网穿透
3.1 方案概述
frp 是一个开源的反向代理工具,支持 TCP、UDP、HTTP、HTTPS 等协议。它通过服务器端(Frp Server)和客户端(Frp Client)协作,将内网服务映射到外网访问。
Frp Server:部署在拥有公网IP的服务器上,负责转发流量。
Frp Client:部署在内网中的设备上,连接到Frp Server并注册需要穿透的服务。
3.2 环境要求
一台具有公网IP的服务器(例如云服务器,AWS、阿里云、腾讯云等)。
内网中的服务器或设备,运行Frp Client。
3.3 部署步骤
1. 安装frp
下载frp:从GitHub Releases页面下载frp的最新版本。
wget https://github.com/fatedier/frp/releases/download/v0.45.0/frp_0.45.0_linux_amd64.tar.gz tar -zxvf frp_0.45.0_linux_amd64.tar.gz cd frp_0.45.0_linux_amd64
2. 配置Frp Server(公网服务器)
在拥有公网IP的服务器上配置Frp Server,服务器将负责转发外部请求到内网中的设备。
编辑服务器配置文件 frps.ini:
[common] bind_port = 7000 # 设置frp服务器监听的端口,客户端将连接此端口 dashboard_port = 7500 # 控制面板的端口(可选) dashboard_user = admin # 控制面板登录用户名(可选) dashboard_pwd = password # 控制面板登录密码(可选)
启动Frp Server:
./frps -c ./frps.ini
Frp服务器将会监听7000端口,等待内网客户端连接。
3. 配置Frp Client(内网设备)
在需要穿透的内网设备上配置Frp Client,使其能够将内网服务映射到Frp Server。
编辑客户端配置文件 frpc.ini:
这里假设你要将内网中的80端口(HTTP服务)映射到Frp Server的8080端口。
[common] server_addr = <Frp Server的公网IP> server_port = 7000 # 服务器端监听的端口 [web] type = http local_port = 80 # 本地内网服务器端口,例如网站服务的端口 custom_domains = www.example.com # 访问域名,需解析到Frp Server的IP
如果你要映射TCP服务,例如SSH服务,可以这样配置:
[ssh] type = tcp local_port = 22 # 本地SSH端口 remote_port = 6000 # 外网访问时的端口,指定Frp Server暴露的端口
启动Frp Client:
./frpc -c ./frpc.ini
4. 配置域名解析(可选)
如果你配置了HTTP/HTTPS服务并希望通过域名访问,需要将域名解析到Frp Server的公网IP。
例如,配置www.example.com的A记录指向Frp Server的公网IP。
5. 测试穿透效果
HTTP服务测试: 在浏览器中访问http://www.example.com,应能看到内网的80端口服务(例如Web应用)正常展示。
SSH服务测试: 在外部机器上使用SSH连接:
ssh -p 6000 user@<Frp Server公网IP>
应能正常连接到内网设备的SSH服务。
3.4 Frp的进阶配置
1. 启用HTTPS穿透
如果要通过https协议穿透,可以使用以下配置:
[https] type = https local_port = 443 custom_domains = www.example.com
2. 多服务穿透
你可以通过在frpc.ini中定义多个服务,穿透多个端口。例如,既要穿透HTTP服务,又要穿透SSH服务:
[common] server_addr = <Frp Server的公网IP> server_port = 7000
[web] type = http local_port = 80 custom_domains = www.example.com
[ssh] type = tcp local_port = 22 remote_port = 6000
3. 控制面板
Frp提供了控制面板,可以实时查看客户端的连接情况和流量信息。默认访问http://<Frp Server公网IP>:7500,使用dashboard_user和dashboard_pwd登录。
4. 日志和错误排查
服务器端日志:可以通过frps.ini中的log_file参数设置日志文件,便于排查问题。
log_file = ./frps.log
客户端日志:客户端同样可以配置log_file以记录运行信息。
log_file = ./frpc.log
4. 花生壳的替代方案
如果你没有公网服务器或配置Frp较为复杂,也可以使用一些现成的内网穿透服务,例如:
花生壳:提供免费的内网穿透服务,易于配置,适合小型项目和个人使用。
ngrok:国外知名的内网穿透工具,提供免费的基础服务,但需要注册账号。
5. 安全性建议
使用加密协议:如果传输敏感数据,建议使用https或SSH加密通信。
防火墙设置:在Frp Server上设置防火墙规则,限制外部对穿透端口的访问。
身份认证:使用Frp的访问控制功能,确保只有授权的客户端可以连接。
6. 总结
内网穿透工具为在复杂网络环境下实现公网访问提供了有效的解决方案,Frp作为一款轻量且灵活的开源工具,非常适合需要自定义和控制穿透过程的用户。通过正确配置Frp,可以实现HTTP、SSH等多种服务的内网穿透,并结合域名解析与控制面板,轻松管理内网服务的外部访问。
本文链接:https://www.sxlog.com/post/1824.html