新闻资讯

aws 搭建 ngrok 不设置域名实现内网穿透

2025-03-16

在 AWS 上搭建 ngrok 不设置域名,能让你快速实现内网穿透功能,为本地服务提供临时的外网访问途径。
准备工作:
1.拥有 AWS 账号并创建 EC2 实例:登录 AWS 管理控制台,在 EC2 服务中创建一个实例。选择合适的操作系统镜像,例如常见的 Ubuntu Server。在选择实例类型时,根据实际需求确定计算资源,一般 t2.micro 等小型实例对于测试搭建 ngrok 已经足够。创建过程中设置好密钥对,以便后续能通过 SSH 连接到实例。
2.安装必要软件包:通过 SSH 连接到创建好的 EC2 实例。对于 Ubuntu 系统,使用以下命令安装所需软件包:
sudo apt update
sudo apt install -y build-essential golang
build-essential包提供了编译软件所需的基础工具,而golang是编译 ngrok 所必需的,因为 ngrok 是使用 Go 语言编写的。
编译 ngrok:
1.下载 ngrok 源码
2.:
-可以从 ngrok 的官方 GitHub 仓库获取源码。在实例终端中执行:
git clone https://github.com/inconshreveable/ngrok.git
这会将 ngrok 的源码克隆到当前目录下的ngrok文件夹中。
2.编译服务端:
-进入ngrok目录:
cd ngrok
-生成自签名证书。由于不设置域名,这里使用自签名证书即可满足临时使用需求。执行以下命令生成证书,其中example.com可替换为任意自定义字符串,仅用于生成证书的标识:
openssl genrsa -out rootCA.key 2048
openssl req -new -x509 -days 365 -key rootCA.key -out rootCA.pem -subj "/CN=example.com"
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -subj "/CN=example.com"
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 365
-编辑Makefile文件,找到SERVER_HOST变量,将其值修改为你实例的公网 IP 地址,例如:
SERVER_HOST := <你的实例公网IP>
-执行编译命令:
make release-server
这会编译生成 ngrok 的服务端可执行文件。
配置和启动 ngrok 服务端:
1.创建配置目录:
sudo mkdir -p /etc/ngrok
1.将生成的证书文件移动到配置目录:
sudo mv rootCA.pem /etc/ngrok/
sudo mv server.crt /etc/ngrok/
sudo mv server.key /etc/ngrok/
1.创建服务端配置文件:
sudo nano /etc/ngrok/ngrokd.yml
在文件中添加以下内容,其中bind_addr设置为实例公网 IP 和要监听的端口(例如 4443),trust_host_root_certs设置为false:
server_addr: "<你的实例公网IP>:4443"
trust_host_root_certs: false
1.启动 ngrok 服务端:
sudo./bin/ngrokd -tlsKey=/etc/ngrok/server.key -tlsCrt=/etc/ngrok/server.crt -domain="<你的实例公网IP>" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"
此时 ngrok 服务端已在你的 AWS 实例上启动,并且没有设置域名,通过实例公网 IP 来提供服务。
客户端连接:
1.下载 ngrok 客户端:在本地电脑上,根据操作系统从 ngrok 官网下载对应的客户端。例如对于 Windows 系统,下载ngrok-stable-windows-amd64.zip,解压后得到ngrok.exe。
2.配置客户端:创建一个ngrok.yml文件,添加以下内容,其中server_addr设置为 AWS 实例的公网 IP 和端口(与服务端配置的tunnelAddr一致),trust_host_root_certs设置为false,tunnels部分配置要穿透的本地服务,例如本地运行在 8080 端口的 Web 服务:
server_addr: "<你的实例公网IP>:4443"
trust_host_root_certs: false
tunnels:
web:
remote_port: 80
proto:
http: 127.0.0.1:8080
1.启动客户端:在命令行中进入ngrok.exe所在目录,执行:
ngrok.exe start -config=ngrok.yml web
这样就可以通过服务端分配的临时地址访问本地的 8080 端口服务了。


拓展阅读:
-AWS EC2 实例安全组设置:安全组就像是一个虚拟防火墙,控制着进出 EC2 实例的流量。在创建实例时,需要在安全组中添加规则,允许 SSH(端口 22)、HTTP(端口 80)、HTTPS(端口 443)以及 ngrok 服务端监听的端口(如 4443)等流量进入,否则无法正常访问和使用相关服务。
-Go 语言环境变量:在编译 ngrok 过程中涉及到 Go 语言环境变量。GOROOT指向 Go 语言的安装目录,PATH中添加$GOROOT/bin是为了在任何目录下都能执行 Go 语言的工具和编译命令。如果环境变量配置不正确,编译过程可能会出错。
-自签名证书原理:自签名证书是由证书所有者自己生成并签名的证书,而非由受信任的证书颁发机构(CA)颁发。它主要用于内部测试或临时环境,虽然能实现加密通信,但在浏览器等客户端可能会因为不受信任而提示安全警告。在搭建不设置域名的 ngrok 时,自签名证书能满足临时使用的安全需求。

新闻资讯
热门专题
最新专题
友情链接