參考文章:
http://blog.csdn.net/sdfgsdfg1444/article/details/72793313
http://www.jianshu.com/p/b254547b9fe5
http://blog.csdn.net/u013216667/article/details/50782084
步驟:
1.安裝依賴環境
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++ unzip
2.安裝git
先下載:https://www.kernel.org/pub/software/scm/git/git-2.6.0.tar.gz
cd /usr/
wget https://www.kernel.org/pub/software/scm/git/git-2.6.0.tar.gz
tar zxvf git-2.6.0.tar.gz
配置git環境
cd /usr/git-2.6.0
make prefix=/usr/local/git all
make prefix=/usr/local/git install
echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
source /etc/bashrc
git version
3.go下載:https://pan.baidu.com/s/1hs1VzjY ; 放到/usr/local
解壓 tar zxvf go1.4.2.linux-amd64.tar.gz
環境go配置 添加環境變量,
編輯
vim /etc/profile
在最後添加
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
保存後,使環境變量生效
source /etc/profile
或者創建軟連接:
ln -s /usr/local/go/bin/* /usr/bin/
檢查版本
go version
4.ngrok下載:https://pan.baidu.com/s/1i5ckSdR ; zip解壓放到/usr/local/ngrok下
配置ngrok
cd /usr/local/ngrok
export GOPATH=/usr/local/ngrok/
export NGROK_DOMAIN="xxx.xin"
cd /usr/local/ngrok
5.簽名:
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
6.複製簽名:
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key
7.編譯服務端
cd /usr/local/go/src
GOOS=linux GOARCH=amd64 ./make.bash
cd /usr/local/ngrok/
GOOS=linux GOARCH=amd64 make release-server
8.編譯客戶端
cd /usr/local/go/src
GOOS=windows GOARCH=amd64 ./make.bash
cd /usr/local/ngrok/
GOOS=windows GOARCH=amd64 make release-client
9.啓動服務端
cd 進入根目錄直接輸入
/usr/local/ngrok/bin/ngrokd -domain="xxx.xin" -httpAddr=":80" -tunnelAddr=":4443"
//服務端後臺永久運行
nohup /usr/local/ngrok/bin/ngrokd -domain="xxx.xin" -httpAddr=":80" -tunnelAddr=":4443"
10.客戶端配置新建一個 ngrok.cfg 文件
server_addr: "xxx.xin:4443"
trust_host_root_certs: false
11.客戶端啓動新建一個xxx.bat文件
ngrok -config=ngrok.cfg -subdomain xxx 8080
注意:
1.如果客戶端啓動顯示reconnection,請檢查防火牆端口是否開放80和4443端口
vi /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 4443 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
編輯防火牆配置文件 按 i 編輯、按esc退出編輯、輸入 :wq
//重啓防火牆
service iptables restart
2.如果可以連接,但是不能訪問,請檢查域名是否開啓CNAME記錄
路由上虛擬機服務器是否設置端口80/4443/443
192.168.5.110(ngrok所在Linux的ip)、4443是http訪問的端口、443是https訪問的端口
常用服務器 外部端口 內部端口 IP地址 協議類型
443 443 192.168.5.110 ALL
80 80 192.168.5.110 ALL
4443 4443 192.168.5.110 ALL
--window服務端啓動
ngrokd -domain="xxx.xin" -tunnelAddr=":4443" -httpAddr=":80"
ngrokd -tlsKey="server.key" -tlsCrt="server.crt" -domain="xxx.xin" -tunnelAddr=":4443" -httpsAddr=":443" -httpAddr=":80"
編譯32位用go32位,可能會出現以下錯誤
bash: /usr/local/bin/rar: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
是因爲64位系統中安裝了32位程序
解決方法:
yum install glibc.i686
重新安裝以後還有如下類系錯誤 再繼續安裝包
error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
yum install libstdc++.so.6
window服務端啓動,新建bat命令文件,添加以下內容:
ngrokd -tlsKey="server.key" -tlsCrt="server.crt" -domain="xxx.xin" -tunnelAddr=":4443" -httpsAddr=":443" -httpAddr=":80"
說明:
-tlsKey="server.key" -tlsCrt="server.crt"
是對應自己申請的SSL證書,Apache,找到server.key server.crt 這兩個證書文件
注意:如何你只是申請了頂級域名的證書、二級域名使用頂級域名的證書是無效的。除非你申請的是泛型*.頂級域名的證書 例如:*.xxx.xin證書
客戶端啓動:要用證書時設置下面爲:trust_host_root_certs: true,沒用證書trust_host_root_certs: false
客戶端配置新建一個 ngrok.cfg 文件
server_addr: "xxx.xin:4443"
trust_host_root_certs: false
11.客戶端啓動新建一個xxx.bat文件(頂級域名:-hostname、二級域名:-subdomain)
-- 頂級域名
ngrok -config=ngrok.cfg -hostname xxx.xin192.168.0.106:8080
-- 二級域名
ngrok -config=ngrok.cfg -subdomain weixin.xxx.xin192.168.0.106:8080