内网穿透
又称为NAT穿透,是一种技术手段,允许内网设备(如运行在公司内部网络、家庭网络中的服务器、智能设备等)的服务能够被外网用户访问。通常情况下,由于路由器、防火墙等设备的网络地址转换(NAT)以及安全策略限制,内网设备的服务无法直接被公网访问。内网穿透通过特定的软件或服务,将公网请求转发至内网目标设备,从而实现内外网络的通信。以下是一般内网穿透部署流程的详细讲解:
步骤一:确定需求与选择穿透工具
-
明确需求:确定需要穿透的服务类型(如HTTP、SSH、RDP、FTP等)、端口、预期的带宽要求、稳定性需求、安全性考虑等因素。
-
选择穿透工具:市面上有许多免费和付费的内网穿透解决方案,例如:
- 免费/开源工具:Ngrok、Serveo、Localtunnel、FRP(Fast Reverse Proxy)等。
- 付费服务:花生壳、向日葵、Ngrok商业版、ZeroTier等,通常提供更稳定的服务、更高的带宽、自定义域名绑定等功能。
根据实际需求选择合适的穿透工具或服务。
步骤二:准备内网环境
-
确保内网服务正常运行:在待穿透的内网设备上安装并配置好所需的服务(如Web服务器、SSH服务器等),确保服务在内网环境中能正常访问。
-
检查端口开放:确认内网设备上服务监听的端口未被防火墙或其他安全软件阻塞,确保内网其他设备可以访问该服务。
步骤三:配置穿透工具
-
安装客户端:如果是使用客户端/服务器模式的穿透工具(如Ngrok、FRP),需要在内网设备上安装相应的客户端软件。
-
注册账号(如有必要):对于需要账号管理的穿透服务,如商业版Ngrok或花生壳,需先注册账号并获取API密钥或授权信息。
-
配置隧道:根据所选工具的文档,配置穿透隧道。通常需要指定以下信息:
- 本地服务端口:内网服务监听的端口。
- 协议类型:如HTTP、HTTPS、TCP等,与内网服务匹配。
- 隧道类型:直连型(直接暴露内网服务端口)或反向代理型(将公网请求转发至内网服务)。
- (可选)自定义域名:如果服务支持,可以绑定自定义域名以获得更友好的访问地址。
示例配置命令可能如下:
Bash1ngrok http 8080 # 使用Ngrok穿透内网8080端口的HTTP服务 2frpc -c frpc.ini # 使用FRP,配置文件frpc.ini中定义了穿透规则
步骤四:启动穿透服务
-
启动内网穿透客户端:执行配置好的穿透命令或启动客户端程序,工具会自动建立与公网服务器的连接,并分配一个临时的公网访问地址(如
https://abc123.ngrok.io
)。 -
验证穿透效果:在外网环境下,使用工具提供的公网地址尝试访问内网服务。如果一切正常,应该能看到内网服务的内容或成功建立连接。
步骤五(可选):持久化与自动化
-
配置保存与重启:对于需要长期使用的穿透服务,可以保存配置信息,以便在设备重启后自动恢复穿透。具体方法视工具而定,可能涉及编写启动脚本、设置系统服务等。
-
域名绑定与DNS更新(如有必要):如果使用了自定义域名,需要在域名服务商处将域名解析指向穿透工具提供的公网IP或CNAME记录。注意,解析更改可能需要时间生效。
-
监控与日志管理:对于生产环境,建议设置监控报警,关注穿透服务的可用性、带宽使用等情况。同时,定期查看工具日志,及时发现并处理潜在问题。
完成内网穿透的部署,后续根据实际使用情况,需要进一步调整配置、优化性能或升级服务。需要注意穿透服务的安全性,合理设置访问权限
++++++++++++++++++++++++++++++++++++++++++++++++++++++
下面是具体实现过程(ubuntu系统)实现:
一、搭建本地服务器环境(小皮面板)
这里使用phpstudy 官网下载
常用命令
安装完成后可以在ssh工具中使用 xp 命令,来查看,面板状态,重启,关闭,修改面板密码,查看面板密码等。
另外如果你是专业人员,可以在ssh工具中输入 phpstudy 也会显示phpstudy常用 的命令
Ubuntu安装脚本:
wget -O install.sh https://notdocker.xp.cn/install.sh && sudo bash install.sh
出现这种页面算安装完成
点击网站、点击配置、再点击修改
再返回首页
点击localhost
出现
到这里,本地服务器环境已经搭建好了,本地可以访问了(还没有内网穿透,外网还不能访问)
二、内网穿透(cpolar做内网穿透)
1、cpolar
cpolar是一种安全的内网穿透云服务,它将内网下的本地服务器通过安全隧道暴露至公网。使得公网用户可以正常访问内网服务,是一款内网穿透软件。只需一行命令,就可以将内网站点发布至公网,方便给客户演示。高效调试微信公众号、小程序、对接支付宝网关等云端服务,提高您的编程效率
2、它能用在哪些场景?
- 微信公众号开发,实时断点调试微信消息
- 在没有上线部署的情况下,在发布会上演示新网站
- 在您的开发机器上构建webhook客户程序,聊天机器人
- 无需部署,测试连接到本地开发环境后端的移动应用程序
- 为已经在生产环境部署的设备,提供稳定的公网访问地址
- 从您家中运行个人云服务、AI深度学习、聊天机器人
- 远程控制家中的电脑
- 远程SSH控制树莓派
ip address
ifconfig
1.1.2.Linux #
- 自动安装方式:一键自动安装脚本
- 手动安装方式:在官网下载下载适用于Linux平台的zip压缩包,解压后得到cpolar,然后通过命令行带参数运行即可。
一键自动安装脚本
环境需求:
该脚本适用于Ubuntu16.04/18.04/20.04及以后,Centos7/8及以后版本,树莓派最新官方镜像,及支持systemd的新式Linux操作系统,该脚本会自动判断CPU架构(i386/amd64/mips/arm/arm64等等),自动下载对应cpolar客户端,并自动部署安装。
1. cpolar 安装(国内使用)
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
或 cpolar短链接安装方式:(国外使用)
curl -sL https://git.io/cpolar | sudo bash
2. 查看版本号,有正常显示版本号即为安装成功
cpolar version
3. token认证
登录cpolar官网后台,点击左侧的验证
,查看自己的认证token,之后将token贴在命令行里
cpolar authtoken xxxxxxx
4. 简单穿透测试
cpolar http 8080
按ctrl+c退出
5. 向系统添加服务
sudo systemctl enable cpolar
6. 启动cpolar服务
sudo systemctl start cpolar
7. 查看服务状态
sudo systemctl status cpolar
8. 登录后台,查看隧道在线状态
https://dashboard.cpolar.com/status
9. 安装完成
可以参考系列文章进一步使用cpolar——linux系列教程文章
注: cpolar 卸载方法
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash -s -- --remove
安装说明:
- cpolar默认安装路径 /usr/local/bin/cpolar,
- 安装脚本会自动配置systemd服务脚本,启动以后,可以开机自启动。
- 如果第一次安装,会默认配置一个简单的样例配置文件,创建了两个样例隧道,一个web,一个ssh
- cpolar配置文件路径: /usr/local/etc/cpolar/cpolar.yml
如需访问web ui 管理界面,输入http://本机ip:9200 即可访问
1.2.配置token认证令牌 #
cpolar服务的许多高级功能,需要与您注册的帐户关联才能使用。一旦您注册成功,您需要在后台仪表板上显示的authtoken参数配置cpolar客户端。它将授予您访问自己帐户的功能权限。 cpolar客户端有一个简单的’authtoken’命令,它使用起来很简单。
cpolar authtoken <YOUR_AUTHTOKEN>
1.3.将本地Web服务器公开到Internet #
cpolar允许您将本地计算机上运行的Web服务器公开到Internet。告诉cpolar您的Web服务器正在侦听哪个端口。
如果您不知道Web服务器正在侦听哪个端口,则可能是80端口,即HTTP的默认端口。
示例:将本地计算机的端口80上的Web服务器公开到Internet
cpolar http 80
启动cpolar时,它将在终端中显示一个UI,其中包含隧道的公共URL以及有关通过隧道建立的连接的其他状态和度量信息。
cpolar控制台用户界面
cpolar by @bestExpresser
Tunnel Status online
Version 2.0/2.0
Web Interface http://127.0.0.1:4040
Forwarding http://92832de0.cpolar.io -> localhost:80
Forwarding https://92832de0.cpolar.io -> localhost:80
Connnections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
1.4.监听你的消息包流量 #
cpolar客户端提供实时Web UI管理界面,你可以在其中查看隧道上运行的所有HTTP流量。启动cpolar客户端后,只需在Web浏览器中打开http://localhost:4040 即可检查请求详细信息。
尝试向你的公开网址发出请求,完成后,请回顾检查Web UI管理界面。你将看到请求和响应包的所有详细信息,包括时间,持续时间,HEAD标头,查询参数和请求有效负载以及线路上的原始字节。
HTTP请求和响应的详细内容
1.5.重放请求 #
开发外部API发布的Web API通常会要求您做一些工作(如微信公网众号用户发送消息)来触发回调请求,从而减慢开发周期。 cpolar允许您通过单击重放任何Http请求,这样大大加快了开发调试周期。点击网络检查用户界面上任意请求右上角的重放(Replay)按钮进行重放。
只需点击一下即可重放任何针对隧道网络服务器的请求
1.6.请求消息体检查 #
cpolar特别支持Web上使用的最常见的数据交换格式。请求或响应正文中的任何XML或JSON数据都会自动为您打印并检查语法错误。
突出显示JSON语法错误的位置
2.Cpolar Web UI #
cpolar web UI管理界面,默认端口为
9200
。如需修改默认端口号,请查阅常见问题下的相关教程进行修改。
cpolar本地安装成功后,可通过浏览器访问cpolar web UI管理界面,以【 http://本地ip地址:9200 】形式访问,如
均可访问到cpolar web ui管理界面【也可在同个局域网下不同的设备上进行访问】,如下图所示,使用cpolar账号登录即可:
注意:如提示
无法访问此网站,127.0.0.1 拒绝了我们的连接请求
或Network Error
,请查阅常见问题。
cpolar web UI界面登录成功后,自动转入仪表盘界面。我们可以在这里创建隧道、编辑隧道、查看隧道信息、查看所生成的公网地址,查看系统状态等信息。
cpolar默认会安装两个样例隧道,可直接使用,或者编辑、删减:
- 一个是Website隧道指向http 8080端口
- 一个是ssh隧道,指向tcp 22端口(如为windows系统,则为remoteDesktop隧道,指向tcp 3389端口)
2.1.1.HTTP隧道 #
点击左侧仪表盘的隧道管理
——创建隧道
,填写隧道信息
- 隧道名称:可自定义,注意不要与现有隧道名称重复即可
- 协议:选择
http
- 本地地址:填写所要映射的端口号,如8080
- 域名类型:免费套餐选择
随机域名
- 地区:可自由选择服务器地区(注意China NAS地区仅供NAS套餐用户使用)
点击创建
隧道创建成功后,页面会自动跳转到隧道列表
页面,可以看到所有数据隧道,包含刚刚创建成功的tunnel-1隧道
点击左侧仪表盘的状态——在线隧道列表,可以查看到本地所有在线隧道,以及所生成的公网地址。
可以看到刚刚所创建成功的tunnel-1隧道,已经有生成了相应的公网地址,复制到浏览器访问即可:
- 一个http协议地址
- 一个https协议地址(省去申请/配置证书的繁琐步骤)
2.1.2.TCP隧道 #
点击左侧仪表盘的隧道管理
——创建隧道
,填写隧道信息
- 隧道名称:可自定义,注意不要与现有隧道名称重复即可
- 协议:选择
tcp
- 本地地址:填写所要映射的端口号,如22
- 域名类型:免费套餐选择
随机域名
- 地区:可自由选择服务器地区(注意China NAS地区仅供NAS套餐用户使用)
点击创建
隧道创建成功后,页面会自动跳转到隧道列表
页面,可以看到创建成功的tunnel-2隧道,状态正常为active
点击左侧仪表盘的状态——在线隧道列表,可以看到刚刚创建的tunnel-2隧道,已经有生成了相应的公网地址,本例为6.tcp.cpolar.top:10577
,注意tcp://
无需复制
9.常见问题 #
9.1.无法访问cpolar web ui #
当在浏览器上访问本地9200端口时,页面提示无法访问此网站,127.0.0.1 拒绝了我们的连接请求
或Network Error
,如下图所示:
解决方案:请重启cpolar服务
2. Linux系统:
请先确认是否有安装cpolar服务,如未安装cpolar服务
,请操作安装cpolar服务:
- 向系统添加cpolar服务
sudo systemctl enable cpolar
- 启动cpolar服务
sudo systemctl start cpolar
- 查看服务状态
sudo systemctl status cpolar
如正常显示为active(running)
,则为启动成功状态
如已安装cpolar服务
,则执行命令重启cpolar服务,再重新尝试访问cpolar web ui管理界面
sudo systemctl restart cpolar
1. Windows系统:
点击开始菜单栏搜索服务
,并点击打开服务,找到Cpolar Service
,选中并右键点击重新启动
,确认cpolar service状态为正在运行
,再重新在浏览器访问本地9200端口,访问cpolar web UI管理界面。