您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问

时间:2022-06-04 18:56:13  来源:  作者:运维笔记ywbj

一:前言

场景问题:

如果本地的项目在没有服务器的情况下,需要让他人访问;

在自己的电脑上搭建一个web服务器,实现本地的访问和外部的访问。我们就要做内网穿透了,内网穿透就是别人通过外网能够访问到我们本地的服务器。

市面上一些主流的内网穿透工具有:

Ngrok,NatApp,花生壳,Ssh、autossh,Frp,Lanproxy,Spike

这里介绍使用Ngrok工具。

二:使用官网自带的服务器

官网提供免费的服务器可使用,但是域名是随机的,只能临时使用,但是作为开发测试,给远方的甲方看到自己的电脑上的项目,还是足够了。

傻瓜式操作,5分钟完成。

官方网站:https://ngrok.com/

自己下载相应的版本即可,我这里是linux,选择Linux即可。

官方提供个三种安装方式,都可以使用。

第一种:下载解压得到一个脚本文件,执行即可。

第二种:apt安装即可。

第三种:用snap工具安装。

Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问

 

我这里用snap安装:

sudo snap install ngrok

添加authtoken,authtoken需要注册登录进去才可以看到,我用google邮箱默认登录即可。

Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问

 

添加authtoken

sudo ngrok config add-authtoken 29xKUhVc76mfOyPp3IYrXk6KIe7_4modhP9oq1B3beAWRKCtC

添加完成后,直接执行需要启动的端口即可。如这里是web网站,就使用80端口启动。

sudo ngrok http 80

启动后,会随机分配一个域名,用这个域名就可以实现外网访问自己电脑内网了,启动后界面:

Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问

 

这里分配的域名为
https://1414-96-9-67-134.ap.ngrok.io/,如果是甲方,给他用这个域名,就可以访问自己的电脑的web网页了。

浏览器打开测试就可以访问了。

Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问

 

三:自己搭建ngrok服务器

虽然官方有自己的服务器,需要更多的功能还是需要付费,比如自定义域名。所以这里可以自己搭建服务器。

目前只有版本1开源可搭建,版本2以上没有开源,毕竟人家也要吃饭的。代码也要2016年停止更新,所以现在基本都是用这套代码的。

Github地址:
https://github.com/inconshreveable/ngrok

官方示意图:

Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问

 

1:域名解析

这里是我自己的域名ywbj.cc 为例子配置。

打开域名管理页面,建立两个A记录,把域名解析到服务器上,用来关联ngrok服务。

添加*.ngrok.ywbj.cc和ngrok.ywbj.cc两条记录

Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问

 

到时候将通过 xxx.ngrok.ywbj.cc:端口 来访问代理服务器。

2:安装git

git一般是默认安装的,没有的话直接安装即可

#centos
yum install git
#或者ubuntu
sudo apt install git

 

3:安装、配置Go语言环境

ngrok是基于go语言开发的,所以需要先安装go语言开发环境。

我这里是ubuntu,直接安装

sudo apt install golang -y

安装完成后go version可查看版本是否安装成功。

ubuntu@ubuntu:~# go version
go version go1.13.8 linux/amd64

安装好后,需设置go环境变量。

由于我是在线安装,只需要配置两个环境变量。

cd ~
# 到主目录
vi .bashrc
# 打开配置文件,在末尾添加如下
export GOPATH=/usr/local/ngrok/
# 这个目录是go的工作目录,即等下要编译ngrok的目录
export NGROK_DOMAIN="ngrok.ywbj.cc"
#ngrok服务二级域名,后面生成证书时的$NGROK_DOMAIN

如果是自己下载的golang版本,则还需要配置添加其他两个环境变量,这里例子为:下载版本放在安装 /usr/local 路径:

export GOROOT=/usr/local/go
# 这个目录是go的解压目录
export PATH=$GOROOT/bin:$PATH:$GOPATH/bin
# 设置bin目录

更改完成后,刷新生效配置

source .bashrc

4:下载获取 Ngrok 源码

下载源码

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

进入目录

cd ngrok

5:根据自己的域名生成证书

openssl具体参数,可以自行研究,比较复杂,下面$NGROK_DOMAIN变量,就是环境变量已经配置好了。如果没有配置DOMAIN环境变量,也可以,只需要在执行前加条命令。

NGROK_DOMAIN="ngrok.ywbj.cc"

然后生成证书

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
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key

 

