Evilmass

在 CentOS 下配置 ngrok

1

Requirement

域名设置主机记录

主机记录
如果没有*记录的话会被重定向至主机,无法打开隧道页面

Git

yum install git


Go

如果之前安装过旧版本的 Go 请先卸载

yum remove golang

下载 go 源码包

wget https://storage.googleapis.com/golang/go1.7.linux-amd64.tar.gz

解压到/usr/local/

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

添加环境变量

vim /etc/profile

在最后面添加以下两句保存并退出:

export GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH

使之前的配置生效

source /etc/profile


Server

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

在使用官方服务的时候,我们使用的是官方的 SSL 证书,所以如果直接编译的话,默认的连接地址会到官方的 ngrok.com 去,所以我们需要自己生成证书

NGROK_DOMAIN 这里修改为自己的域名

cd /root/ngrok
NGROK_DOMAIN="evilmass.cc"

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

openssl 就是生成 SSL 证书文件的过程,之后会在 ngrok 目录下生成 root,device 等六个文件 然后需要拷贝到配置的目录中,在编译的时候会使用这些文件

\cp rootCA.pem assets/client/tls/ngrokroot.crt -f
\cp device.crt assets/server/tls/snakeoil.crt  -f
\cp device.key assets/server/tls/snakeoil.key -f

\cp 命令可强制覆盖

编译 ngrokd

cd /root/ngrok
make release-server

# Windows服务端
GOOS=windows GOARCH=386 make release-server
GOOS=windows GOARCH=amd64 make release-server
# Linux服务端
GOOS=linux GOARCH=386 make release-server
GOOS=linux GOARCH=amd64 make release-server
# MacOS服务端
GOOS=darwin GOARCH=386 make release-server
GOOS=darwin GOARCH=amd64 make release-server
 #ARM服务端
GOOS=linux GOARCH=arm make release-server

服务端命令

--help 查看帮助
-domain 域名,已去掉证书验证可以使用ip,仅作tcp转发可以使用ip
-httpAddr HTTP连接,空字符串禁用 (default ":80")
-httpsAddr HTTPS连接,空字符串禁用 (default ":443")
-log 写消息记录到该文件  “标准输出”和“无”具有特殊意义 (default "stdout")
-log-level 消息的级别记录 其中之一:DEBUG,INFO,WARNING,ERROR (default "DEBUG")
-tlsCrt TLS证书文件路径
-tlsKey TLS key证书文件路径
-tunnelAddr 公共广播监听ngrok客户端 (default ":4443")

如果安装的时候卡在了gopkg.in/inconshreveable/go-update.v0 (download)或者卡在gopkg.in/yaml.v1 (download),则代表需要安装新的git
注意git版本应大于1.7.9.5
源码编译安装请参考:安装Git

CentOS 下 Git 安装的一个坑:

Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 3.

BEGIN failed--compilation aborted at Makefile.PL line 3.

make[1]: *** [perl.mak] Error 2

make: *** [perl/perl.mak] Error 2

解决:

yum install perl-ExtUtils-MakeMaker

构建完成以后可以在bin目录下看到 ngrokd,这个文件,这个就是我们后面要开启的服务器端(Server)


Client

go 开发环境为我们提供了强大的跨平台交叉编译功能,在 Linux 下即可完成 Windows Client 的编译

cd /root/ngrok

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

GOOS=windows GOARCH=amd64 make release-client

GOOS:Target Host OS
GOARCH:Target Host ARCH

# Windows客户端
GOOS=windows GOARCH=386 make release-client
GOOS=windows GOARCH=amd64 make release-client
# Linux客户端
GOOS=linux GOARCH=386 make release-client
GOOS=linux GOARCH=amd64 make release-client
# MacOS客户端
GOOS=darwin GOARCH=386 make release-client
GOOS=darwin GOARCH=amd64 make release-client
# ARM客户端
GOOS=linux GOARCH=arm make release-client

客户端命令

--help 查看帮助
-config 配置文件路面
-hostname 自定义域名
-log 日志的路径,非必须
-log-level 日志级别:DEBUG,INFO,WARNING,ERROR (default "DEBUG")
-proto 隧道协议 http、https、tcp、默认为http和https
-server_addr 服务器地址
-subdomain 子域名,当服务器配有域名启动的时候带上固定服务器分配的前缀域名,对应域名在服务端启动的-domain

