ngrok内网穿透服务器和客户端

本文介绍如何在无公网IP的情况下,通过ngrok实现ARM、Windows、Linux及Mac系统的内网穿透,部署可远程访问的web服务及SSH登录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.概要

1.名称解释:

内网穿透即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透。
就是说映射端口,能让外网的电脑找到处于内网的电脑,提高下载速度。

2.本文目的:

实现ARM,Window,Linux,Mac系统主机,在没有公网固定IP的情况下,仍可访问主机上部署的web服务。
实现ssh登陆。

二.准备

1.服务器1台

本人用的是 阿里服务器 公网 IP: X.X.X.X

2.域名

申请 万网域名: ayyxxx.com
解析设置
这里写图片描述


二. 安装go

1.下载go

    cd ~
    wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz
    tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz

2.设置环境变量

    echo 'export GOROOT=/usr/local/go' >> /etc/profile
    echo 'export PATH=$PATH:$GOROOT/bin' >> /etc/profile
    echo 'export GOPATH=$HOME/go' >> /etc/profile
    echo 'export GOROOT_BOOTSTRAP=/usr/local/go' >> /etc/profile
    source /etc/profile
此处可能在make生成服务端和客户端时报错:
            ##### Building Go bootstrap tool.
            cmd/dist
            ERROR: $GOROOT_BOOTSTRAP must not be set to $GOROOT
            Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.

            解决方法:
            将当前的go复制一份
            #cp -rf go go1.4

3.检查是否安装成功

go version
# 正常的话会返回类似这样的信息: go version go1.9.2 linux/amd64

三.安装ngrok
1.下载ngrok

    cd /usr/local/
    git clone https://github.com/inconshreveable/ngrok.git
    export GOPATH=/usr/local/ngrok/
    export NGROK_DOMAIN="cdgngrok.ayyxxx.com"
    cd ngrok

2.生成证书(重要)

    openssl genrsa -out rootCA.key 2048
    openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.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 rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000

3.在软件源代码目录下面会生成一些证书文件,我们需要把这些文件拷贝到指定位置

    cp rootCA.pem assets/client/tls/ngrokroot.crt
    cp server.crt assets/server/tls/snakeoil.crt
    cp server.key assets/server/tls/snakeoil.key

说明:提示是否覆盖原有文件, 输入 y

4.如果是在国内的服务器需要执行此步,香港或者国外的服务器不需要

    vim /usr/local/ngrok/src/ngrok/log/logger.go
    log "github.com/keepeye/log4go"

5.(1)编译服务端(同时也编译了一个linux下的客户端),注意这里的amd64,如果是32位的话,请修改成386

    cd /usr/local/go/src
    GOOS=linux GOARCH=amd64 ./make.bash
    cd /usr/local/ngrok/
    GOOS=linux GOARCH=amd64 make release-server release-client
            此处可能报错:
            ##### Building Go bootstrap tool.
            cmd/dist
            ERROR: $GOROOT_BOOTSTRAP must not be set to $GOROOT
            Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.

            解决方法:
            将当前的go复制一份
            #cp -rf go go1.4

(2)编译arm客户端

    cd /usr/local/go/src
    GOOS=linux GOARCH=arm ./make.bash
    cd /usr/local/ngrok/
    GOOS=linux GOARCH=arm make release-client       

(3)编译windows下的客户端

    cd /usr/local/go/src
    GOOS=windows GOARCH=amd64 ./make.bash
    cd /usr/local/ngrok/
    GOOS=windows GOARCH=amd64 make release-client

说明:编译生成的 服务端和客户端文件放在 /usr/local/ngrok/bin/ 下
这里写图片描述

6.启动服务端

    cd /usr/local/ngrok/bin/
    ./ngrokd -domain="cdgngrok.ayyxxx.com" &
    ## & 设置后台运行

出现如下内容说明启动成功:
这里写图片描述

7.客户端的运行
本人玩的是 EW-320, 支持Linux系统。插上网线,并设置 ip及网关,使其可以联网。
拷贝 ngrok服务器 /usr/local/ngrok/bin/linux_arm/ 下的 ngrok
复制到 EW-320网关 ~ 家目录

(1)配置ngrok.yml,如下:

    cd ~
    vim ngrok.yml
        server_addr: "cdgngrok.ayyxxx.com:4443"
        tunnels:
           ssh:
              remote_port: 51200 #远程端口 
              proto:
                tcp: ":22"
           web:
              subdomain: 77  #子域名
              proto:
                http: ":80"

(2)启动arm的客户端

    ./ngrok -config=ngrok.yml start ssh web

启动成功:
这里写图片描述

(3)测试web服务
浏览器中访问域名: 77.cdgngrok.ayyxxx.com 效果与 输入 ip地址效果一样,如下图
这里写图片描述
这里写图片描述

(4)测试是ssh登录
远程连接工具xshell
这里写图片描述

ssh登录成功
这里写图片描述

——————————————————————————————————
               结束
——————————————————————————————————

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值