CentOS 7 搭建ngrok服務器(外網映射內網)node
準備
一臺雲服務器(本文ECS),一個域名(二級域名也能夠),而且域名正確解析到雲服務器linux
安裝環境
安裝gcc和git(下載ngrok源碼)nginx
yum install gcc -y
yum install git -yc++
安裝go語言環境
去官網https://golang.org/dl/下載最新安裝包
網很慢的下載地址:https://pan.baidu.com/s/1c2i2oaG(官網1.9.2版本)
解壓縮git
tar -c /usr/local/ -zxvf go1.9.2.linux-amd64.tar.gzgithub
添加到環境變量golang
vi /etc/profile
export GOROOT=/usr/local/go
export PATH=PATH:PATH:GOROOT/bin
source /etc/profileweb
查看是否安裝成功(查看版本號)windows
go version
go version go1.9.2 linux/amd64centos
搭建Ngrok服務
下載ngrok源碼
cd /usr/local/ngrok
git clone https://github.com/tutumcloud/ngrok.git ngrok
生成證書
cd ngrok
NGROK_DOMAIN=」你的域名」
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.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 base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt
將新生成的證書,替換掉assets/client/tls下的證書
cp base.pem assets/client/tls/ngrokroot.crt
編譯生成ngrokd和ngrok
make release-server release-client
正常執行後,ngrok/bin 目錄下應該有 ngrok、ngrokd 兩個可執行文件。
啓動服務端
sudo ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="你的域名" -httpAddr=":7009" -httpsAddr=":7008"
httpAddr、httpsAddr 分別是 ngrok 用來轉發 http、https 服務的端口,能夠隨意指定。ngrokd 還會開一個 4443 端口用來跟客戶端通信(可經過 -tunnelAddr=」:xxx」 指定),若是你配置了 iptables 規則,須要放行這三個端口上的 TCP 協議。
如今,經過 https://你的域名:7009和 https://你的域名:7008就能夠訪問到 ngrok 提供的轉發服務
出現下面提示則說明成功
[22:07:18 CST 2017/12/07] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
[22:07:18 CST 2017/12/07] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:7009
[22:07:18 CST 2017/12/07] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:7008
[22:07:18 CST 2017/12/07] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:4443
[22:07:18 CST 2017/12/07] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds
5. 編譯生成ngrok(windows客戶端)
GOOS=windows GOARCH=amd64 make release-client
成功會在bin目錄下看到windows_amd64文件夾,複製到windows電腦上便可啓動
get /usr/local/ngrok/ngrok/bin/windows_amd64/ngrok.exe
6. windows端運行
建立一個文件,命名爲ngrok.cfg,寫入一下內容
server_addr: "你的域名:4443"
trust_host_root_certs: false
在建立一個啓動bat文件,命名爲start.bat
ngrok -config=ngrok.cfg -subdomain 映射本地的域名 本地的端口
如ngrok -config=ngrok.cfg -subdomain sb 8081
啓動start.bat文件
外網域名訪問
http://映射本地的域名:7009
映射到本地的地址是
127.0.0.1:本地的端口
原文:https://blog.csdn.net/yucdsn/article/details/78746745
1、操做系統描述
服務器:Centos6.10 64位
客戶端:Windows 10 64位
2、服務器環境準備
1.安裝git
yum -y install git
2.安裝go
若是wget下載比較慢,能夠經過迅雷下載完再拷貝到服務器上
wget https://golangtc.com/static/go/1.9.2/go1.9.2.linux-amd64.tar.gz
tar zxvf go1.9.2.linux-amd64.tar.gz
mv go /usr/local/
ln -s /usr/local/go/bin/* /usr/bin/
修改profile配置文件
vi /etc/profile
#go lang
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
環境變量生效:
source /etc/profile
檢查go是否安裝成功:
go version
出現如下信息,go安裝成功
go version go1.9.2 linux/amd64
3、ngrok安裝及配置
1.下載ngrok源碼
cd /usr/local
git clone https://github.com/inconshreveable/ngrok.git
2.填入域名地址
cd ngrok
export NGROK_DOMAIN="xxx.com"
3.生成祕鑰
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
4.替換祕鑰
\cp -rf rootCA.pem assets/client/tls/ngrokroot.crt
\cp -rf device.crt assets/server/tls/snakeoil.crt
\cp -rf device.key assets/server/tls/snakeoil.key
5.編譯生成服務端
GOOS=linux GOARCH=amd64 make release-server
生成的服務端在/usr/local/ngrok/bin/目錄中
6.編譯生成客戶端
GOOS=windows GOARCH=amd64 make release-client
生成的客戶端在/usr/local/ngrok/bin/windows_amd64/目錄中
將ngrok.exe拷貝到Windows上
7.啓動服務
./bin/ngrokd -domain="xxx.com" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":8083"
8083爲通道端口,能夠自定義
8.配置客戶端
Windows上ngrok.exe同級目錄建立ngrok.cfg配置文件,內容以下
server_addr: "xxx.com:8083"
trust_host_root_certs: false
tunnels:
http:
subdomain: "a"
proto:
http: "80"
https:
subdomain: "b"
proto:
https: "443"
mstsc:
remote_port: 3389
proto:
tcp: "3389"
ssh:
remote_port: 2222
proto:
tcp: "22"
建立啓動文件start.bat,內容以下:
ngrok -config=ngrok.cfg start http https mstsc ssh
運行start.bat,出現以下狀態,則內網穿透成功。
總結:
1.若是碰到bat沒法啓動,檢查ngrok.cfg文件,不能有tab。
2.start.bat啓動後 offline,檢查服務器防火牆狀態,是否放通端口
---------------------
原文:https://blog.csdn.net/teisite/article/details/84103657
一、必要條件
(1)服務器,用來搭建ngrok的服務器,必須有公網ip,而且能夠正常訪問(本次測試使用的是Ubuntu 16.04 64位)。
(2)域名,用來生成訪問域名。
二、安裝git 和Golang
apt-get install build-essential golang mercurial git
1
Golang,Go語言支持,由於Ngrok是基於Go語言編寫的
三、下載源碼,固然也能夠不安裝git,可是須要手動上傳代碼到須要的位置。
此處使用非官方地址,修復了部分包沒法獲取(摘自網絡)
git clone https://github.com/tutumcloud/ngrok.git ngrok
下載下來的目錄結構
四、生成自簽名證書
使用ngrok.com官方服務時,咱們使用的是官方的SSL證書。自建ngrokd服務,若是不想買SSL證書,咱們須要生成本身的自簽名證書,並編譯一個攜帶該證書的ngrok客戶端。
證書生成過程須要一個NGROK_BASE_DOMAIN。 以ngrok官方隨機生成的地址xxx.ngrok.com爲例,其NGROK_BASE_DOMAIN就是「ngrok.com」,若是你要提供服務的地址爲「example.ngrok.xxx.com」,那NGROK_BASE_DOMAIN就應該 是「ngrok.xxx.com」。本次測試,因爲沒有多餘的域名,我替換成本身的二級域名「weixin.yangjiace.xyz」
cd ngrok NGROK_DOMAIN="weixin.yangjiace.xyz" openssl genrsa -out base.key 2048 openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.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 base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt
執行完成後須要替換證書
cp base.pem assets/client/tls/ngrokroot.crt
五、編譯
make release-server release-client
編譯成功後會在bin目錄下找到ngrokd和ngrok這兩個文件。其中ngrokd 就是服務端程序了。
六、啓動服務端
./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="weixin.yangjiace.xyz" -httpAddr=":80" -httpsAddr=":443"
httpAddr、httpsAddr 分別是 ngrok 用來轉發 http、https 服務的端口,能夠隨意指定。ngrokd 還會開一個 4443 端口用來跟客戶端通信(可經過 -tunnelAddr=」:xxx」 指定)。因爲微信限制不能出現端口號,所以這個使用了80、443端口。
七、編譯客戶端
(1)windows
GOOS=windows GOARCH=amd64 make release-client
(2)mac
GOOS=darwin GOARCH=amd64 make release-client
執行對應的命令會在bin目錄下生成相對應的windows、mac目錄,ngrok.exe就存放在對應目錄下。將對應的ngrok.exe下載到本地。
八、設置本地客戶端
(1)在同級目錄下新建一個配置文件ngrok.cfg
server_addr: "weixin.yangjiace.xyz:4443"
trust_host_root_certs: false
(2)同級目錄下新建一個啓動腳本startup.bat
@echo on
cd %cd%
#ngrok -proto=tcp 22
#ngrok start web
ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=yjc 8080
其中,-config指向配置文件,-log存放日誌文件位置,-subdomain爲自定義的域名前綴。8080爲端口號。
(3)啓動,點擊啓動腳本startup.bat完成啓動。
九、設置爲系統程序,並後臺運行。
服務器在運行ngrok時,若是關閉會話窗口,會致使服務中斷,很顯然這不是咱們想要的結果,咱們須要服務不斷的在後臺運行,當須要的時候在中止。
在/etc/systemd/system/目錄下建立服務ngrok.service,內容爲
[Unit] Description=ngrok After=network.target [Service] ExecStart=/myweb/ngrok/bin/ngrokd -tlsKey=/myweb/ngrok/server.key -tlsCrt=/myweb/ngrok/server.crt -domain="weixin.yangjiace.xyz" -httpAddr=":80" -httpsAddr=":443" [Install] WantedBy=multi-user.target
其中要根據本身的實際目錄修改相對應的目錄。
這樣咱們就能夠了經過systemctl start ngrok.service啓動服務。而後就能夠愉快的玩耍了。
安裝git
若是出現 yum 的程序找不到,或者很慢
請移步這個教程yum 找不到程序, yum更換國內阿里源
# 安裝git所須要的依賴包 yum -y install zlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMaker hg wget gcc gcc-c++ # 下載新版本git (版本列表 https://www.kernel.org/pub/software/scm/git/) cd /usr/local wget https://www.kernel.org/pub/software/scm/git/git-2.16.2.tar.gz # 解壓 tar zxvf git-2.16.2.tar.gz # 編譯git cd git-2.16.2 ./configure --prefix=/usr/local/git make make install #刪除剛纔下載的git包 cd /usr/local rm git-2.16.2.tar.gz -y
安裝go
# 下載go cd /usr/local www.golangtc.com/static/go (這裏是列表,注意本身的系統是多少位的,linux-amd64是64位的。linux-386是32位的) wget https://www.golangtc.com/static/go/1.9.2/go1.9.2.linux-amd64.tar.gz 若是很慢,能夠下載到本地,在上傳到服務器 # 解壓 tar -zxvf go1.9.2.linux-amd64.tar.gz /usr/local/ # go的命令須要作軟鏈接到/usr/bin ln -s /usr/local/go/bin/* /usr/bin/ #刪除下載的go包 rm go1.9.2.linux-amd64.tar.gz -y
go環境設置
#安裝go語言的安裝環境 yum install mercurial bzr subversion -y #新建go目錄做爲項目目錄 mkdir -p $HOME/go #用cat的方法在尾部增長配置配置golang的 GOROOT GOPATH #(注意,這裏GOROOT 後面的路徑是你go解壓的路徑,若是不是按照個人方法解壓的,請注意看一下) 下面這段,整段複製粘貼過去 cat >>$HOME/.bash_profile<<EOF export GOROOT=/usr/local/go export GOPATH=\$HOME/go export PATH=\$PATH:\$GOROOT/bin EOF #讓配置生效 source $HOME/.bash_profile 3.檢查下go的env環境變量 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"
下載ngrok
cd /usr/local/ git clone https://github.com/inconshreveable/ngrok.git
環境變量
export GOPATH=/usr/local/ngrok/ export NGROK_DOMAIN="xxx.com" #這裏寫你本身的域名,不要前綴,好比www
估計這裏你會有疑問,看到別人家都是 ngrok.xxx.com 相似這種形式的
這裏就是用到了三級域名解析,若是你想要以 xxx.ngrok.xxx.com 這種最終域名形式訪問你的服務,(這裏第一次搭建不推薦,你能夠二級成功之後再用三級的,可是得從環境變量這步往下從新操做一邊。)請看下面教程:
生成證書
cd /usr/local/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 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 5000
拷貝證書覆蓋ngrok原來的證書
過程會讓你輸入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
生成服務端
cd /usr/local/ngrok/ GOOS=linux GOARCH=amd64 make release-server #這裏GOOS後面是你的系統,我是linux,GOARCH 後面是系統,64位是amd64,32位是386 而後就是等待下載了,沒有進度條,耐心等待。 這裏可能報各類錯,我當時就很崩潰。 生成的服務端在/usr/local/ngrok/bin 下的 ngrokd文件
錯誤:沒法交叉編譯 cannot install cross-compiled binaries
$ make release-server GOOS=linux GOARCH=386 bin/go-bindata -nomemcopy -pkg=assets -tags=release \ -debug=false \ -o=src/ngrok/client/assets/assets_release.go \ assets/client/... bin/go-bindata -nomemcopy -pkg=assets -tags=release \ -debug=false \ -o=src/ngrok/server/assets/assets_release.go \ assets/server/... go get -tags 'release' -d -v ngrok/... go install -tags 'release' ngrok/main/ngrokd go install: cannot install cross-compiled binaries when GOBIN is set make: *** [server] Error 1
解決方法
cd /usr/local/ngrok mkdir bin cp $GOBIN/go-bindata bin/ unset GOBIN
生成客戶端
cd /usr/local/ngrok/ GOOS=windows GOARCH=amd64 make release-client #這裏GOOS後面是你的系統,我是要在window上啓動客戶端,GOARCH 後面是系統,64位是amd64,32位是386 而後就是等待下載了,沒有進度條,耐心等待。 生成的在/usr/local/ngrok/bin/windows_amd64 的ngrok.exe 都在bin下,服務端是ngrokd 客戶端是ngrok
啓動服務器端
這裏爲了方便我直接就用80端口了,請確認你的80端口沒有被佔用,關閉相應的服務。 後面要想用,建議使用nginx反向代理到ngrok。 cd /usr/local/ngrok/bin ngrokd -domain="xxx.com" -httpAddr=":80" -httpsAddr=":8081" -tunnelAddr=":4443" #-domain後面你上面寫的域名 -httpAddr http端口 -httpsAddr https 端口 #-tunnerlAddr 客戶端端口,鏈接端口
啓動客戶端(window)
現將ngrok.exe 下載到本身的電腦上,
而後同目錄下建立文件ngrok.conf;內容以下:
server_addr: "xxxx.com:4443" #你上面本身寫的域名 trust_host_root_certs: false #目錄下打開命令行 ngrok -config=./ngrok.conf -subdomain=blog 80 #這裏subdomain後面的是二級域名前綴,你能夠改, #注意要在域名解析裏添加二級域名解析
添加二級域名解析
以下就是OK了 顯示online就能夠!
最後經過blog.xxx.com 訪問你本地的服務器吧