ngrokサービスを構築し、イントラネットの貫通を実現


ngrokサービスを構築し、イントラネットの貫通を実現
文書ディレクトリ
  • コンパイルngrok
  • サービス
  • クライアント
  • 管理インタフェース
  • 私たちはよく「本機開発中のwebプロジェクトを友人に見せる」という一時的なニーズがありますが、そのためにVPSに一度導入するのはもったいないです.以前はADSLルータにポートマッピングをして、ローカルサービスが外部ネットワークにアクセスできるようにしていましたが、今ではほとんどのキャリアが簡単にはできません.一般的に小さなキャリアにもパブリックネットワークIPがなく、自分のルータの輸出はローカルエリアネットワーク内であり、ポートマッピングは役に立たない.
    以前から、パブリックネットワークIPを持つホスト中継を利用してこのようなニーズを実現できるかどうかを考えていましたが、ngrokというソフトウェアがあることに気づきました.またngrok公式サイト自体は公共サービスも提供しており、アカウントを登録し、クライアントを実行するだけで、イントラネットを迅速にマッピングすることができます.でもこんないいサービスで、間もなく壁に~
    幸いにもngrokはオープンソースで、私はVPSにサービスをかけて自分で使って、一労永逸にイントラネットの貫通という難題を解決して、ここで過程を記録します.(注意:ngrok.comが提供するサービスはngrok 2.0に基づいており、githubには現在1.0のソースコードしかありません.両者の機能とコマンドにはいくつかの違いがあります.使うときは混同しないでください)
    コンパイルngrok
    私のVPSシステムはUbuntu 14.04.2 LTSで、まず必要なツールを入れます:
    sudo apt-get install build-essential golang mercurial git

    ngrokソースの取得:
    BASHgit clone https://github.com/inconshreveable/ngrok.git ngrok###         ,           git clone https://github.com/tutumcloud/ngrok.git ngrokcd ngrok

    ソースコードのデフォルトの証明書を生成して置き換え、ドメイン名が自分のものに変更されることに注意してください.(その後コンパイルされたサービス側クライアントは、この証明書に基づいて通信を暗号化し、セキュリティを保証します)
    BASHNGROK_DOMAIN="imququ.com"openssl genrsa -out base.key 2048openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.pem
    openssl genrsa -out server.key 2048openssl 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

    コンパイル開始:
    sudo make release-server release-client

    正常であれば、ngrok/binディレクトリの下にngrok、ngrokdの2つの実行可能ファイルがあるはずです.
    サービス側
    前に生成されたngrokdはサービス側プログラムであり、証明書、ドメイン名、ポートを指定して起動します(証明書は前に生成され、ドメイン名の変更に注意してください):
    sudo ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="imququ.com" -httpAddr=":8081" -httpsAddr=":8082"

    ここまで来ると、ngrokサービスはすでに走り出しており、画面に表示されているログでより多くの情報を表示することができます.httpAddr、httpsAddrはそれぞれngrokがhttp、httpsサービスを転送するためのポートで、任意に指定できます.ngrokdはまた、4443ポートを開いてクライアントと通信します(-tunnelAddr=「:xxx」で指定できます).iptablesルールを構成している場合は、この3つのポートのTCPプロトコルを実行する必要があります.
    今、通過https://imququ.com:8081およびhttps://imququ.com:8082ngrokが提供する転送サービスにアクセスできます.使いやすいように、ドメイン名をVPSに解析することをお勧めします.これにより、異なるサブドメインを使用して異なるローカルサービスを転送することが容易になります.私はimququにあげます.comは汎解析を行い、任意にサブドメインにアクセスします.http://pub.imququ.com:8081を選択すると、次のプロンプトが表示されます.
    Tunnel pub.imququ.com:8081 not found

    これは万事そろっていて、クライアントだけが接続されていることを示しています.
    クライアント
    linux上のサービスをマッピングする場合は、クライアントが前に生成したngrokファイルです.しかし、私はMacを使っています.環境変数を指定してもう一度編集する必要があります.
    sudo GOOS=darwin GOARCH=amd64 make release-server release-client

    これでngrok/binディレクトリの下にdarwinが1つ増えます.amd 64ディレクトリ、ここのngrokファイルはMacシステムにコピーできます.
    簡単なプロファイルを書いて、ngrokのように勝手に名前をつけます.cfg:
    server_addr: imququ.com:4443trust_host_root_certs: false

    サブドメイン、転送するプロトコルおよびポート、およびクライアントを実行するプロファイルを指定します.
    ./ngrok -subdomain pub -proto=http -config=ngrok.cfg 80

    このようなインタフェースは、リモート・サービスへの接続に成功したことを示しています.
    今からまたhttp://pub.imququ.com:8081あ、アクセスしたのはすでに自機80ポートのサービスです.
    管理インタフェース
    上のngrokクライアント実行インタフェースのスクリーンショットには、ngrokが提供する監視インタフェースであるWeb Interfaceアドレスがあります.このインタフェースでは,完全なrequest/response情報を含む遠隔転送されたhttpの詳細を見ることができ,非常に便利である.
    実際、ngrokはTCPを転送できるので、遊び方もたくさんありますが、原理は同じで、ここではあまり書きません.
    このリンクは次のとおりです.https://imququ.com/post/self-hosted-ngrokd.html、コメントに参加します.
    --EOF--