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

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

本文主要内容:

1. 解决的问题

本地开发的项目,身在千里之外的朋友如何访问?

本地支付接口如何调试?

通过本教程,这些问题都将得到解决。

本教程将介绍如何搭建内网穿透服务(NAT穿透服务),将没有公网IP的主机映射至公网,实现任意地点访问内网的主机。

2. 硬件与开发环境

注:以下环境是本教程推荐使用的,复现较简单。但这不是必须的,均有其他实现方案。

2.1 内网主机(客户端)

内网主机,可以通俗的理解为自己的笔记本、主机等。

本教程的内网主机使用的是​​Windows10​​​的主机,并且正在运行一个通过​​localhost​​可以访问的项目。

本教程内网主机使用的开发环境如下。

环境

说明

Java

版本要求1.7及以上环境。

Maven

可选

网卡

必须可以连接到互联网

2.2 公网云服务器(服务端)

本教程以​​阿里云ECS服务器​​为例。

本教程云服务器推荐使用的开发环境如下。

环境

说明

公网IP

云服务器必须具有​​公网IP​​地址。

Docker

需要掌握Docker的基本使用方法。

Docker Compose

需要掌握Docker Compose的基本使用方法。

Nginx

不配置域名与SSL,可不用。

2.3 域名(可选)

如果使用域名,域名必须​​备案​​​。如果不使用域名,则可以使用​​IP地址:端口​​的形式,进行测试访问。

3. 实现原理

首先我们定义内网主机(客户端)和公网云服务器(服务端)的IP信息。

硬件

角色

IP

系统

内网主机

客户端

127.0.0.1

Windows10

公网云服务器

服务端

140.143.88.88

Ubuntu20.04

实现的内网穿透的基本原理是这样的:

1、用户访问服务器公网IP;

2、服务器响应用户的访问请求,根据配置信息,将用户的请求信息转发至内网主机;

3、内网主机处理用户请求,将请求结果返回给云服务器;

4、云服务器将请求结果转发给用户。

其基本的数据流是 ​​公网←→云服务器←→内网​​。

在整个过程中,云服务器与内网主机之间是始终保持通信的。

这也就导致使用第三方的内网穿透服务,存在数据包经过对方服务器所引发的数据安全性问题。

4. 服务器端配置

4.1 安装Lanproxy服务端

在开始之前,请先保证云服务器已经安装了Docker和Docker Compose。

如果不使用Docker,可以使用普通的Java方式安装运行。

1、创建项目目录

在 ​​/usr/local/docker​​​ 目录下,新建名为​​lanproxy​​的文件夹,然后进入该文件夹。如下图所示:

使用Lanproxy搭建内网穿透服务完整教程_客户端

2、创建Docker Compose文件

在​​lanproxy​​​文件夹内,使用​​vi​​​命令新建一个名为​​docker-compose.yml​​ 的文件,写入如下信息并保存。

version: '3.1'
services:
lanproxy-client:
# 镜像地址
image: franklin5/lanproxy-server
container_name: lanproxy-server
environment:
# 配置你的账号
- LANPROXY_USERNAME=input_username
# 配置你的密码
- LANPROXY_PASSWORD=input_password
volumes:
# 用于保存创建的配置文件,避免重启服务后配置消失
- ./config-data:/root/.lanproxy
ports:
- 9000:8090 # 左:服务器(宿主机)的IP,也是访问地址;右:容器地址
- 4900:4900 # 左:服务器(宿主机)的IP;右:容器地址
- 4993:4993 # 左:服务器(宿主机)的IP;右:容器地址
- 9001-9100:9001-9100 # 这里添加100组端口映射,后续用来添加映射
restart: always # 始终重启

其中每一项配置的说明,见注释。

这里重点记住容器地址为8090的端口所对应的宿主机的端口

如上实例,需要记住9000端口,这说明可以通过 140.143.88.88:9000 访问服务端。

这些端口需要在云服务器控制台的安全组中开放。

使用Lanproxy搭建内网穿透服务完整教程_内网穿透_02

3、启动Docker容器

在​​lanproxy​​目录下,使用如下命令启动Docker容器:

docker-compose up -d

首次启动时,会下载几个十几M的镜像文件。

后续再次启动,则无需下载,直接运行,如下图所示。

使用Lanproxy搭建内网穿透服务完整教程_服务端_03

显示done后,表明服务端启动成功。

4.2 Lanproxy服务端的基本配置

1、访问后台

浏览器通过140.143.88.88:9000即可访问服务端的后台,其中用户号和密码是在前文yml文件中自定义的。

使用Lanproxy搭建内网穿透服务完整教程_客户端_04

2、添加客户端

访问​​添加客户端​​​左侧菜单,输入任意​​客户端名称​​​,随机​​生成秘钥​​​,点击​​提交​​即可。

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

在​​客户端管理​​菜单下,可以看到已添加的客户端。

