菜单

老码牛
发布于 2024-04-06 / 316 阅读
0
0

Docker项目——内网穿透,FRP+NPM+VPS

Docker项目——内网穿透,FRP+NPM+VPS

YouTub视频链接,欢迎点击

大家好,欢迎来到老码牛频道。

随着生活水平的提高,我们每个人拥有了越来越多的电脑和数码设备,如台式机、笔记本电脑、NAS、各种Android盒子以及托管的服务器等等。这些设备提供了各种各样的服务,例如SSH连接、Web服务、远程桌面、以及不同类型的数据库服务,如MySql和SqlServer等等。

有没有一种解决方案可以将所有这些设备通过网络连接起来,组织成一个虚拟的局域网,并且非常方便地使用域名访问每个设备提供的服务呢?答案是肯定的。今天,我们将使用FRP、NPM和VPS来实现内网穿透,并通过域名来访问这些服务。

系统简图

首先,我们看一下要搭建的系统简单图示。

xU9qzK

从左而右,我们可以看到:

  • 用户通过DNS将域名解析到Nginx Proxy Manager所部署的主机的公网IP;
  • Nginx Proxy Manager按照配置的规则,反向代理对应的服务。包括Frp中暴露和中转的服务;
  • Frp专注于内网穿透,支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并安全、便捷地将内网服务暴露到公网;

搭建此系统的条件如下:

  • 具有公网IP主机,我们推荐并演示的是Linux主机。
  • 一个域名,并解析指向到以上主机的IP地址。

接下来,我们就开始搭建这套系统吧。

服务器基本配置,安装Docker

我们的演示服务器是一台香港的Debian服务器,配置是1核1G,公网IP是154.91.177.93。

首先,我们通过SSH登录到服务器。

由于此服务器系统的软件源配置有问题,我们将恢复到官方源。

将sources.list文件修改为以下内容

mv /etc/apt/sources.list /etc/apt/sources.list.old
cat > /etc/apt/sources.list << EOF
deb http://deb.debian.org/debian/ bullseye main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye main contrib non-free
deb http://deb.debian.org/debian/ bullseye-updates main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye-updates main contrib non-free
deb http://deb.debian.org/debian/ bullseye-backports main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye-backports main contrib non-free
deb http://deb.debian.org/debian-security/ bullseye-security main contrib non-free
deb-src http://deb.debian.org/debian-security/ bullseye-security main contrib non-free
EOF

然后更新系统。

apt update -y

使用LinuxMirrors提供的Docker安装脚本,拷贝粘贴。

