美文网首页
自己搭建ngrok实现内网穿透

自己搭建ngrok实现内网穿透

作者: 菜菜菜菜鸟 | 来源:发表于2019-06-10 00:28 被阅读0次

背景

毕设搞了下树莓派,校园网或者在家使用肯定是内网了,即便家里的宽带是公网ip,每次重启ip都会变化,一开始也考虑了使用花生壳等花钱的内网穿透工具,后来查阅资料可以使用ngrok在云服务器上搭建来实现多客户端的内网穿透,配置上自己的域名还是很好的。

服务器选择

我这里使用的是某云服务提供商下的Ubuntu 16.04云服务器,配置很低单核1G,一般使用绝对是没问题的,本博客就是部署在这上面的。其他的linux发行版本也是没有问题的。

搭建

域名配置

这里用到的域名是proxys.nknow.top,需要将proxys.nknow.top*.proxys.nknow.top解析到该云服务器上。

配置go语音环境

ngrokgo语音写的,服务器上需要配置go语言环境,相关配置命令如下:

下载

#下载
wget https://storage.googleapis.com/golang/go1.9.1.linux-amd64.tar.gz
#解压
tar -zxvf go1.9.1.linux-amd64.tar.gz
#移动到local目录
mv go /usr/local

创建软连接

执行完以上配置是不能直接使用go命令的,可以配置环境变量或者创建软连接到/usr/bin,一下是创建软连接操作:

#进入/usr/bin
cd /usr/bin
ln -s /usr/local/go/bin/go ./
ln -s /usr/local/go/bin/godoc ./
ln -s /usr/local/go/bin/gofmt ./

测试

go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/root/go"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build025512091=/tmp/go-build -gno-record-gcc-switches"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"

至此go语言环境配置完成。

安装ngrok

下载源码

git clone https://github.com/inconshreveable/ngrok.git

生成证书

# 进入ngrok源码的目录
cd ngrok
# 创建保存自定义签名证书的文件夹  这里叫myssl
mkdir myssl
# 进入
cd myssl
# 设置域名,这里使用  proxys.nknow.top
export NGROK_DOMAIN="proxys.nknow.top"
# 然后依次执行以下命令即可
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
# 替换原来证书
cp rootCA.pem ../assets/client/tls/ngrokroot.crt
cp device.crt ../assets/server/tls/snakeoil.crt
cp device.key ../assets/server/tls/snakeoil.key

编译服务端

# 在ngrok目录执行
export GOOS=linux
export GOARCH=386
make release-server

编译各大平台客户端

linux
export GOOS=linux
export GOARCH=386
make release-client
树莓派
export GOOS=linux
export GOARCH=arm
make release-client
mac
export GOOS=darwin
export GOARCH=amd64
make release-client
windows
export GOOS=windows
export GOARCH=amd64
make release-client

生成的可执行文件

.../ngrok/bin$tree
.
|-- darwin_amd64
|   `-- ngrok
|-- go-bindata
|-- linux_386
|   |-- ngrok
|   `-- ngrokd
|-- linux_arm
|   `-- ngrok
`-- windows_amd64
    `-- ngrok.exe

启动服务端

由于服务器本身启动了80443端口,因此这里改为8000444端口,启动命令如下:

sudo ./ngrokd -domain="proxys.nknow.top" -httpAddr=":8000" -httpsAddr=":444"
服务端启动效果图
上图可以开出使用4443端口进行通讯,需要在防火墙开启该端口,云服务器可以在面板上进行操作,设置的httphttps对应的端口也需要打开。

客户端配置文件

将上面生成的客户端可执行文件拷贝到需要内网穿透的设备上即可,这里直接说多域名和多TCP内网穿透配置文件,直接在客户端同级目录下创建ngrok.cfg配置文件,内容如下(只放了部分):

server_addr: proxys.nknow.top:4443
trust_host_root_certs: false
tunnels:
 weixin:
  subdomain: weixin
  proto:
   http: 8002
 about:
  subdomain: about
  proto:
   http: 192.168.0.1:80
 ssh:
  remote_port: 2020
  proto:
   tcp: 22

采用严格的单空格缩进,可以代理其他主机,直接跟端口默认是本主机,还要注意防火墙的配置。

内网穿透

启动特定的转发:

./ngrok -config ngrok.cfg start weixin

将所有配置转发:

./ngrok -config ngrok.cfg start-all

启动后出现online字样说明内网穿透成功。

相关文章

网友评论

      本文标题:自己搭建ngrok实现内网穿透

      本文链接:https://www.haomeiwen.com/subject/bsnoxctx.html