6:编译生成服务端和客户端

ngrokd 为服务端的执行文件,ngrok为客户端的执行文件。

make release-server release-client

注:我这里服务器和客户端都是同一平台,所以我同时编译即可。如果客户端不同,分开执行。

windows、arm、linux客户端版本编译,如下:

GOOS=linux GOARCH=amd64 make release-client
GOOS=windows GOARCH=amd64 make release-client
GOOS=linux GOARCH=arm make release-client

不同平台使用不同的 GOOS 和 GOARCH,GOOS为go编译出来的操作系统 (windows,linux,darwin),GOARCH, 对应的构架 (386,amd64,arm),对应如下:

Linux 平台 32 位系统:GOOS=linux GOARCH=386
Linux 平台 64 位系统:GOOS=linux GOARCH=amd64

Windows 平台 32 位系统:GOOS=windows GOARCH=386
Windows 平台 64 位系统:GOOS=windows GOARCH=amd64

mac 平台 32 位系统:GOOS=darwin GOARCH=386
MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64

ARM 平台:GOOS=linux GOARCH=arm

编译出的程序会放在ngrok/bin/下,ngrok为客户端程序,ngrokd为服务器程序。

 

7:启动服务器端

ngrokd为服务器端。

cd ngrok/
sudo ./bin/ngrokd -domain="ngrok.ywbj.cc" -httpAddr=":8080" -httpsAddr=":8081" -tunnelAddr=":4443"

上面domain为自己的域名,设置默认http,https端口分别为8080,8081,连接的tunnel(隧道端口)为4443端口。端口可以随意设置,并不是唯一的。

启动后浏览访问
http://ngrok.ywbj.cc:8080/,可以看到提示,也是启动了隧道。

Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问

 

查看端口情况,也可以看到已经启动。

.NETstat -lntup|grep ngrok
Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问

 

8:客户端启动

将ngrok通过工具,传送到需要穿透的客户端机器。

在同一文件夹中,创建ngrok.cfg配置文件,并写入基础配置。

sudo vim ngrok.cfg

添加内容如下:

server_addr: "ngrok.ywbj.cc:4443"
tRust_host_root_cert: false

此文件位YAML格式,缩进用空格。

server_addr后填写你的域名,要和之前写的一模一样。

4443是固定端口,一般不改,但也可以在服务端更改。

web也可以改成其他,启动客户端80端口。

./ngrok -subdomain web -config=ngrok.cfg 80

第一次启动有点慢,耐心一点,可能需要等待重连一会。连接成功后,显示:

Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问

 

浏览器访问
http://web.ngrok.ywbj.cc:8080/即可穿透访问内网客户端80端口。

Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问

 

9:使用固定端口配置

如果想一次性转发多个端口或者想指定远程的对应端口,需要完善ngrok.cfg,如:

server_addr: ngrok.ywbj.cc:4443
trust_host_root_certs: false
tunnels:
 ssh:
  remote_port: 1122
  proto:
   tcp: 22
 ss:
  remote_port: 8388
  proto:
   tcp: 8388
 ftp:
  remote_port: 20
  proto:
   tcp: 20
 ftp2:
  remote_port: 21
  proto:
   tcp: 21
 http:
  subdomain: www
  proto:
   http: 80
   https: 443

使用方法,启动特定的转发tunnel

./ngrok -config=ngrok.cfg start http

当然也可以将所有配置全部转发

./ngrok -config ngrok.cfg start-all
Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问

 

10:后台启动

服务端:

nohup ./bin/ngrokd -domain="ngrok.ywbj.cc" -httpAddr=:8080 -httpsAddr=":8081" -tunnelAddr=":4443"
> /var/log/ngrokd.log 2>&1 &

客户端:

必须加上参数 -log=stdout,否则是不行的

nohup ./ngrok -config ngrok.cfg -log=stdout start-all > /var/log/ngrok.log 2>&1 &

到此,ngrok服务器搭建完成。



