当前位置: 首页 » 综合知识 » it知识 » 正文

基于Docker如何搭建内网穿透服务

发布时间:2023-07-29 以下文章来源于网友投稿,内容仅供参考!

1、概述

内网穿透其实就是用服务器做一个中转,将请求转发。

1.1、原理

内网穿透的原理如下图所示:

  1. 用户访问我们的服务器,这个服务器是有公网ip的,所以用户可以无压力访问

  2. 服务器与本地电脑保持长链接,当有请求的时候,服务器将请求转发到我们的本地电脑

  3. 本地电脑将响应回复给服务器

  4. 服务器将响应回复给用户

1.2、实现

要搭建内网穿透,我们得完成两个任务

在公网能访问的服务器上运行我们的内网穿透服务; 在本地电脑上面运行内网穿透客户端。

当然,你可以自己根据原理实现一套,不过我们有现成的三方开源工具,可以帮我们实现这一套功能。这个就是我们今天的主角 。

2、实现步骤

现成的工具已经找到,接下来就是简单的搭建一下了,搭建过程分为服务端和本地电脑端

2.1、服务端流程:

  1.  在服务器上安装 docker 和 nginx

  2. 在服务器上通过 docker 运行 lanproxy server

  3. 将域名解析到我们的服务器

  4. 配置 nginx 反向代理

  5. 打开 lanproxy 后台页面,添加客户端和映射信息

2.2、本地电脑流程:

  1. 运行要被映射的服务

  2. 运行本地电脑映射客户端程序( lanproxy client )

下面开始服务端的配置:

2.1.1、在服务器上安装 docker 和 nginx

nginx 的安装是很简单的,一个命令就搞定

docker 也可以使用脚本安装,也是一句命令的事

# 1、安装nginx
$ sudo apt-get install nginx

# 2、安装docker
$ curl -fssl https://get.docker | bash -s docker --mirror aliyun

# 可选步骤,建docker源修改为阿里云
$ sudo mkdir -p /etc/docker
$ sudo tee /etc/docker/daemon.json <<-'eof'
{
 # 下面的链接需要到阿里云后台查看,每个人的加速地址是不一样的
 "registry-mirrors": ["https://abcdefg.mirror.aliyuncs"]
}
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/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 -> 用来访问lanproxy后端

test.fengqiangboy -> 用来访问内网穿透服务

2.1.4配置 nginx 反向代理

将两个域名解析到我们的服务器之后,再通过反向代理,将其反代到我们的lanproxy端口

下面配置的最终效果就是:

  1. 我们可以通过 lanproxy.fengqiangboy 访问 lanproxy 后

  2. 我们可以通过 test.fengqiangboy 访问本地电脑映射的服务

lanproxy.fengqiangboy.conf:

server {
  listen 80;
  # 这里使用自己的域名
  server_name lanproxy.fengqiangboy;
  charset utf-8;
  location / {
    proxy_set_header  x-real-ip $remote_addr;
    proxy_set_header  host   $http_host;
    # 这里根据你的lanproxy配置,改成 config.server.port的值
    proxy_pass    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.conf:

server {
  listen 80;
  # 这里使用自己的域名
  server_name test.fengqiangboy;
  charset utf-8;
  location / {
    proxy_set_header  x-real-ip $remote_addr;
    proxy_set_header  host   $http_host;
    # 这里根据你的lanproxy配置,改成 外网接口 的值,在lanproxy后台网页上配置,后面配置
    proxy_pass    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 后台页面,添加客户端和映射信息

  1. 打开 lanproxy.fengqiangboy

  2. 用前面 conf/config.properties 文件中配置的账号和密码登录后台

  3. 添加一个客户端,记住客户端密钥

  4. 添加完客户端之后添加一个配置,配置如下图

到此,服务端的配置就完成了。下面开始本地电脑的配置。

2.2.1 运行要被映射的服务

既然要把内网的服务映射出去,那首先就要把本地电脑的服务跑起来吧,不然拿什么来映射?这里就很多操作方法了,各个语言都不一样,把自己的服务跑起来就行

2.2.2 运行本地电脑映射客户端程序( lanproxy client )

这里有两个方法,一个方法是使用官网提供的 go 版本,不需要安装 java 环境在本地电脑上,另外一种是使用官网提供的 java 版本,这里我使用 java 版本的。

克隆 lanproxy 代码到本地电脑

$ git clone https://github/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 来访问我们的内网服务了的,用浏览器打开看看

  • • Linux Ecdsa密钥长度选择有何依据

    在Linux

  • • Linux Khook在内核监控中的应用如何

    Linux

  • • Linux Gsoap是否支持异步通信

    GSOAP是

  • • Linux Coremail如何提升用户体验

    提升Linu

  • • Linux Ecdsa算法有哪些局限性

    ECDSA

  • 哎呀音乐钢琴键盘学习《 钢琴主人训练营》 西瓜学琴
    郭蝈 陪练钢琴 30节课时 考级刚需 让孩子每一次练琴都是高质量的
    30天轻松学会五线谱 流行钢琴自学初级教程 牙牙学琴
    流行爵士钢琴实战技巧VIP课 - 继伟 哎呀音乐
    【海上钢琴师】原版 MT1990钢琴谱
    百首经典流行钢琴实战曲集 - 继伟
    雷费尔德电钢琴重锤88键专业考级儿童初学者数码电子钢琴家用
    小练咖 真人钢琴陪练 1v1服务 2999随时退 1课时50分钟 考级刚需
    雅马哈电钢琴88键重锤CLP735智能数码电子钢琴家用专业初学者考级
    【原装进口】Yamaha/雅马哈钢琴 b121 SC2原声静音钢琴
  • 珠海专业调钢琴
  • 天津宝坻区调钢琴
  • 天津静海区钢琴调音
  • 成都简阳市钢琴调律
  • 大连瓦房店市钢琴调音
  • 眉山调钢琴联系方式
  • 惠州大亚湾钢琴调琴师
  • 长治调琴师
  • 厦门湖里区钢琴调音师
  • 上海普陀区钢琴调音师