有时侯想在自己笔记本、路由器或则蓝莓派上搭建一些web、vpn等服务让自己用,而且自己的笔记本通常没有内网iplinux内核,无法在外部访问那些服务,如同右图,笔记本能访问到内网,而且无法从内网访问到笔记本。
这时可以用一台有内网ip的服务器借助ngrok在中间做个跳板,如右图,原理是搭有web服务的外网笔记本A与网段服务器C长联接,手机B访问服务器C的指定一个端口,服务器C将收到的手机发来的数据转发给外网笔记本A,A作出相对的响应回传给服务器C,C再将收到的数据发给手机A,实现穿透外网。端口转发这种规则都是在服务器C和笔记本B上定义好的。
ngrok穿透外网原理搭建比较简单,搭建也比较简单,不须要填好多配置文件。只须要在服务器上运行服务端程序,在外网笔记本上运行顾客端程序就行了。
须要:一台服务器、一个域名
搭建步骤:
1、环境打算:在服务器上安装git、go语言环境,下载ngrok源码包。
2、用域名生成证书(避免他人用借助你的服务器做跳板)。
3、编译服务端程序。
4、编译顾客端程序,并复制到外网笔记本上。
5、分别运行服务端和顾客端,实现长联接。
6、测试,用手机访问看能不能转发数据。
详尽步骤:
(为了容易理解,这儿用当作域名,二级域名是,指向同一个服务器)
1、环境打算
安装git
yuminstallgit-y
下载go语言包,直接给出下好的了:
解压go语言压缩包,创建环境变量:
tar-zxvfgo1.9.2.linux-amd64.tar.gz
添加并保存profile文件:
vi/etc/profileexportGO_HOME=/file/go/goexportPATH=$PATH:$GO_HOME/bin
更新环境变量
source/etc/profile
下载解压github上的ngrok源码
wget
给一个下好的ngrok:
2、生成证书
执行下述命令:
NGROK_DOMAIN="你的域名"opensslgenrsa-outbase.key2048opensslreq-new-x509-nodes-keybase.key-days10000-subj"/CN=$NGROK_DOMAIN"-outbase.pemopensslgenrsa-outserver.key2048opensslreq-new-keyserver.key-subj"/CN=$NGROK_DOMAIN"-outserver.csropensslx509-req-inserver.csr-CAbase.pem-CAkeybase.key-CAcreateserial-days10000-outserver.crt
执行后文件夹下会生成一些证书文件。
将新生成的证书,替换掉assets/client/tls下的证书
cpbase.pemassets/client/tls/ngrokroot.crt-y3、编译生成服务端程序makerelease-server
会在ngrok/bin/目录下生成ngrokd可执行文件,
执行:
./bin/ngrokd-tlsKey=server.key-tlsCrt=server.crt-domain=""-httpAddr=":80"-httpsAddr=":443"
命令中-httpAddr和-httpsAddr是手机访问的的端口,服务端会将80端口接收到的数据通过4443端口(默认)转发到外网笔记本。
出现下述信息是成功运行了。
[22:17:33CST2018/08/19][INFO](ngrok/log.(*PrefixLogger).Info:83)[registry][tun]Noaffinitycachespecified[22:17:33CST2018/08/19][INFO](ngrok/log.Info:112)Listeningforpublichttpconnectionson[::]:80[22:17:33CST2018/08/19][INFO](ngrok/log.Info:112)Listeningforpublichttpsconnectionson[::]:443[22:17:33CST2018/08/19][INFO](ngrok/log.Info:112)Listeningforcontrolandproxyconnectionson[::]:4443[22:17:33CST2018/08/19][INFO](ngrok/log.(*PrefixLogger).Info:83)[metrics]Reportingevery30seconds4、编译生成顾客端程序
这儿编译一个window版的顾客端:
GOOS=windowsGOARCH=amd64makerelease-client(生成linux顾客端直接执行makerelease-client)
执行完上述命令后会在ngrok/bin/目录下生成windows_amd64文件夹,上面有一个ngrok.exe程序,复制到自己外网笔记本上。
例如复制到E:/ngrok文件夹centos vpn 客户端,需在此文件夹里新建ngrok.cfk配置文件,上面写:
server_addr:":4443"trust_host_root_certs:false
在命令提示符里切换到此文件夹,执行:
ngrok.exe-config=ngrok.cfg-log=ngrok.log-subdomainngrok5000
命令手指定配置文件、日志文件,-subdomain旁边跟的是二级域名和服务器将数据转发到的本地端口,注意填的是二级域名的前一部份,例如就写ngrok。
右图是运行成功的截图:
都会将服务器80接收到的数据转发到外网笔记本的5000端口。
5、服务端和顾客端运行命令
先运行服务端
./bin/ngrokd-tlsKey=server.key-tlsCrt=server.crt-domain=""-httpAddr=":80"-httpsAddr=":443"
再运行顾客端
ngrok.exe-config=ngrok.cfg-log=ngrok.log-subdomainngrok50006、用手机访问进行测试
假如是顾客端联接不到服务端(就是前面步骤那种图状态不显示online),通常是服务端配置的问题,顾客端程序和服务端程序是用证书编译下来的配套使用的。
假如服务端能接收到手机访问的数据并且找不到隧洞转发,可能是顾客端域名写的有问题(我就是这样的错误)。
ps:域名哪里没做其他尝试,不晓得填服务器ip可不可行,我在运行顾客端写一级域名不行,写二级域名可以,而且看网上教程填的一级域名。
《Linux就该如此学》是一本基于最新Linux系统编撰,面向零基础读者的技术书籍。从Linux基础知识讲起kali linux,之后渐进式地增强内容难度,详尽讲解Linux系统中各类服务的工作原理和配置方法,以匹配真实生产环境对运维人员的要求centos vpn 客户端,展现内容的实用性。想要学习Linux系统的读者可以点击"阅读原文"按键了解这本书,同时这本书也适宜专业的运维人员阅读,作为一本特别有参考价值的工具书!