centos 搭建ngrok server实现内网穿透


前言:

首先说一下,什么是内网穿透?我举个栗子,比如你在本地搭建的网站,想让局域网外的人访问,该怎么实现?之前还好虽然说拨号上网,但是有外网IP,现在我用的某某网只有内网IP,所以要想让外网访问内网的测试服务器,需要做内网穿透。这里有个很多人都熟知的工具:花生壳。在后来偶尔知道了可以用linux搭建ngrok这个开源的双向代理,来实现内网穿透这个功能

1、准备

一台外网服务器,一个域名,并且域名泛解析解析到外网服务器,此处我用的服务器的操作系统为CentOS7

2、安装环境

安装gcc和git(用于下载ngrok源码)

yum install gcc -y
yum install git -y

3、安装go语言环境

yum install -y mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386

4、检查环境安装

git --version //( >= 1.7 )
go version

5、在服务器上搭建Ngrok服务

5.1.下载ngrok源码

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

5.2.生成证书

cd ngrok 切换到ngrok目录

aaa.com修改为自己的域名

export NGROK_DOMAIN="aaa.com"

生成证书

openssl genrsa -out rootCA.key 2048
openssl req -new -x509 -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 10000 -out rootCA.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 10000

5.3.将新生成的证书替换,执行下面命令后 “y” 回车 一行一行执行代码!

cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key

6、编译生成ngrokd(服务端)

# 64位linux服务端: 
GOOS=linux GOARCH=amd64 make release-server

7、开启远程服务

cd ngrok
#前台运行 
./bin/ngrokd -domain="aaa.com"  -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":6666" & 
#后台运行
nohup ./bin/ngrokd -domain="aaa.com"  -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":6666" &
# 指定TLS证书和密钥 
./bin/ngrokd -tlsKey="server.key" -tlsCrt="server.crt" -domain="aaa.com" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":6666"

端口好根据自己实际情况更改,并且防火墙开放这几个端口

8、编译生成ngrok(客户端) 根据自己的实际情况生成客户端

# 32位linux客户端: 
GOOS=linux GOARCH=386 make release-client
 
# 64位linux客户端: 
GOOS=linux GOARCH=amd64 make release-client
#32位windows客户端: 
GOOS=windows GOARCH=386 make release-client
#64位windows客户端: 
GOOS=windows GOARCH=amd64 make release-client
#32位mac平台客户端:
GOOS=darwin GOARCH=386 make release-client
#64位mac平台客户端:
GOOS=darwin GOARCH=amd64 make release-client
#ARM平台linux客户端: 
GOOS=linux GOARCH=arm make release-client
# 生成客户端文件位置
./ngrok/bin

我只用到linux服务器端和win客户端,我只需要执行如下即可。
根据自己需要生成

# 64位linux服务端: 
GOOS=linux GOARCH=amd64 make release-server
# 64位linux客户端: 
GOOS=linux GOARCH=amd64 make release-client

9、用SSH Secure Shell Client工具

./ngrok/bin/windows_amd64/里的文件下载到本地Windows下,如D:\ngrok

10、在D:\ngrok中新建文件,改名为 ngrok.cfg

文件中输入:

server_addr: "aaa.com:6666"
trust_host_root_certs: false
tunnels:
  http:
    subdomain: "www"
    proto:
      http: "80"
      
  https:
    subdomain: "www"
    proto:
      https: "443"
 
  ssh:
    remote_port: 2222
    proto:
      tcp: "22"
 
  mstsc:
        remote_port: 3333      
        proto:
         tcp: "3389"

注意:一定要根据自己的实际情况在服务器后台安全组规则中开启或删除。

11、开启客户机服务

WindowsD:\ngrok新建文件 改名 start.bat

输入:

ngrok -config=ngrok.cfg start http https ssh mstsc

直接双击运行start.bat


ngrok 加入系统服务 开机启动

i /usr/lib/systemd/system/ngrok.service  # 在CentOS 7上利用systemctl添加自定义系统服务
[Unit]
Description=ngrok
After=network.target
 
[Service]
Type=simple  
Restart=always
RestartSec=1min
ExecStart=/usr/local/ngrok/bin/ngrokd   -domain=aaa.cn -httpAddr=:80 -httpsAddr=:443 -tunnelAddr=:6666 %i
ExecStop=/usr/bin/killall ngrok
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

常用命令

#设置开机启动:
systemctl enable ngrok.service
#启动服务:
systemctl start ngrok.service
#停止服务:
systemctl stop ngrok.service

附带一份 nginx.conf 配置文件

# ngrok
upstream ngrok {
server 127.0.0.1:800;
keepalive 64;
}
# ngrok 穿透
server {
listen       80;
server_name  *.aaa.com;
 
location / {
proxy_pass http://ngrok;
proxy_redirect off;
proxy_set_header Host $http_host:800;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
expires 5s;
 }
}


注:本文转载自谷泊网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除。
上一篇 下一篇

分享

最新加入

最新评论