bash <(curl -sSL https://linuxmirrors.cn/docker.sh)

回车运行。选择y,安装最新的版本; 因为是香港的服务器,所以选官方1; 选择香港的注册源,17;

等待安装完成,安装完成。

Frp服务器端搭建、配置

下面,我们来安装Frp服务器端。

创建服务器端目录,转到此目录。

mkdir /www/dk_project/frps
cd /www/dk_project/frps

新建docker-compose.yml文件,输入vi docker-compose.yml。

vi docker-compose.yml

拷贝yaml内容,粘贴;保存文件。

version: '3.3'
services:
  frps:
    container_name: frps # 容器名称
    image: snowdreamtech/frps # 容器映像
    restart: always # 永远重启
    network_mode: host # 网络:主机模式
    volumes:
      - './frps.toml:/etc/frp/frps.toml' # 配置文件  

新建frps.toml文件,输入vi frps.toml。

vi frps.toml

粘贴frps.toml内容。

此文件配置了服务器端口值,以及Token的字符串值,请保存这些值以供它处使用。

bindPort = 93 # 绑定端口
auth.token = "MyToken123456"

运行Frp服务器端容器

docker compose up -d

等待拉取镜像,拉取镜像完成,容器运行成功

注意:

请在服务器的防火墙,又或者安全组中放行相关的端口,以便配置起效。

Frp客户端搭建、配置

下面,我们来搭建Frp客户端。如下表:

Frpc 服务 URL地址 Frps端口 域名
NAS SSH 127.0.0.1:223 94
管理网站 127.0.0.1:50603 95 nas
Ali99 Wordpress 172.0.17.1:8080 96 wordpress
PHPMyAdmin 172.0.17.1:88 97 myadmin

可以看到,我们打算搭建两个客户端。

一个客户端是我家里的群晖的NAS。我想在公网通过IP和端口来连接到SSH,运行终端命令;通过域名登录到管理站点,方便地管理整个NAS。

另一个是阿里99元服务器,2核2G。由于没有做备案,所以80和443端口是锁住的,一般的Nginx的反向代理也反代不了。我想通过内网穿透将Wordpress网站和MySq管理站点映射到香港服务器,不需要备案,也可以善用服务器资源。

NAS

我们先处理我的NAS,先通过SSH登录,输入密码。

ssh 192.168.2.233 -p 223

切换到root用户,输入密码。

sudo -i

创建Frpc目录,并转到此目录。

mkdir -p /root/dk/frpc
cd /root/dk/frpc

新建docker-compose.yml文件,输入vi docker-compose.yml。

vi docker-compose.yml

拷贝yaml内容,粘贴;保存文件

version: '3.3'
services:
  frps:
    container_name: frpc # 容器名称
    image: snowdreamtech/frpc # 容器映像
    restart: always # 永远重启
    network_mode: host # 网络:主机模式
    volumes:
      - './frpc.toml:/etc/frp/frpc.toml' # 配置文件  

新建frpc.toml文件,输入vi frpc.toml。

vi frpc.toml

粘贴frpc.toml内容。其中,

serverAddr填入服务器的IP;serverPort填入服务器的端口;token输入与服务器同样的字符;

余下就是两个服务的定义:

一个是SSH和NAS服务。请按照实际情况填写,在保存。

# frpc.toml
serverAddr = "154.91.177.93" # 服务器IP
serverPort = 93 # 服务器端口
auth.token = "MyToken123456" # Token

[[proxies]]
name = "ssh" # 服务名称
type = "tcp" # 服务类型
localIP = "127.0.0.1"  # 本地IP
localPort = 223 # 本地端口
remotePort = 94  # 远程端口

[[proxies]]
name = "nas" # 服务名称
type = "tcp" # 服务类型
localIP = "127.0.0.1" # 本地IP
localPort = 50603 # 本地端口
remotePort = 95 # 远程端口

运行Frp客户端容器

docker-compose up -d

等待拉取镜像,拉取镜像完成,容器运行成功

阿里99元

下面我们搭建阿里99服务器,先登录。

此服务器是一个Ubuntu的Linux服务器,已经安装了版本24.0.5的Docker。

创建Frpc目录,并转到此目录。

mkdir -p /www/dk_project/frpc
cd /www/dk_project/frpc

新建docker-compose.yml文件,输入vi docker-compose.yml。

vi docker-compose.yml

粘贴文件内容,保存文件

version: '3.3'
services:
  frps:
    container_name: frpc # 容器名称
    image: snowdreamtech/frpc # 容器映像
    restart: always # 永远重启
    network_mode: host # 网络:主机模式
    volumes:
      - './frpc.toml:/etc/frp/frpc.toml' # 配置文件  

新建frpc.toml文件,输入vi frpc.toml。

vi frpc.toml

粘贴frpc.toml内容。和NAS一样,

serverAddr填入服务器的IP;serverPort填入服务器的端口;token输入与服务器同样的字符;

接下来就是Wordpress和MySql管理服务。

# frpc.toml
serverAddr = "154.91.177.93" # 服务器IP
serverPort = 93 # 服务器端口
auth.token = "MyToken123456" # Token

[[proxies]]
name = "wordpress" # 服务名称
type = "tcp" # 服务类型
localIP = "172.17.0.1"  # 本地IP
localPort = 8080 # 本地端口
remotePort = 96  # 远程端口

[[proxies]]
name = "phpmyadmin" # 服务名称
type = "tcp" # 服务类型
localIP = "172.17.0.1" # 本地IP
localPort = 88 # 本地端口
remotePort = 97 # 远程端口

运行Frp客户端容器

docker-compose up -d

等待拉取镜像,拉取镜像完成,容器运行成功

到此,我们已经通过Frp的将以上的服务暴露到公网供访问。只不过使用IP地址以及端口就可以访问了,例如:NAS的SSH就可以直接连接了。为了更加优雅地,通过域名来访问,我们需要搭建Nginx Proxy Manager。

Nginx Proxy Manager搭建、配置

下面我们来搭建Nginx Proxy Manager,回到香港服务器,登录。

创建NPM目录,并转到此目录。

mkdir -p /www/dk_project/npm
cd /www/dk_project/npm

新建docker-compose.yml文件,输入vi docker-compose.yml。

vi docker-compose.yml

粘贴NPM配置文件内容。

请注意,为了方便,我们使用的是汉化的映像,你可以自行修改为官方的映像。

请确保防火墙,或者安全组放行80、81、443等端口。

version: '3.8'
services:
  npm:
    #image: 'jc21/nginx-proxy-manager:latest' # 官方
    image: 'chishin/nginx-proxy-manager-zh:latest' # 汉化
    restart: unless-stopped
    container_name: 'npm'
    network_mode: bridge
    ports: # 请确定放行以下端口
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt  

运行Nginx Proxy Manager容器

docker compose up -d

下面我们可以通过154.91.177.93端口81来访问Nginx Proxy Manager管理网站。

输入默认用户,admin@example.com,密码changeme来登录。

第一次登录,会要求更改登录信息、密码。

我们这里修改为ln,Email:ln@zlmix.com

密码11111111,保存

注意:我们必须将绑定的域名zlyum.com指向到154.91.177.93

npm.zlyum.com

下面我们继续配置,先把npm.zlyum.com,反向代理到NPM的站点。

点击仪表盘页面,点击代理服务

新建一个代理服务。

域名输入npm.zlyum.com

转发主机/IP输入172.17.0.1,就是docker默认绑定的IP

转发端口输入81,就是NPM容器运行的暴露的管理端口

点击SSL。选择请求一个新的SSL证书,开启强制SSL,输入电子邮箱点击同意,保存。

现在我们就可以通过npm.zlyum.com这个域名来访问Nginx Proxy Manager。

新建一个标签,访问npm.zlyum.com,登录。下一步,我们反向代理配置余下的服务。

点击仪表盘页面,点击代理服务。

新建一个代理服务。

域名输入nas.zlyum.com

转发主机/IP输入172.17.0.1。

转发端口输入95,就是NAS服务内网穿透映射的端口

点击SSL。选择请求一个新的SSL证书,开启强制SSL,输入电子邮箱点击同意,保存。

wordpress.zlyum.com

再新建一个代理服务。

域名输入wordpress.zlyum.com

转发主机/IP输入172.17.0.1。

转发端口输入96,就是NAS服务内网穿透映射的端口

点击SSL。选择请求一个新的SSL证书,开启强制SSL,输入电子邮箱点击同意,保存。

再新建一个代理服务。

域名输入myadmin.zlyum.com

转发主机/IP输入172.17.0.1。

转发端口输入97,就是myadmin服务内网穿透映射的端口

点击SSL。选择请求一个新的SSL证书,开启强制SSL,输入电子邮箱点击同意,保存。

验证效果

可以直接点击上图的链接验证访问效果。


评论