使用Lanproxy搭建内网穿透服务完整教程_客户端_06

这里的客户端秘钥需要记住,后续会用到。

3、配置端口

访问菜单配置管理,进入已添加的我的台式机客户端菜单下,进行配置的添加。

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

一共需要配置3个信息,每个信息均有详细说明,如下图所示。

使用Lanproxy搭建内网穿透服务完整教程_服务端_08

  • 代理名称:随意输入
  • 公网端口:指的是服务器的端口。前面我们已经开放了9000~9100的端口,其中9000已用,则可以填这之间的其他任意端口。
  • 内网主机IP:内网主机项目的访问IP。比如本机某项目的访问地址是localhost:8080​,则填写 127.0.0.1:8080。

提交。如下图所示。

使用Lanproxy搭建内网穿透服务完整教程_内网穿透_09

如上图的配置实例,最终实现的效果是公网访问 140.143.88.88:9001​ 可以访问内网主机的 127.0.0.1:9010 的项目。

至此,服务端配置完毕。

4.3 可选操作

服务器配置完成后,再前往服务器查看​​lanproxy​​文件夹下的配置文件,会发现多了一个JSON格式的配置文件,其存放的就是我们刚才配置的信息。

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

主要是保证下次启动Docker项目时,数据不会遗失。

5. 内网主机配置

5.1 下载配置Lanproxy客户端

1、下载客户端

访问 https://file.nioee.com/d/2e81550ebdbd416c933f/​ ,下载名为 proxy-java-client-0.1.zip 的Java客户端压缩包,然后解压,如下图所示。

使用Lanproxy搭建内网穿透服务完整教程_内网_11

2、配置客户端

打开​​conf​​​文件夹下的​​config.properties​​​文件,按下图所示配置​​key​​​和​​host​

使用Lanproxy搭建内网穿透服务完整教程_客户端_12

5.2 启动Lanproxy客户端

3、启动客户端

Windows系统下,双击运行 ​​bin​​​ 文件夹下的​​startup.bat​​批处理命令,如下图所示。

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

4、验证连接

然后访问​​服务端​​​,刷新页面,​​客户端列表​​​中的内网主机已​​在线​​​,表明​​内网主机​​​和​​云服务器​​连接成功。

使用Lanproxy搭建内网穿透服务完整教程_内网_14

6. 测试内网穿透

我们内网主机已经运行了一个9010端口的项目, 如下图所示。

使用Lanproxy搭建内网穿透服务完整教程_服务端_15

内网访问是正常的。

使用Lanproxy搭建内网穿透服务完整教程_服务端_16

然后使用服务器的公网IP+端口的形式访问,如下图所示。

使用Lanproxy搭建内网穿透服务完整教程_内网_17

至此,互联网上的任何设备,均可以通过此地址访问我们内网的项目。

7. 域名绑定

在以上的所有操作中,我们的Lanproxy服务端,内网主机项目均使用IP+端口的形式进行访问。

在实际的开发中,比如本机支付接口的调试,这是行不通的。

接下来我们基于​​宝塔面板的Nginx​​,实现域名绑定、端口映射与SSL(https)。

在进行接下来的操作之前,需要有以下资料:

  • 云服务器安装​​宝塔面板​​(当然通过纯Nginx配置也可以实现,这里不讲)
  • 1个​​已备案的域名​​(分2个子域名,分别绑定Lanproxy服务端和内网主机项目)
  • 1个Nginx类型的​​SSL证书​​(用来开启https访问)

7.1 域名绑定

​宝塔面板​​​的​​网站​​​菜单下,点击​​添加站点​​​,输入​​域名​​​,​​PHP版本​​​选择​​纯静态​​,如下图所示。

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

然后就可以使用此域名+9000端口,访问服务端后台了。

同时添加一个​​dev.XXXX.com​​的域名,就可以使用此域名+9001端口,访问内网主机的项目了。

使用Lanproxy搭建内网穿透服务完整教程_客户端_19

7.2 反向代理

接下来分别为两个域名添加反向代理,如下图所示。

使用Lanproxy搭建内网穿透服务完整教程_客户端_20

使用Lanproxy搭建内网穿透服务完整教程_客户端_21

然后,就可以只使用域名访问啦,如下图所示。

使用Lanproxy搭建内网穿透服务完整教程_服务端_22

7.3 开启SSL

接下来将dev域名的证书信息,添加至宝塔面板中,如下图所示。

使用Lanproxy搭建内网穿透服务完整教程_内网穿透_23

可以强制开启https。

然后访问dev的域名,将直接跳转至​​https​​开头的网址,如下图所示。

使用Lanproxy搭建内网穿透服务完整教程_服务端_24

至此,关于域名的相关配置完成。

参考:

  • https://github.com/ffay/lanproxy
  • https://hub.docker.com/r/franklin5/lanproxy-server

原文链接:https://blog.51cto.com/cxhit/4906777

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享