ngrok实现内网穿透实践
内网穿透是指将内网服务暴露到外网,让外网用户可以访问内网服务。常用的内网穿透工具有 frp、ngrok 和花生壳。本文将对这三种工具进行优缺点分析,并以 ngrok 为中心,详细说明如何在 Windows 上实现内网穿透。
工具对比
1. frp (Fast Reverse Proxy)
frp 是一款开源的、高性能的反向代理应用,支持 TCP、UDP、HTTP 和 HTTPS 协议。
优点:
- 高性能,支持多种协议。
- 支持 P2P 模式,减少延迟。
缺点:
需要有公网 IP进行代理转发请求
2. ngrok
ngrok 是一个跨平台的开源反向代理工具,支持将本地服务器暴露到互联网。
优点:
- 简单易用,配置方便。
- 支持多种协议,HTTP、TCP 等。
提供免费的公网IP。
缺点:
- 免费版有带宽和速率限制。
- 公网地址是临时的,免费版无法自定义域名。
3. 花生壳 (Peanut Hull)
花生壳 是国内常用的内网穿透工具,提供简便的图形化界面操作。
优点:
- 中文界面,使用方便。
- 支持多种协议,适合国内用户。
缺点:
免费版内网穿透不支持浏览器访问,形同鸡肋。
综上,如果自已有公网IP地址,使用frp。如果没用公网IP地址并且希望免费使用内网穿透的,使用ngrok。有付费意向的建议购买云服务器,也无需使用花生壳。接下来就是介绍如何使用ngrok进行内网穿透。
ngrok 内网穿透详细实现步骤
下面以 ngrok 为中心,详细说明如何在 Windows 上实现内网穿透。
1. 注册并下载 Ngrok
- 前往 Ngrok 官网 注册一个免费账户。
- 登录后,前往 Ngrok 下载页面。
- 下载适用于 Windows 的最新版本。
2. 安装 Ngrok
-
将下载的 Ngrok 压缩包解压到一个目录,例如
C:\ngrok。 -
将解压后的目录添加到系统的 PATH 环境变量中,以便在任何地方都可以使用
ngrok命令。
3. 认证 Ngrok
- 获取 Authtoken, 登录 Ngrok 后,在仪表盘中获取你的 Authtoken。
- 在命令行中配置 Authtoken, 打开命令行工具,运行以下命令将
Authtoken配置到你的 Ngrok:
ngrok config add-authtoken <your-authtoken>
4. 启动 Ngrok
要将本地 HTTP 服务暴露到公网,例如 8080端口,运行以下命令:
ngrok http 8080
也可以创建ngrok_local_server.bat,然后双击快捷运行:
@echo off
echo 请输入需要内网穿透的本地端口:
set /p serverport="端口号:"
ngrok http %serverport%
pause
5. 访问你的服务
- Ngrok 启动后,会在终端显示类似以下的信息:
- 其中,
https://xxxxx.ngrok-free.app就是你的公网地址,通过这个地址可以访问你本地的服务。 - 访问公网IP会提示安全风险提示,点击
Visit Site即可:
Ngrok实现公网访问内网Windows文件夹
在开发和测试过程中,我们常常需要在不同设备快速共享文件,或者异地访问内网文件。可以通过Python来实现内网文件夹访问,并结合Ngrok将文件暴露到公网。现在介绍如何使用 Ngrok 在 Windows 上实现公网访问内网文件夹。
步骤 1:安装并配置本地 HTTP 文件服务器
为了通过 Ngrok 访问 Windows 文件夹,我们需要先运行一个 HTTP 文件服务器。可以使用 Python 的内置 HTTP 服务器来实现:
-
确保已安装 Python。如果没有,请从 Python 官网 下载并安装 Python。
-
打开命令提示符 (CMD) 或 PowerShell。
-
导航到你想要共享的文件夹,例如:
cd C:\path\to\your\folder -
运行以下命令启动 HTTP 服务器:
python -m http.server 8081或者对于
Python 3:python3 -m http.server 8081
这样你的文件夹就可以通过http://localhost:8081 访问了。
- 如果想快速运行HTTP服务器,也可以创建start_http_server.bat文件,双击运行。
@echo off
echo 正在获取本机 IP 地址...
for /f "tokens=2 delims=:" %%I in ('ipconfig ^| findstr /R /C:"IPv4"') do set ip=%%I
set ip=%ip: =%
echo 本机 IP 地址为:%ip%
echo 请输入要共享的文件夹路径:
set /p folder="文件夹路径:"
cd /d %folder%
echo 启动 HTTP 服务器在端口 8081 上,请访问地址获取文件: http://%ip%:8081...
python -m http.server 8081
pause
- 如果操作系统是MAC系统,可以创建start_http_server.sh文件
echo "正在获取本机 IP 地址..."
ip=$(ipconfig getifaddr en0)
echo "本机 IP 地址为:$ip"
echo "请输入要共享的文件夹路径:"
read folder
echo "启动 HTTP 服务器在端口 8081 上,请访问地址获取文件: http://$ip:8081..."
python3 -m http.server 8081 --directory "$folder"
定位到start_http_server.sh所属文件夹,在当前文件夹打开终端窗口,执行以下命令即可:
sudo ./start_http_server.sh
步骤 2:配置 Ngrok
Ngrok 帐户被限制为同时只能运行一个 Ngrok 代理会话。会报以下错误"Your account is limited to 1 simultaneous ngrok agent sessions" 。
如果你已经有一个 Ngrok 会话正在运行(如文章前面创建的本地服务),需要先终止它,或者你可以在一个代理会话中运行多个隧道。以下是如何解决这个问题的方法:
创建 Ngrok 配置文件
-
打开
ngrok.yml文件:notepad %USERPROFILE%\AppData\Local\ngrok\ngrok.yml -
在
ngrok.yml文件中添加以下内容并保存:authtoken: YOUR_AUTH_TOKEN tunnels: mytunnel1: proto: http addr: 8080 mytunnel2: proto: http addr: 8081请将
YOUR_AUTH_TOKEN替换为你的 Ngrok 认证令牌。这里配置了2个隧道分别为mytunnel1与mytunnel2,他们的addr对应的是2台本地服务器的端口号。
启动 Ngrok 隧道
- 如果存在ngrok会话,关闭当前正在运行的 ngrok 会话。
-
导航到
ngrok.exe所在的目录,然后运行以下命令启动所有隧道:ngrok start --all -
启动成功后,能看到2台映射成功的公网IP地址:
步骤 4:公网访问你的文件夹
- 拷贝输出台中的
https://xxxxx.ngrok.free.app的 URL,这就是你的本地服务在公网上的访问地址。 在浏览器中打开这个 URL,即可访问本地服务和下载文件。
注意事项
- 安全
确保暴露的服务是安全的,因为任何人都可以通过公网地址访问你的服务!!!- 可以在 Ngrok 仪表盘中配置访问控制和其他安全设置。
- 带宽和速率限制
- 免费版本的 Ngrok 有一定的带宽和速率限制,如果需要更高的性能,可以考虑付费版本。