这篇文章主要介绍“基于Docker如何搭建内网穿透服务 ”,在日常操作中,相信很多人在基于Docker如何搭建内网穿透服务 问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于Docker如何搭建内网穿透服务 ”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
10余年建站经验, 网站设计制作、网站设计客户的见证与正确选择。创新互联建站提供完善的营销型网页建站明细报价表。后期开发更加便捷高效,我们致力于追求更美、更快、更规范。
1、概述
内网穿透其实就是用服务器做一个中转,将请求转发。
1.1、原理
内网穿透的原理如下图所示:
用户访问我们的服务器,这个服务器是有公网ip的,所以用户可以无压力访问
服务器与本地电脑保持长链接,当有请求的时候,服务器将请求转发到我们的本地电脑
本地电脑将响应回复给服务器
服务器将响应回复给用户
1.2、实现
要搭建内网穿透,我们得完成两个任务
在公网能访问的服务器上运行我们的内网穿透服务; 在本地电脑上面运行内网穿透客户端。
当然,你可以自己根据原理实现一套,不过我们有现成的三方开源工具,可以帮我们实现这一套功能。这个就是我们今天的主角 。
2、实现步骤
现成的工具已经找到,接下来就是简单的搭建一下了,搭建过程分为服务端和本地电脑端
2.1、服务端流程:
在服务器上安装 docker
和 nginx
在服务器上通过 docker
运行 lanproxy server
将域名解析到我们的服务器
配置 nginx
反向代理
打开 lanproxy
后台页面,添加客户端和映射信息
2.2、本地电脑流程:
运行要被映射的服务
运行本地电脑映射客户端程序( lanproxy client
)
下面开始服务端的配置:
2.1.1、在服务器上安装 docker
和 nginx
nginx
的安装是很简单的,一个命令就搞定
docker
也可以使用脚本安装,也是一句命令的事
# 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
运行 lanproxy server
服务安装完毕之后,就可以用docker跑服务了,可以自己写一个 dockerfile
,这里,我就把自己写的放出来吧,大家可以拿去用着,gayhub 传送门
这里我修改了 proxy-server-0.1
的部分文件,因为在 docker
中,需要保存服务前台运行,否则容器会被 kill
掉,而官网默认的启动脚本是后台启动的,把 bin/startup.sh
里面的启动命令修改成前台启动即可(去掉nohub和后面的1&2 &)
# 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
后台,一个用来访问我们需要内网穿透的服务
例如:
lanproxy.fengqiangboy.com -> 用来访问lanproxy后端 test.fengqiangboy.com -> 用来访问内网穿透服务
2.1.4配置 nginx
反向代理
将两个域名解析到我们的服务器之后,再通过反向代理,将其反代到我们的lanproxy端口
下面配置的最终效果就是:
我们可以通过 lanproxy.fengqiangboy.com
访问 lanproxy
后
我们可以通过 test.fengqiangboy.com
访问本地电脑映射的服务
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 打开 lanproxy
后台页面,添加客户端和映射信息
打开 http://lanproxy.fengqiangboy.com
用前面 conf/config.properties
文件中配置的账号和密码登录后台
添加一个客户端,记住客户端密钥
添加完客户端之后添加一个配置,配置如下图
到此,服务端的配置就完成了。下面开始本地电脑的配置。
2.2.1 运行要被映射的服务
既然要把内网的服务映射出去,那首先就要把本地电脑的服务跑起来吧,不然拿什么来映射?这里就很多操作方法了,各个语言都不一样,把自己的服务跑起来就行
2.2.2 运行本地电脑映射客户端程序( lanproxy client
)
这里有两个方法,一个方法是使用官网提供的 go
版本,不需要安装 java
环境在本地电脑上,另外一种是使用官网提供的 java
版本,这里我使用 java
版本的。
克隆 lanproxy
代码到本地电脑
$ git clone https://github.com/ffay/lanproxy.git lanproxy
打包 lanproxy
打包之前需要确保你安装了 maven
$ cd lanproxy $ mvn package
修改配置文件信息
打包完成之后,客户端文件会出现在 distribution/proxy-client-0.1
目录下,打开之后有是个文件夹: bin
、 conf
、 lib
和 log
,配置信息在 conf/config.properties
文件内,根据前面服务端的配置信息修改一下。
# 这里是在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
访问测试
按照前面的配置,这时候我们应该是可以通过 test.fengqiangboy.com
来访问我们的内网服务了的,用浏览器打开看看
到此,关于“基于Docker如何搭建内网穿透服务 ”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!