在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
文档更新说明 2018年04月06日 v1.0 内网穿透相信是后端开发者经常遇到的需求,可是怎么实现呢?其实有现成的服务:花生壳、ngrok等,但是,最近花生壳宣布,免费版的内网穿透将不支持80端口映射了,而免费版的ngrok也不够稳定,于是乎,我就开始需找新的解决方案了 本文使用了docker、nginx,要全部搞懂的话需要一定的后端基础(当然,基本上入个门就可以了),个人认为还是有一定阅读门槛的,但是你如果只是想把服务搭建起来,按照步骤来做是不难的 1、概述 内网穿透其实就是用服务器做一个中转,将请求转发,本文记录了在 1.1、原理 内网穿透的原理如下图所示:
1.2、实现 要搭建内网穿透,我们得完成两个任务 在公网能访问的服务器上运行我们的内网穿透服务; 在本地电脑上面运行内网穿透客户端。 当然,你可以自己根据原理实现一套,不过我们有现成的三方开源工具,可以帮我们实现这一套功能。这个就是我们今天的主角 lanproxy 。 2、实现步骤 现成的工具已经找到,接下来就是简单的搭建一下了,搭建过程分为服务端和本地电脑端 2.1、服务端流程:
2.2、本地电脑流程:
下面开始服务端的配置: 2.1.1、在服务器上安装
# 1、安装nginx $ sudo apt-get install nginx # 2、安装docker $ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun # 可选步骤,建docker源修改为阿里云 $ sudo mkdir -p /etc/docker $ sudo tee /etc/docker/daemon.json <<-'EOF' { # 下面的链接需要到阿里云后台查看,每个人的加速地址是不一样的 "registry-mirrors": ["https://abcdefg.mirror.aliyuncs.com"] } EOF $ sudo systemctl daemon-reload $ sudo systemctl restart docker 2.1.2 在服务器上通过 服务安装完毕之后,就可以用docker跑服务了,可以自己写一个 这里我修改了 # 1、克隆docker配置,如果要修改配置可以编辑 conf/config.properties 文件,配置方法见lanproxy官网 $ git clone https://github.com/fengqiangboy/lanproxy-docker.git lanproxy-docker # 2、build docker镜像 $ cd lanproxy-docker $ sudo bash build_container.sh # 3、运行docker容器 $ bash run_container.sh 2.1.3 将域名解析到我们的服务器 需要两个域名,一个用来访问我们的 例如: lanproxy.fengqiangboy.com -> 用来访问lanproxy后端 test.fengqiangboy.com -> 用来访问内网穿透服务 2.1.4配置 将两个域名解析到我们的服务器之后,再通过反向代理,将其反代到我们的lanproxy端口 下面配置的最终效果就是:
lanproxy.fengqiangboy.com.conf: server { listen 80; # 这里使用自己的域名 server_name lanproxy.fengqiangboy.com; charset utf-8; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; # 这里根据你的lanproxy配置,改成 config.server.port的值 proxy_pass http://127.0.0.1:8090; client_max_body_size 35m; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } test.fengqiangboy.com.conf: server { listen 80; # 这里使用自己的域名 server_name test.fengqiangboy.com; charset utf-8; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; # 这里根据你的lanproxy配置,改成 外网接口 的值,在lanproxy后台网页上配置,后面配置 proxy_pass http://127.0.0.1:50000; client_max_body_size 35m; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } 2.1.5 打开
到此,服务端的配置就完成了。下面开始本地电脑的配置。 2.2.1 运行要被映射的服务 既然要把内网的服务映射出去,那首先就要把本地电脑的服务跑起来吧,不然拿什么来映射?这里就很多操作方法了,各个语言都不一样,把自己的服务跑起来就行 2.2.2 运行本地电脑映射客户端程序( 这里有两个方法,一个方法是使用官网提供的 克隆 $ git clone https://github.com/ffay/lanproxy.git lanproxy 打包 打包之前需要确保你安装了 $ cd lanproxy $ mvn package 修改配置文件信息 打包完成之后,客户端文件会出现在 # 这里是在lanproxy后台配置的密钥 client.key=key # 配置ssl信息,根据服务端的配置填写 ssl.enable=true ssl.jksPath=test.jks ssl.keyStorePassword=123456 # 服务器的ip server.host=163.162.161.160 #根据服务端配置,开启ssl的话填写ssl的端口,否则填写普通端口 server.port=4993 启动客户端 客户端信息配置完成之后就可以启动客户端了 # mac/linux使用这个 $ bash bin/startup.sh # Windows 直接运行 bin/startup.bat 访问测试 按照前面的配置,这时候我们应该是可以通过 3、一点补充 为什么要使用docker? 使用docker主要是为了不破坏服务端环境,只是给 这样搭建,服务器重启的话需要手动重启 不需要,在服务端启动 为什么不用花生壳? 前不久看到花生壳的公告,说从4月1日开始,免费版将不提供80端口映射,实际上我用这个映射最大的需求就是做微信调试,去掉80端口就不能做微信调试了,不满足我的需求了,当然,花生壳还是不错的,如果能满足你的需求,还是可以省时省力完成内网穿透的 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持极客世界。 |
请发表评论