ngrok穿透服务器搭建

1、环境变量的设置

sudo vi /root/.bashrc

在最下面加入,然后保存

export GOROOT=/usr/local/go

export GOBIN=$GOROOT/bin

export GOPATH=$HOME/go

export GOARCH=amd64

export GOOS=linux

export GOPKG=$GOROOT/pkg/tool/linux_amd64

export PATH=.:$PATH:$GOBIN:$GOPKG

export NGROK_DOMAIN="ngrok.luckln.com"(此域名为基本二级域名)

重新加载 profile 文件,加载环境变量到内存

source /root/.bashrc

sudo yum update

sudo yum install mercurial git bzr subversion epel-release

2、安装Golang

以1.7.6版本为例子下载go1.7.6.linux-amd64.tar.gz安装包,

官方下载地址:http://www.golangtc.com/download

将文件go1.7.6.linux-amd64.tar.gz复制到/usr/local/下

使用tar命令将安装包解压到/usr/local目录下:

sudo tar -C /usr/local/ -zxf go1.7.6.linux-amd64.tar.gz

验证安装结果,在任意目录查看安装版本:执行以下命令

go version

3、下载ngrok源码

此处使用非官方地址,修复了部分包无法获取(摘自网络)(rm -rf /root/ngrok2 移除)

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

4、生成自签名证书

cd ngrok

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

ngrok通过bindata将ngrok源码目录下的assets目录(资源文件)打包到可执行文件(ngrokd和ngrok)中 去,assets/client/tls和assets/server/tls下分别存放着用于ngrok和ngrokd的默认证书文件,我们需要将它们替换成我们自己生成的:(因此这一步务必放在编译可执行文件之前)

cp -r rootCA.pem assets/client/tls/ngrokroot.crt 

cp -r device.crt assets/server/tls/snakeoil.crt 

cp -r device.key assets/server/tls/snakeoil.key

使用命令工具 go-bindata,将go-bindata复制到ngrok/bin下

sudo yum install golang-go

go get -u github.com/jteeuwen/go-bindata/...

cp /usr/local/go/bin/go-bindata ./bin

5、#编译ngrokd(服务器端)

make release-server

编译成功后会在bin目录下找到ngrokd

6、启动服务端

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

iptables -A INPUT -p tcp --dport 443 -j ACCEPT

iptables -A OUTPUT -p tcp --sport 443 -j ACCEPT

sudo /usr/local/go/bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80" -httpsAddr=":443"

查看80端口是否被占用

sudo netstat -naop | grep 80

kill 进程,杀死进程

httpAddr、httpsAddr 分别是 ngrok 用来转发 http、https 服务的端口,可以随意指定。ngrokd 还会开一个 4443 端口用来跟客户端通讯(可通过 -tunnelAddr=”:xxx” 指定)。由于微信限制不能出现端口号,因此这个使用了80、443端口。

7、编译客户端

#编译Linux客户端

由于go 1.5版以后的编译安装需要1.4版本go

cd /root/ngrok

git clone https://github.com/golang/go.git

cd go

git branch

git checkout release-branch.go1.4

git branch

#给Go编译器加上交叉编译windows/amd64程序的功能

cd /root/ngrok/go/src

GOOS=windows GOARCH=amd64 ./make.bash

#在ngrok下执行如下命令编译Windows 64位客户端

cd /root/ngrok

卸载go

rm -rf go

重新执行一下

sudo tar -C /usr/local/ -zxf /usr/local/go1.7.6.linux-amd64.tar.gz

unset GOBIN

GOOS=windows GOARCH=amd64 make release-client

#以上GOARCH=amd64指的是编译为64位版本,如需32位改成GOARCH=386即可

ngrok/bin/windows_amd64下ngrok.exe拷贝到本地

8、设置本地客户端

(1)在同级目录下新建一个配置文件ngrok.cfg

server_addr: "ngrok.luckln.com:4443"

trust_host_root_certs: false

(2)同级目录下新建一个启动脚本startup.bat

@echo OFF

ngrok -config=ngrok.cfg -subdomain wx 7002

PAUSE

goto TUNNEL

其中,-config指向配置文件,-log存放日志文件位置,-subdomain为自定义的域名前缀。8080为端口号。

(3)启动,点击启动脚本startup.bat完成启动。

9、设置为系统程序,并后台运行。

服务器在运行ngrok时,如果关闭会话窗口,会导致服务中断,很显然这不是我们想要的结果,我们需要服务不断的在后台运行,当需要的时候在停止。

在/etc/systemd/system/目录下创建服务ngrok.service,内容为

[Unit]

Description=ngrok

After=network.target

[Service]

ExecStart=/usr/local/go/bin/ngrokd -domain="ngrok.luckln.com" -httpAddr=":80" -httpsAddr=":443"

[Install]

WantedBy=multi-user.target

其中要根据自己的实际目录修改相对应的目录。

启动服务。

sudo systemctl start ngrok.service

终止正在运行的服务,需要执行systemctl stop命令。

停止服务 

sudo systemctl stop ngrok.service

有时候,该命令可能没有响应,服务停不下来。这时候就不得不"杀进程"了,向正在运行的进程发出kill信号。

sudo systemctl kill ngrok.service

此外,重启服务要执行systemctl restart命令。

sudo systemctl restart ngrok.service

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Luckln~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值