centosの下にngrokサーバを自分で架設する(イントラネットテスト神器)


シーンの使用


開発を行うにはgitサーバや何かを同期して外部接続のテストを行う必要があることが多いため、更新するたびにpushを遠位端にしなければならない.また、コードが正式に書き終わるとは限らないこともある.gitの提出に影響を与えるだけでなく、面倒なのでngrokのイントラネットが貫通すると神威が現れる.ネット上ではngrokの国内サービスがありますが、時々不安定なので私と一緒に自分のngrokサービスを架けましょう.

必要な品目


クラウドサーバまたはvps


例えば:アリクラウドなどのクラウドサーバーが一番いいですが、アリクラウドは登録ドメイン名を覚えていますよ.

ドメイン名


クラウドサーバまたはvpsに解析されたip(myngrok.comなど)は、以下のテストでサブドメイン名の自動配置が開始されたため、ドメイン名を汎用解析する必要があります.CNAMEは「*」を記入してクラウドサーバのipに解析します.

環境準備


centosのインフラストラクチャ

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

go言語環境

// go    centos 6.8 64   
wget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.8.3.linux-amd64.tar.gz
vim /etc/profile
// :
export PATH=$PATH:/usr/local/go/bin
source /etc/profile
// go
go version

サーバのインストール


ngrokソースパッケージのダウンロード

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

証明書の生成

cd /ngrok
mkdir cert
cd cert
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=myngork.com" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=myngork.com" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

元の証明書を上書き

yes|cp rootCA.pem /ngrok/ngrok/assets/client/tls/ngrokroot.crt
yes|cp device.crt /ngrok/ngrok/assets/server/tls/snakeoil.crt
yes|cp device.key /ngrok/ngrok/assets/server/tls/snakeoil.key

コンパイル生成ngrok

go env // 
GOOS=linux GOARCH=amd64 make release-server

テストの実行

./bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="myngrok.com"  -httpAddr=":8081" -httpsAddr=":8082" -tunnelAddr=":8083"

# :
#-domain  ngrok 
#-httpAddr http   80
#-httpsAddr https   443 ( https )
#-tunnelAddr    4443

バックグラウンド運転

cd /ngrok/ngrok
setsid ./bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="myngrok"  -httpAddr=":8081" -httpsAddr=":8082" -tunnelAddr=":8083"

クライアントのコンパイルと使用


コンパイル生成win 64ビットクライアント(その他の自己コンパイルテスト)

GOOS=windows GOARCH=amd64 make release-client
# ngrok/bin/ windows_amd64 ngrok.exe

#Linux   32  :GOOS=linux GOARCH=386
#Linux   64  :GOOS=linux GOARCH=amd64
#Windows   32  :GOOS=windows GOARCH=386
#Windows   64  :GOOS=windows GOARCH=amd64
#MAC   32  :GOOS=darwin GOARCH=386
#MAC   64  :GOOS=darwin GOARCH=amd64
#ARM  :GOOS=linux GOARCH=arm

簡単な構成ngrok.cfg

server_addr: "myngrok.com:8083"
trust_host_root_certs: false

リンクテストの使用

ngrok -config=ngrok.cfg -subdomain=test 80

// :
ngrok

Tunnel Status                 online
Version                       1.7/1.7
Forwarding                    http://test.myngrok.com:8081 -> 127.0.0.1:80
Forwarding                    https://test.myngrok.com:8081 -> 127.0.0.1:80
Web Interface                 127.0.0.1:4040
# Conn                        0
Avg Conn Time                 0.00ms

複雑な構成ngrok.cfg

server_addr: "myngrok.com:8083"
trust_host_root_certs: false

tunnels:
  http:
    subdomain: "www"
    proto:
      http: "8081"
      
  https:
    subdomain: "www"
    proto:
      https: "8082"
      
  web:
    proto:
      http: "8050"
  tcp:
    proto:
      tcp: "8001"
    remote_port: 5555
 
  ssh:
    remote_port: 2222
    proto:
      tcp: "22"

サービスの開始

ngrok -config=ngrok.cfg start web  # web 
ngrok -config=ngrok.cfg start tcp  # tcp 

ngrok -config=ngrok.cfg start web tcp  # 
ngrok -config=ngrok.cfg start-all  # 

// :
ngrok

Tunnel Status                 online
Version                       1.7/1.7
Forwarding                    http://web.myngrok.com:8081 -> 127.0.0.1:8050
Forwarding                    tcp://myngrok.com:5555 -> 127.0.0.1:8001
Web Interface                 127.0.0.1:4040
# Conn                        0
Avg Conn Time                 0.00ms

batを添付し、異なる自動起動サブドメイン名を配置できます。

@echo OFF
color 0a
Title ngrok 
Mode con cols=109 lines=30
:START
ECHO.
Echo                  ==========================================================================
ECHO.
Echo                                         ngrok 
ECHO.
Echo                                          : https://segmentfault.com/u/object
ECHO.
Echo                  ==========================================================================
Echo.
echo.
echo.
:TUNNEL
Echo                , “test” , :“test.myngrok.com”
ECHO.
ECHO.
ECHO.
set /p clientid=    :
echo.
ngrok -config=ngrok.cfg -subdomain=%clientid% 80
PAUSE
goto TUNNEL

まとめ


何もまとめることはありませんが、ngrokクライアントコマンドラインをもっと検討してください.

ふろく


コンパイル中に次のことが起こります.
質問1:
    GOOS=""GOARCH=""go get github.com/jteeuwen/go-bindata/go-bindata
      bin/go-bindata -nomemcopy -pkg=assets -tags=release\
               -debug=false \

               -o=src/ngrok/client/assets/assets_release.go \

               assets/client/...

    make: bin/go-bindata: Command not found
   make: * [client-assets] Error 127
解決方法:goインストールディレクトリのbinディレクトリの下にgo-bindataを見つけ、ngrok/binの下に移動します(binがなければ、新しいものを作成できます)
      2:

     package code.google.com/p/log4go: Get https://code.google.com/p/log4go/source/checkout?repo=: dial tcp 216.58.197.110:443: i/o timeout

      google , FQ code.google.com.

      :  ngrok/src/ngrok/log   logger.go  , 4 5 :

        log "code.google.com/p/log4go” 

        log "github.com/keepeye/log4go"  
     3:

      GOOS="" GOARCH="" go get github.com/jteeuwen/go-bindata/go-bindata
     # github.com/jteeuwen/go-bindata
        src/github.com/jteeuwen/go-bindata/toc.go:47: function ends without a return statement
        make: *** [bin/go-bindata] Error 2
      : https://github.com/inconshreveable/ngrok/issues/237