Ngrok內網穿透

來源:互聯網
上載者:User

為什麼要用

至於為什麼要用內網穿透技術,網上一大堆,也有很多收費的網站進行內網穿透,比如花生殼等等。

這裡我們選擇的是一個開源項目ngrok來自己搭建開源內網穿透環境,以下伺服器和用戶端都是在ubuntu下編譯使用.

編譯

  1. 安裝編譯環境

由於Ngrok採用Go語言編寫,因此需要下載 Go,可以直接下載編譯的的包來使用。

  1. 擷取源碼

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

  1. 產生key
NGROK_DOMAIN="xxx.com"openssl genrsa -out base.key 2048openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.pemopenssl genrsa -out server.key 2048openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csropenssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crtcp base.pem assets/client/tls/ngrokroot.crt

最好在伺服器上產生以上Key,當時不清楚在用戶端產生了這些Key在服務端一直提示公私密金鑰對不上。

  1. 編譯
sudo make release-server release-client

直接使用apt-get install golang安裝的go環境好像是版本太舊了,是1.6的,當前最新的版本是1.11 所以需要第1步安裝go環境。

如果一切正常,ngrok/bin 目錄下應該有 ngrok、ngrokd 兩個可執行檔。ngrokd是服務端軟體,ngrok是用戶端軟體

服務端

運行服務端程式

sudo ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="xxx.com" -httpAddr=":9081" -httpsAddr=":9082"

到這一步,ngrok 服務已經跑起來了,可以通過螢幕上顯示的日誌查看更多資訊。httpAddr、httpsAddr 分別是 ngrok 用來轉寄 http、https 服務的連接埠,可以隨意指定。ngrokd 還會開一個 4443 連接埠用來跟用戶端通訊(可通過 -tunnelAddr=":xxx" 指定),如果你配置了iptables 規則或者其他安全規則,需要允許存取這三個連接埠上的 TCP 協議。
在這裡我使用的是<b>supervisor</b>來管理進程的,很簡單。在這裡就不介紹了

與Nginx結合

由於我的伺服器的80連接埠被其他服務佔用了,無法使用80連接埠來使用ngrok,本來想使用80連接埠來進行轉寄,但是一時沒配合,因此使用nginx的80連接埠來進行連接埠跳轉。

nginx設定檔如下

upstream ngrok {    server 127.0.0.1:9081;    keepalive 64;}server {    listen 80;    server_name "*.pub.xxx.com";    location / {        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_set_header Host  $http_host:9081;        proxy_set_header X-Nginx-Proxy true;        proxy_set_header Connection "";        proxy_pass      http://ngrok ;    }}

由於使用了網域名稱,因此在網域名稱解析處時需要配置成泛解析,這裡我使用的<b>*.pub</b>來泛解析網域名稱,採用泛解析之後針對多個用戶端時可以不需要再單獨去配置不同的網域名稱解析

用戶端

Ngrok用戶端設定檔

server_addr: "xxx.com:4443"trust_host_root_certs: falsetunnels:  http:    subdomain: "test.pub"    proto:      http: "9091"  ssh:    remote_port: 3322    proto:      tcp: "22"

用戶端啟動命令:

啟動http ngrok -config ngrok.conf start http

啟動ssh ngrok -config ngrok.conf start ssh

如果啟動ssh,那麼遠端連接埠3322也要在安全規則中啟用。
那麼可以在外網使用ssh 穿透時內網了。我覺得這個有時比teamviewer方便一些,畢竟有一些是伺服器無法使用teamviewer用戶端

連上之後在控制台輸出

Tunnel Status   onlineVersionForwarding……

如果沒有連上或者伺服器斷開 online會顯示成reconnecting

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.