内存穿透
内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。简单来说,就是通过一定的技术手段,让位于内网(局域网)的设备能够被公网(互联网)上的设备所访问,实现内外网之间的互联互通。
ngrok 介绍
概述
ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。它可捕获和分析所有通道上的流量,便于后期分析和重放。ngrok 支持多种协议,包括常见的 HTTP、HTTPS 以及 TCP 协议等,这意味着无论是 Web 服务、SSH 服务还是其他基于 TCP 协议的服务,都能通过 ngrok 实现内网穿透。
特点
- 使用方便:操作相对简单,适合入门,免费使用(需求少的话就不需要购买它的付费服务)。
- 支持多协议:能满足不同类型服务的内网穿透需求。
- 数据监控:可捕获和分析所有通道上的流量,便于后期分析和重放。
使用 ngrok 实现内网穿透步骤
注册 ngrok 账号
访问 ngrok 官方网站(https://ngrok.com/)。
可以使用 GitHub 或者 Google 账号进行登录。完成注册并登录之后,可以看到 Dashboard 中给出了使用的三个步骤。
下载 ngrok 客户端
进入官网的下载页面(HTTPS://http://ngrok.com/download),官方清晰地给出了各个系统的安装方法。
个人推荐直接下载 ZIP 包,然后直接解压,这种方式最为迅速。根据自己的操作系统选择对应的软件,例如 Windows 系统选择 Windows 的安装包。
配置账户
- 获取 Authtoken:登录 Ngrok 控制台后,在个人设置或相关页面中找到 “Authtoken”。这是一个用于验证身份的密钥,Ngrok 通过它识别用户身份,确保合法使用服务。复制该 “Authtoken”,后续配置 Ngrok 时会用到。
配置 Authtoken:打开命令提示符(CMD),切换到 Ngrok 解压后的目录,例如输入 “cd C:
ngrok”。然后执行命令 :
1 | ngrok authtoken 2Yh...(Your Authtoken) |
将方括号替换为实际的 Authtoken。执行此命令后,Ngrok 会将 Authtoken 保存到本地配置文件中,以便后续使用时自动验证身份。
(四)启动内网穿透
假设本地运行了一个 Web 服务,监听在 8080 端口,现在要通过 Ngrok 将其暴露到公网。在命令提示符中执行 :
1 | ngrok HTTP 8080 |
执行该命令后,Ngrok 会与 Ngrok 服务器建立连接,并为本地的 8080 端口生成一个公网访问地址,类似 “HTTPS://xxxx.ngrok-free.app”(xxxx 为随机生成的字符串)。
此时,任何人通过这个公网地址就可以访问本地运行在 8080 端口的服务。
进入后就可以看到你写的后端内容了。
(五)其他常用命令与配置
- 指定子域名:如果希望使用自定义的子域名,可在启动命令中添加参数。例如,要使用 “myweb” 作为子域名,执行:
1 | ngrok HTTP -subdomain = myweb 8080 |
- 这样生成的公网地址将是 “
https://myweb.ngrok.io”,方便记忆和识别。但需要注意,自定义子域名可能需要一定权限或付费服务,具体可查看 Ngrok 官方文档。 - 监听 TCP 端口:若本地运行的是 TCP 服务,如 SSH 服务(默认 22 端口),可使用 “ngrok tcp 22” 命令。Ngrok 会为 TCP 服务生成一个公网地址,格式为 “tcp://0.tcp.ngrok.io:xxxx”(xxxx 为随机分配的端口号),通过这个地址和端口即可在外网访问本地的 TCP 服务。
- 查看状态与日志:在 Ngrok 运行过程中,可通过访问 “
http://127.0.0.1:4040” 在浏览器中查看 Ngrok 的状态和日志信息。这里可以看到请求记录、连接状态等,方便调试和排查问题。例如,如果发现某个请求失败,可以查看日志了解具体原因,如网络问题、服务未正常响应等。
注意事项
- 不要泄露 Authtoken:若泄露请及时清除和更换。
- 关闭服务:关闭黑色框框,或者在黑色框框那里 Ctrl + C 停止服务,用完一定要关服务,否则别人可以访问,不安全。
- 静态固定域名的配置:每次启动服务,这个域名是随机分配的,不利于我们持续访问,因此需要进行静态域名的配置。点击 Domains,选择 Create Domain,免费的服务就只能创建一个固定域名了。网站会分配给我们一个静态域名,复制那行命令,粘贴到黑色框框中即可。
- 网络区域指定:有时候可能会报 “Session Status reconnecting (failed to send authentication request: EOF)”,自己指定一下区域就可以正常启动内网穿透服务了,可指定的区域有:us(美国,默认区域)、eu(欧洲)、ap(亚太地区)、au(澳大利亚)、sa(南美洲)、jp(日本)、in(印度) 。
- 数据库连接限制:使用免费账户时,若想使用 ngrok 用 tcp 来连接数据库,会有如下限制 “You must add a credit or debit card before you can use TCP endpoints on a free account. We require a valid card as a way to combat abuse and keep the internet a safe place. This card will NOT be charged”,此时可以考虑使用 coplar 来进行数据库连接,coplar 的命令跟 ngrok 差不多,并且 coplar 还提供了 webui,操作更简单。
