Tags:ngrok服务器   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问
一:前言场景问题:如果本地的项目在没有服务器的情况下,需要让他人访问;在自己的电脑上搭建一个web服务器,实现本地的访问和外部的访问。我们就要做内网穿透了,内网穿透就是别人通...【详细内容】
2022-06-04  Search: ngrok服务器  点击:(911)  评论:(0)  加入收藏
一分钟实现内网穿透(ngrok服务器搭建)
简单来说内网穿透的目的是:让外网能访问你本地的应用,例如在外网打开你本地http://127.0.0.1指向的Web站点。最近公司的花生壳到期了,要续费,发现价格一直在涨,都是5年以上的老用...【详细内容】
2020-01-02  Search: ngrok服务器  点击:(657)  评论:(0)  加入收藏
▌简易百科推荐
为什么Nginx被称为“反向”代理呢?
Nginx(发音为"engine-x")是一款高性能、轻量级的开源Web服务器软件,也可用作反向代理服务器、负载均衡器和HTTP缓存。Nginx之所以有被称为“反向”代理,是因为它充当客户端设备...【详细内容】
2024-02-01  coderidea  微信公众号  Tags:Nginx   点击:(61)  评论:(0)  加入收藏
哪种服务器操作系统更好呢?
在当今的IT世界中,服务器操作系统扮演着至关重要的角色。它们是确保服务器能够高效、安全地运行的关键因素。然而,对于许多人来说,服务器操作系统的种类和特点可能是一个复杂的...【详细内容】
2024-01-30    简易百科  Tags:操作系统   点击:(81)  评论:(0)  加入收藏
什么是VPS服务器
VPS服务器是一种虚拟化技术,它将一台物理服务器划分为多个虚拟的独立服务器,每个虚拟服务器都可以拥有自己的操作系统、运行环境、应用程序等。这种技术使得每个虚拟服务器可...【详细内容】
2024-01-30    简易百科  Tags:VPS服务器   点击:(76)  评论:(0)  加入收藏
VPS服务器下载速度慢?这五招帮你提速
VPS服务器下载速度慢可能会让用户感到沮丧,尤其是对于需要大量下载和上传数据的用户。幸运的是,有一些方法可以帮助您提高VPS服务器的下载速度,使您的在线体验更加顺畅。在本文...【详细内容】
2024-01-30  IDC行业观察者    Tags:VPS服务器   点击:(61)  评论:(0)  加入收藏
美国VPS和英国VPS:地理位置对服务器性能的影响
在今天的数字时代,VPS已成为在线业务和网站托管的关键组成部分。然而,选择合适的VPS主机服务时,地理位置通常被忽视,尽管它对服务器性能有着重要的影响。本文将探讨美国VPS和英...【详细内容】
2024-01-26  IDC行业观察者    Tags:服务器   点击:(56)  评论:(0)  加入收藏
如何判断服务器所需带宽:基于业务需求和流量模式的关键考量
在选择服务器时,带宽是一个重要的考虑因素。带宽的大小直接影响到网站的加载速度和用户的访问体验。那么,如何判断服务器需要多大的带宽呢?本文将为你揭示这一关键问题的答案...【详细内容】
2024-01-26  源库科技    Tags:服务器   点击:(81)  评论:(0)  加入收藏
服务器内存空间及IO操作原理解析
服务器的内存空间分为内核空间和用户空间,而我们编写的程序通常在用户空间中运行。在进行读写操作时,我们直接操作的是用户缓冲区,而用户缓冲区的内容来自于内核缓冲区。这种内...【详细内容】
2024-01-23  王建立    Tags:服务器   点击:(46)  评论:(0)  加入收藏
如何在Java环境中安装Nginx?
1. 下载Nginx:首先,前往Nginx官方网站(https://nginx.org/en/download.html)下载新版本的Nginx。选择适合您操作系统的版本,通常有Windows、Linux和Mac等不同操作系统的版本可供...【详细内容】
2024-01-22  敲代码的小动    Tags:Nginx   点击:(71)  评论:(0)  加入收藏
服务器证书和SSL证书有啥区别?
在互联网经济时代,随着越来越多的信息以及合作都是从企业官网开始的,因此绝大多数企业都会为自己的网站配置SSL证书,以提高安全性。在接触SSL证书时,也有很多人称之为服务器证书...【详细内容】
2024-01-10  安信SSL证书    Tags:服务器证书   点击:(67)  评论:(0)  加入收藏
宝塔面板怎样部署java项目?
宝塔面板怎样部署java项目?在使用宝塔面板部署Java项目之前,需要确保已经安装了Java Development Kit (JDK)。接下来,将介绍如何使用宝塔面板来部署Java项目的步骤。步骤一:安装...【详细内容】
2024-01-09  西部数码    Tags:宝塔面板   点击:(128)  评论:(0)  加入收藏
站内最新
站内热门
站内头条