Ngrok实现树莓派内网穿透

文章目录 (?) [+]

        花生壳是比较目前流行的穿透内网的工具,但其稳定性和价格确实不敢恭维。Ngrok 是一个由 Go 语言写的反向代理工具,可以将本地端口映射到公网上,其速度和稳定性不亚于花生壳。为了方便连接树莓派便利用博客主机搭建 Ngrok 映射了22端口...


    解析设置

    以域名 ngrok.syscmd.online 为例

    记录类型主机记录解析线路记录值MX优先级TTL
    Angrokdefault[服务器IP]-600
    A*.ngrokdefault[服务器IP]-600



    Ngrok 的安装编译与运行

    sudo apt-get install build-essential golang mercurial git
    cd ~
    git clone https://github.com/inconshreveable/ngrok.git
    #建议使用 git clone https://github.com/tutumcloud/ngrok.git,该分支修复了无法访问的包地址。
    
    cd ngrok 
    NGROK_DOMAIN="ngrok.syscmd.online"
    #Ngrok 绑定的域名
    
    openssl genrsa -out base.key 2048
    openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.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 base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt
    
    cp base.pem assets/client/tls/ngrokroot.crt
    
    #交叉编译时可能会因为 GFW 的原因导致依赖无法下载
    sudo GOOS=linux GOARCH=amd64 make release-server release-client
    #GOOS参数:Mac OS用darwin,Windows用windows。
    #GOARCH参数:ARM嵌入式用arm,32位操作系统用386。
    
    sudo GOOS=linux GOARCH=arm make release-client
    #树莓派用这个,编译完的 ngrok 位于bin/linux_arm/。
    
    #测试服务端 Ngrok
    sudo ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="ngrok.syscmd.online" -httpAddr=":5566" -httpsAddr=":7788"
    #httpAddr、httpsAddr 分别是用来转发 http、https 服务的端口,默认分别为80、443。
    #ngrokd 会通过 4443 端口用来跟客户端通讯(可通过 -tunnelAddr=":xxx" 指定)。
    #若配置了 iptables 规则,需要放行这三个端口上的 TCP 协议。
    
    
    #服务端 Ngrok 守护进程
    sudo apt install screen
    
    screen -S keepngrok
    
    cd ~/ngrok/
    sudo ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="ngrok.syscmd.online" -httpAddr=":5566" -httpsAddr=":7788"
    #按 Ctrl + A + D 挂起 screen
    
    screen -ls
    #列出当前挂起的 screen
    
    #会输出类似如下内容
    There is a screen on:
        1997.keepngrok (03/24/17 21:16:01) (Detached)
        1 Socket in /var/run/screen/S-ubuntu.
    
    screen -r keepngrok
    #恢复挂起的 screen,或者使用 screen -r 1997



    Ngrok客户端的使用

    由于Ngrok会将内网设备端口映射到公网上,运行在内网设备上的服务要做好安全配置!

    映射SSH

    #下载 bin/linux_arm/ngrok 并在同路径下创建配置文件 ngrok.cfg
    #注意格式,不要使用TAB代替空格!
    
    server_addr: "ngrok.syscmd.online:4443"
    trust_host_root_certs: false
    tunnels:
        ssh:
            remote_port: 2222
            proto:
                tcp: 22
    
    #运行
    ./ngrok -config=ngrok.cfg start ssh

    树莓派开机自启Ngrok

    sudo nano /etc/init.d/ngrok
    
    
    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides:          ngrok
    # Required-Start:    $local_fs $remote_fs $network
    # Required-Stop:     $local_fs $remote_fs $network
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: ngrok
    # Description:       Start Ngrok Service
    #
    ### END INIT INFO
    
    NAME=Ngrok
    DAEMON=/home/pi/ngrok/ngrok
    CONFIG=/home/pi/ngrok/ngrok.cfg
    TUNNELS="ssh"
    
    [ -x "$DAEMON" ] || exit 0
    
    case "$1" in
        start)
            echo "Starting $NAME..."
            start-stop-daemon --start --chuid pi --exec $DAEMON --quiet --oknodo --background -- -config $CONFIG start $TUNNELS || return 2
            ;;
        stop)
            echo "Stopping $NAME..."
            start-stop-daemon --stop --exec $DAEMON --quiet --oknodo --retry=TERM/30/KILL/5 || return 2
            ;;
        restart)
            $0 stop && sleep 2 && $0 start
            ;;
        *)
            echo "Usage: $0 {start|stop|restart}"
            exit 1
            ;;
    esac
    exit 0
    
    
    sudo chmod +x /etc/init.d/ngrok
    
    #添加开机启动
    sudo update-rc.d ngrok defaults
    #删除开机启动
    sudo update-rc.d -f ngrok remove

    我的小Pi

    [左:内网 SSH 连接树莓派,右:公网 SSH 连接树莓派,下:Ngrok 公网服务器]

    Ngrok内网穿透连接树莓派


    映射HTTP

    #下载 bin/ngrok 并在同路径下创建配置文件 ngrok.cfg
    #注意格式,不要使用 TAB 代替空格!
    
    server_addr: "ngrok.syscmd.online:4443"
    trust_host_root_certs: false
    tunnels:
        http:
            subdomain: "test"
            auth: "username:password"
            proto:
                http: 80
    
    #运行
    ./ngrok -config=ngrok.cfg start http

    正在 Deepin 上开发的 Z-BlogPHP 主题...

    Ngrok内网穿透Web开发


    本地可以访问 http://127.0.0.1:4040 查看 Ngrok 日志


    参考资料

    [1] https://www.svenbit.com/2014/09/run-ngrok-on-your-own-server/

    [2] http://www.lampblog.net/ubuntu/start-stop-daemon%E5%91%BD%E4%BB%A4/

    [3] http://coderbee.net/index.php/linux/20130524/141

    本文标题:Ngrok实现树莓派内网穿透
    本文链接:https://www.lanseyujie.com/post/ngrok-for-raspberry-pi.html
    版权声明:本文使用「署名 4.0 国际」创作共享协议,转载或使用请遵守署名协议。
    点赞 0 分享 0