通过前面的步骤,就会在 bin 目录里面生成所有的客户端文件,客户端平台是文件夹的名字(windows_amd64),客户端放在对应的目录下
没有错误的话,Windows 客户端 ngrok 就编译成功了,我们可以在./bin/windows_amd64/目录下找到执行文件 ngrok.exe 将其下载到 Windows 上

运行测试

服务器端

cd /root/ngrok
NGROK_DOMAIN="evilmass.cc"
#http
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":6060" -httpsAddr=":6061" -tunnelAddr=":6062"

#https设置了tls
#bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":6060" -httpsAddr=":6061" -tunnelAddr=":6062" -tlsKey=./device.key -tlsCrt=./device.crt

httpAddr:访问普通的http使用的端口号,用后面用子域名.evilmass.cc:6060 来访问服务
httpsAddr:访问的https使用的端口号,同上,只不过是需要https的服务访问才用这个端口
tunnelAddr:通道的端口号,这个端口是Ngrok用来通信的,所以这个端口在服务器上和客户端上设置必须要对应才可以正常的连接,默认不填写是4433

验证端口是否打开
nc -v -w 10 -z 127.0.0.1 6060-6062

如果显示的3个端口都有响应(都显示了succeeded就是正常)

打开防火墙

如果是centOS的系统,防火墙应该是 firewall-cmd 来控制 对应的命令就是,其中端口号要写自己的:

firewall-cmd --permanent --zone=public --add-port=6060-6062/tcp  //永久
#firewall-cmd  --zone=public --add-port=6060-6062/tcp   //临时

如果是ubuntu之类的系统,防火墙一般是iptables来控制,对应的命令就是,也要修改自己的端口号才可以:

iptables -A INPUT -p tcp --dport 6060-6062 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 6060-6062 -j ACCEPT

客户端

建立一个文件 ngrok.cfg,与刚才编译好的windows客户端放在一起 写入如下内容:

server_addr: "evilmass.cc:6062"  #6062是服务器端的通信端口
trust_host_root_certs: "true"
#http_proxy: "http://user:[email protected]:port"  #代理设置
tunnels:
    router:
        auth: "username:password"  #打开此页面需要先验证
        proto:
        http: 192.168.1.1:80  #or https
    ssh:
        proto:
            tcp: 22
    mhp:
        proto:
            tcp: 182.168.1.149:3000

在客户端目录下运行

ngrok.exe -log="ngrok_log.txt" -config="ngrok.cfg" start router mhp

日志: -log=ngrok_log.txt是记录ngrok的日志,如果不能访问就可以查看到底是什么问题

启动服务: start router mhp

如果显示了tunnel status: online就是服务器和客户端是正常连接的
多隧道设置


如果设定了auth,则开启页面需要填写usernamepassword
两步认证


通过浏览器访问http://router.evilmass.cc:6060就可以连接到现在的内网主机192.168.1.1:80上的服务
测试隧道


配置 raspberry pi 客户端

先在需要的地方建立一个目录,然后建立一个和 Windows 下一样的 ngrok.cfg 的文件,内容也相同

将 arm 版本的 ngrok 上传到树莓派上对应的目录

进入这个目录以后,通过 chmod +x ngrok 将ngrok设置成可执行文件

执行命令

./ngrok -config="ngrok.cfg" start raspberry

这样就可以通过 raspberry.evilmass.cc:6062 访问树莓派上的80端口对应的服务 (树莓派可以直接安装一个nginx, apt-get install nginx 然后默认80端口就可以显示nginx默认的页面)

建个MHP Tunnel Server玩一下

今天找到了 mhptunnel_unixsv4.zip,Unix 下的 MHP Tunnel,make 之后执行 ./sv 30000 & 就可以启动服务器端 But! 连上去之后不停的重新登录-掉线-登录-掉线 估计是版本太旧了
如果你们仔细找找的话,在 MHP Tunnel 目录下面是有个服务端启动工具的,长这样:
1

打开这个程序并在 PSP Tunnel 创建服务器,端口默认 30000,Ngrok 转发 TCP

30000

Done!
懒才是推动科技发展的动力啊



这个打赏二维码好像有什么不对

支付宝
alipay

微信
wechat