一:前言

场景问题:
如果本地的项目在没有服务器的情况下,需要让他人访问;
在自己的电脑上搭建一个web服务器,实现本地的访问和外部的访问。我们就要做内网穿透了,内网穿透就是别人通过外网能够访问到我们本地的服务器。

市面上一些主流的内网穿透工具有:
Ngrok,Natapp,花生壳,Ssh、autossh,Frp,Lanproxy,Spike

这里介绍使用Ngrok工具。

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

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

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

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

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

官方提供个三种安装方式,都可以使用。
第一种:下载解压得到一个脚本文件,执行即可。
第二种:apt安装即可。
第三种:用snap工具安装。


我这里用snap安装:

sudo snap install ngrok

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

添加authtoken

sudo ngrok config add-authtoken 29xKUhVc76mfOyPp3IYrXk6KIe7_4modhP9oq1B3beAWRKCtC

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

 sudo ngrok http 80

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


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

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

三:自己搭建ngrok服务器

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

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

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

官方示意图:

1:域名解析

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

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

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

到时候将通过 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=amd64Windows 平台 32 位系统:GOOS=windows GOARCH=386
Windows 平台 64 位系统:GOOS=windows GOARCH=amd64MAC 平台 32 位系统:GOOS=darwin GOARCH=386
MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64ARM 平台: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/,可以看到提示。

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

netstat -lntup|grep 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

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

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

9:使用固定端口配置

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

server_addr: ngrok.lanthy.com:4443
trust_host_root_certs: false
tunnels:ssh:remote_port: 1122proto:tcp: 22ss:remote_port: 8388proto:tcp: 8388ftp:remote_port: 20proto:tcp: 20ftp2:remote_port: 21proto:tcp: 21http:subdomain: wwwproto:http: 80https: 192.168.1.22:443

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

./ngrok -config=ngrok.cfg start http

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

./ngrok -config ngrok.cfg start-all

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服务器搭建完成。

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

  1. 手把手教你,搭建内网穿透服务

    我的 GitHub 仓库:? 手把手教你搭建内网穿透服务,基于 lanproxy 穿透服务,为你深度定制了开箱即用的服务端和客户端 Docker 镜像. 在很多场景下内网穿透都是我们常常遇到的需求,之 ...

  2. 搭建内网穿透服务一步一步讲解教程

    我的 GitHub 仓库:? 手把手教你搭建内网穿透服务,基于 lanproxy 穿透服务,为你深度定制了开箱即用的服务端和客户端 Docker 镜像. 在很多场景下内网穿透都是我们常常遇到的需求,之 ...

  3. 搭建个人内网穿透服务

    内网穿透 本地电脑上的服务无法通过互联网让其他人访问到,通过内网穿透技术可以为自己本地的服务提供互联网入口,无需将本地服务部署在服务器上,便可以让其他人可以访问 前提准备 本地web服务,访问8080 ...

  4. 详细教你用NPS搭建内网穿透服务,外出时轻薄本轻松连接家里的游戏主机远程玩耍

    文章目录 前言 一.NPS概述 NPS的原理 二.NPS服务器搭建 1.下载软件 2.云服务器配置 2.1.防火墙配置 2.2.用WinSCP远程上传服务文件 2.3.使用SSH终端安装启动 2.4. ...

  5. 使用Lanproxy搭建内网穿透服务完整教程

    本文主要记录了使用基于Docker的Lanproxy搭建内网穿透服务的过程,其中包括服务端和客户端的详细配置,并且基于宝塔面板的Nginx实现域名绑定.反向代理与SSL. 本文主要内容: 1. 解决的 ...

  6. UBNT ER-X 路由器DDNS配置和frps内网穿透服务搭建

    本文基于UBNT EdgeRouter ER-X路由器,在不额外增加硬件的情况下,实现DDNS,搭建frps内网穿透服务. Teamviewer开始收费了,向日葵之类用起来又不顺手,试来试去还是Win ...

  7. 通过frp搭建属于自己的免费稳定的内网穿透服务

    文章目录 介绍 简述 功能列表 原理 部署 部署 客户端部署 Linux环境下部署 Windows环境下部署 管理后台 安全问题 限速 对比 HTTP和HTTPS事项整理 HTTP注意事项 HTTPS ...

  8. 快速搭建使用FRP内网穿透服务

    快速搭建使用FRP内网穿透服务 frp是一款流行的跨平台开源免费内网穿透工具,支持 Windows.macOS 与 Linux.你只需一台快速稳定的服务器即可愉快地进行内网穿透,实现家中设备公网直接访 ...

  9. 使用frp搭建内网穿透服务

    什么是内网穿透?为什么要用内网穿透?内网穿透能做什么? 以上问题我只想说,如果你自己没有公网IP,但是你又想在公网上访问家里的服务,或者是在公司远程家里的电脑,那么你就需要内网穿透服务. 内网穿透需要 ...

最新文章

  1. ROS系统中实现点云聚类(realsense数据源)
  2. 4行代码,让app自动化框架支持 webview 混合应用操作
  3. 做了表分区以后的数据库表,在使用程序进行修改操作时报异常。
  4. solr:关于dismax的使用情况(转:https://my.oschina.net/momohuang/blog/145379)
  5. 查看docker容器日志
  6. .NET Core 使用RSA算法 加密/解密/签名/验证签名
  7. 【渝粤教育】 国家开放大学2020年春季 2528监督学 参考试题
  8. 嘉年华回顾丨李海翔带你解密腾讯TDSQL数据库的技术与未来
  9. 大数据_Flink_数据处理_运行时架构7_程序结构和数据流图---Flink工作笔记0022
  10. 面试常问的深度学习(DNN、CNN、RNN)的相关问题
  11. python不会英语不会数学怎么自学-文科女生学Python:学过初中数学和英语就能懂的编程逻辑...
  12. TClientDataSet[2]: Data、XMLData
  13. python查看qq撤回消息_QQ坦白说里匿名叫我还想逃?Python轻松查看匿名用户信息...
  14. 软件概要设计如何写(文档恐惧症的程序猿必读)
  15. 网络编程day1-本地信息的获取
  16. php写浏览记录,php 浏览历史记录的实现方法
  17. java applet.newaudioclip_Java Applet
  18. java和c制作游戏软件,游戏软件制作,游戏软件制作入门教程
  19. YNWA,同样是我们普通人的鞭策
  20. 在校园网中进行无线路由器设置

热门文章

  1. 成功解决Your CPU supports instructions that this TensorFlow binary was not compiled to use AVX AVX2
  2. PCIE_基于YOLO3D的目标检测算法移植与测试
  3. 017 | JavaWeb企业进销存管理系统源码附带毕业设计论文 | 大学生毕业设计 | 极致技术工厂
  4. 三国佚事——巴蜀之危(错排公式)
  5. 香港手机号、固话、身份证正则表达式校验
  6. 0x00007ffff7ade419 in memcpy () from /lib/libc.so.6
  7. 最大公约数gcd(m,n)=gcd(n,m%n)之证明
  8. 彻底解决LSASS.exe进程病毒!
  9. VMware17虚拟机安装Ubuntu最新版本(Ubuntu22.04LTS)详细步骤
  10. python简单读写记账代码_Python之区块链简单记账本实现