Tạo đường hầm tunnel tới local với ngrok

April 15, 2019
tunnel ngrok

Với ngrok bạn có thể tạo 1 webserver với https đơn giản mà không mất nhiều chi phí. Ngrok sẽ mở giúp bạn 1 đường hầm tunnel đi tới chính local của bạn và public nó ra ngoài internet. Điều này có lợi ích gì thì bài viết này sẽ giúp bạn giải thích rõ điều đó.

Nếu bạn là 1 developer, đôi khi bạn cần publish site của bạn cho người khác review qua. tuy nhiên người review lại ở nước ngoài hay 1 nơi nào đó ko cùng local internet của bạn. Hay bạn muốn test webhook của mình mà không cần phải đưa nó lên server. Vậy làm thế nào để giải quyết việc đó, Đừng lo vấn đề đơn giản đó đã được giải quyết bằng ngrok. Vậy Ngrok là gì, Thực ra nó chỉ là 1 services, Nhiệm vụ của nó là tự mở 1 tunnel để đi vào local của bạn. Nó biến chính local bạn là 1 server thông qua 1 port tunnel mà bạn đã mở ở local. sau đó nó sẽ khởi tạo 1 subdomain online cho phép người khác request tới service ngrok. Nhiệm vụ của ngrok sẽ forward tới local của bạn thông qua tunnel.

Ví dụ đơn giản

Giả sử bạn có đoạn code go như sau


package main

import (
    "fmt"
    "log"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}

func main() {
    http.HandleFunc("/", handler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

Bạn mở tại local 1 port 8080 và port này chỉ có thể truy cập tại local của bạn hoặc trong cùng giải ip trong router nhà bạn bằng cách

localhost:8080 hoặc your_ip:8080. Để publish service của bạn ra bên ngoài bạn cần tải thêm 1 tool ngrok cli về local sau đó chạy command như sau

$ ./ngrok http 8080

ngrok by @inconshreveable

Tunnel Status                 online
Version                       2.0/2.0
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://92832de0.ngrok.io -> localhost:8080
Forwarding                    https://92832de0.ngrok.io -> localhost:8080

Connnections                  ttl     opn     rt1     rt5     p50     p90
                              0       1       0.00    0.00    0.00    0.00

Vậy là xong ngrok đã tự tạo cho bạn 1 tunnel thông qua tool ngrok cli mà bạn vừa tải về. Bạn có thể gửi domain https://92832de0.ngrok.io ra internet bên ngoài router nhà bạn người khác sẽ truy cập domain trên tương tự như bạn đang truy cập localhost:8080.

Cấu hình ngrok

Basic authen

Nếu service sử dụng basic authencation vậy làm thế nào ngrok truy cập vào được khi service bắt buộc người truy cập phải nhập username và password authen

Điều này rất đơn giản bạn chỉ cần sử dụng command sau

$ ./ngrok http -auth="username:password" 8080

Thì ngrok đã có thể truy cập thoải mái trong service của bạn mà người truy cập không cần phải đăng nhập thông tin trên thủ công.

Domain local

Nếu service của bạn sử dụng 1 domain local dạng như sample.local để truy cập vào thì ngrok hoàn toàn có thể config được

$ ./ngrok http -host-header=sample.local 80

Tcp tunel

ngrok không chỉ cho phép http mà nó còn có thể cho phép bạn truy cập cả giao thức tcp. Giả sử trên local của bạn có mở port database hay cài sshd để ssh trực tiếp vào local của bạn ngrok cũng có thể tunnel trực tiếp vào máy bạn qua kết nối tcp đó

$ ./ngrok tcp 22

// Out put

tcp://0.tcp.ngrok.io:33405 -> localhost:22

Như vậy từ 1 nơi khác bạn của thể ssh vào chính local máy mình thông qua command

$ ssh username@0.tcp.ngrok.io -p 33405

Nếu bạn không nhớ hết các cú pháp đừng lo lắng hãy sử dụng config với file yml

Hãy tạo ra file yml với nội dung như sau

tunnels:
    app-protected:
        proto: http
        addr: 8080
        auth: "username:password"
    mongo:
        proto: tcp
        addr: 27017

Để chạy các tham số config trên bạn chạy command như sau

$ ./ngrok start -config ~/ngrok.yml --all

Ứng dụng với ngrok

Ngrok rất hữu ích trong nhiều trường hợp, Nếu bạn xây dựng 1 con bot của service bên thứ 3. Chắc hẳn rằng bạn cần 1 có 1 webhook ngrok đã giải quyết việc đó giúp bạn để service bên thứ 3 có thể truy cập được vào local của bạn trong lúc bạn dev. Hoặc bạn muốn sử dụng chính local của mình làm server để tiết kiệm chi phí, ngrok cũng giúp bạn tạo ra 1 domain free cho phép người khác có thể truy cập site trên local của bạn. tuy nhiên về performance thì không đảm bảo bằng phương pháp truyền thống.

Bài viết giới thiệu về 1 tool hữu ích dành cho developer, Hi vọng nó có thể giúp bạn trong 1 vài tình huống.