• docker部署frp穿透内网


    (1)部署frps服务器

    docker安装参考文档:docker基本知识

    1.创建目录

    创建目录,用于存放容器持久化存储卷

    mkdir -p /data/frp
    
    cd /data/frp
    vim frps.ini
    
    • 1
    • 2
    • 3
    • 4

    2.编辑配置文件

    #进入 /data/frp 目录
    cd /data/frp
    
    #使用 Vim 编辑器打开 frps.ini 文件
    vim frps.ini
    
    • 1
    • 2
    • 3
    • 4
    • 5

    配置文件如下:

    [common]
    bind_addr = 0.0.0.0
    bind_port = 7000
    dashboard_port = 7001
    
    vhost_http_port = 10080
    vhost_https_port = 10443
     
    token = abcd12345
    dashboard_user = admin11
    dashboard_pwd = admin11
    
    #需要穿透的内网服务1
    [could]
    type = tcp
    local_ip = 192.168.31.100
    local_port = 5000
    remote_port = 5000
    
    #需要穿透的内网服务2
    [chat]
    type = tcp
    local_ip = 192.168.31.223
    local_port = 3000
    remote_port = 3000
    
    
    ....
    此处省略若干个服务器
    
    你可以根据自己的需求修改这个配置文件,添加或修改代理规则,然后保存退出 Vim 编辑器。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    配置内容含义:

    [common]:通用配置部分,用于设置 frp 服务器的基本参数。
    
    bind_addr:绑定的 IP 地址,这里设置为 0.0.0.0,表示监听所有的网络接口。
    bind_port:服务绑定的端口号,这里设置为 7000。
    dashboard_port:frp 仪表盘的端口号,这里设置为 7001。
    vhost_http_port:虚拟主机 HTTP 端口号,这里设置为 10080。
    vhost_https_port:虚拟主机 HTTPS 端口号,这里设置为 10443。
    token:访问 frp 服务器的令牌,这里设置为 abcd12345
    dashboard_user:frp 仪表盘的用户名,这里设置为 admin11。
    dashboard_pwd:frp 仪表盘的密码,这里设置为 admin11。
    
    
    [could] 和 [chat]:代理规则部分,用于定义具体的代理规则。
    type:代理类型,这里设置为 tcp,表示 TCP 代理。
    local_ip:本地 IP 地址,这里设置为 192.168.31.100和192.168.31.223。
    local_port:本地端口号,这里设置为 5000 和 3000。
    remote_port:远程端口号,这里设置为 5000 和 3000。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    3.拉取镜像

    拉取和启动一个名为 “frps” 的 Docker 镜像。这个镜像是由 “ryaning/frps” 提供的,它是一个用于部署 frp 服务器的镜像

    通过命令 docker pull ryaning/frps 是用于从 Docker Hub 上拉取 “ryaning/frps” 镜像到本地。

    docker pull ryaning/frps
    
    • 1

    4.启动容器

    通过命令 docker run 启动一个容器。这个容器使用了一些参数:

    docker run --restart=always --network host -d -v /data/frp/frps.ini:/etc/frp/frps.ini --name frps ryaning/frps
    
    • 1
    • --restart=always 表示容器将会在退出时自动重启。
    • --network host 表示容器使用宿主机的网络命名空间,与宿主机共享网络栈,使得容器中的应用可以直接使用宿主机的网络接口。
    • -d 表示容器以后台模式运行。
    • -v /data/frp/frps.ini:/etc/frp/frps.ini 表示将宿主机上的 /data/frp/frps.ini 文件挂载到容器中的 /etc/frp/frps.ini 文件,这样可以在容器中使用自定义的配置文件。
    • --name frps 表示给容器指定一个名称为 “frps”。

    当容器启动后,frp 服务器就会在容器中运行,使用挂载的配置文件进行配置。

    5.安全组配置

    在云服务器的安全组中,如果你想要允许入方向的连接到特定的端口,需要开放相应的端口。

    以下是一般的步骤:

    • 登录云服务提供商的管理控制台

    • 导航到安全组配置页面

    • 找到服务器实例所使用的安全组,并编辑该安全组的规则。

    • 添加一个新的入方向规则,指定协议(如 TCP 或 UDP)和端口号。
      根据需求,可以选择指定来源 IP 地址范围或来源安全组。
      保存规则并应用更改。

    • 具体的步骤和界面可能因云服务提供商而有所不同。你可以参考云服务提供商的文档或向他们的支持团队寻求帮助,以获取更详细的指导。

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    (2)部署frpc客户端

    1.创建目录

    创建目录,用于存放容器持久化存储卷

    mkdir -p /data/frp
    cd /data/frp
    
    • 1
    • 2

    2.配置文件

    vim frpc.ini
    
    • 1

    配置内容

    [common]
    server_addr = 120.78.156.217
    server_port = 7000
    token = abcd12345
    
    
    [could]
    type = tcp
    local_ip = 192.168.31.100
    local_port = 5000
    remote_port = 5000
    
    
    
    [chat]
    type = tcp
    local_ip = 192.168.31.223
    local_port = 3000
    remote_port = 3000
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    配置文件内容含义:

    1. [common] 部分定义了 frpc 的常规配置,包括 server_addrserver_porttoken。请确保这些值是正确的,并与 frps 服务器的配置相匹配。
    2. [could] 部分定义了一个名为 could 的隧道,其类型为 tcp。该隧道将本地的 192.168.31.100:5000 映射到远程的 5000 端口。请确保本地和远程的 IP 和端口设置正确。
    3. [chat] 部分定义了一个名为 chat 的隧道,其类型也是 tcp。该隧道将本地的 192.168.31.223:3000 映射到远程的 3000 端口。同样,请确保 IP 和端口设置正确。

    3.查看frpc docker镜像

    docker search frpc
    
    • 1

    4.拉取snowdreamtech/frpc 镜像

    docker pull snowdreamtech/frpc 
    
    • 1

    5.启动snowdreamtech/frpc 容器

    docker run --restart=always --network host -d -v /data/frp/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc 
    
    • 1

    (3)重启与访问frp

    服务端重启

    docker restart frps
    
    • 1

    客户端重启

    docker restart frpc
    
    • 1

    查看监听服务

    重启完成,查看服务器监听的端口(其中5000和3000端口是我们想要的)

    [root@josh-clound frp]# netstat -tnlp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1081/sshd           
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1020/master         
    tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      550/rpcbind         
    tcp6       0      0 :::3000                 :::*                    LISTEN      5268/frps           
    tcp6       0      0 :::7000                 :::*                    LISTEN      5268/frps           
    tcp6       0      0 :::7001                 :::*                    LISTEN      5268/frps           
    tcp6       0      0 ::1:25                  :::*                    LISTEN      1020/master         
    tcp6       0      0 :::10080                :::*                    LISTEN      5268/frps           
    tcp6       0      0 :::5000                 :::*                    LISTEN      5268/frps           
    tcp6       0      0 :::10443                :::*                    LISTEN      5268/frps           
    tcp6       0      0 :::111                  :::*                    LISTEN      550/rpcbind         
    tcp6       0      0 :::80                   :::*                    LISTEN      5786/docker-proxy  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    尝试访问

    浏览器打开http://服务器IP:3000/进行访问

    在这里插入图片描述

    http://服务器IP:5000/ 进行访问

    在这里插入图片描述

    (4)配置nginx反向代理

    通过IP+ 端口的访问方式,实现了,那么我不想记IP,那么就通过域名方式进行访问。

    docker安装nginx

    1.创建挂载目录

    用于将宿主机上的目录 /usr/local/nginx 与容器内的目录进行挂载。

    mkdir -p /usr/local/nginx/conf
    mkdir -p /usr/local/nginx/log
    mkdir -p /usr/local/nginx/html
    
    • 1
    • 2
    • 3
    • /usr/local/nginx/conf:用于存放 Nginx 的配置文件。
    • /usr/local/nginx/log:用于存放 Nginx 的日志文件。
    • /usr/local/nginx/html:用于存放 Nginx 的静态网页文件。

    2.创建临时用容器

    docker run --name nginx -p 9001:80 -d nginx
    
    • 1

    3.复制临时容器的配置到宿主机

    # 将容器nginx.conf文件复制到宿主机
    docker cp nginx:/etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf
    # 将容器conf.d文件夹下内容复制到宿主机
    docker cp nginx:/etc/nginx/conf.d /usr/local/nginx/conf/conf.d
    # 将容器中的html文件夹复制到宿主机
    docker cp nginx:/usr/share/nginx/html /usr/local/nginx/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4.创建Nginx容器

    docker run \
    -p 80:80 \
    --name nginx \
    -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d \
    -v /usr/local/nginx/log:/var/log/nginx \
    -v /usr/local/nginx/html:/usr/share/nginx/html \
    -d nginx:latest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • docker run:用于创建并运行一个新的容器。
    • -p 80:80:将容器的 80 端口映射到宿主机的 80 端口,这样可以通过宿主机的 IP 地址或域名访问 Nginx 服务器。
    • --name nginx:指定容器的名称为 nginx
    • -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:将宿主机上的 /usr/local/nginx/conf/nginx.conf 文件挂载到容器内的 /etc/nginx/nginx.conf 文件,用于配置 Nginx。
    • -v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d:将宿主机上的 /usr/local/nginx/conf/conf.d 目录挂载到容器内的 /etc/nginx/conf.d 目录,用于存放 Nginx 的额外配置文件。
    • -v /usr/local/nginx/log:/var/log/nginx:将宿主机上的 /usr/local/nginx/log 目录挂载到容器内的 /var/log/nginx 目录,用于存放 Nginx 的日志文件。
    • -v /usr/local/nginx/html:/usr/share/nginx/html:将宿主机上的 /usr/local/nginx/html 目录挂载到容器内的 /usr/share/nginx/html 目录,用于存放 Nginx 的静态网页文件。
    • -d nginx:latest:使用 nginx:latest 镜像创建容器,并在后台运行。

    5.编辑nginx.conf配置文件

    在http模块中添加两个server,分别用于处理两个不同的域名:chat.joshzhong.topcould.joshzhong.top

     #第一个服务器块用于处理 chat.joshzhong.top 域名的请求,配置如下:
     
     server {
            listen       80;
            server_name  chat.joshzhong.top;
    
    
            location / {
                proxy_pass http://127.0.0.1:3000;
            }
    
        }
     
     #第二个服务器块用于处理 could.joshzhong.top 域名的请求,配置如下:
    
        server {
            listen       80;
            server_name  could.joshzhong.top;
    
    
            location / {
                proxy_pass http://127.0.0.1:5000;
            }
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    模块解释:

    • listen 80;:监听 80 端口,表示该服务器块将处理来自该端口的请求。
    • server_name chat.joshzhong.top;:指定该服务器块处理的域名为 chat.joshzhong.top。(could.joshzhong.top同上)
    • location /:匹配所有请求路径。
    • proxy_pass http://127.0.0.1:3000;:将请求代理转发到本地的 http://127.0.0.1:3000 地址,这意味着所有来自 chat.joshzhong.top 域名的请求都将被转发到本地的 3000 端口。(5000端口也是如此)

    当有请求访问 chat.joshzhong.top 域名时,Nginx 将代理转发到本地的 3000 端口;当有请求访问 could.joshzhong.top 域名时,Nginx 将代理转发到本地的 5000 端口

    重载nginx

    #重启即可,就不进docker容器reload了
    docker restart nginx
    
    • 1
    • 2

    域名访问

    http://chat.joshzhong.top/
    在这里插入图片描述

    http://could.joshzhong.top/

    在这里插入图片描述

  • 相关阅读:
    python之requests的高级用法
    uni-app 使用vscode开发uni-app
    Hadoop(三)通过C#/python实现Hadoop MapReduce
    微信小程序之个人中心授权登录
    国标28181-2022/GB28181-2022国标检测
    你的支付环境是否安全?
    TypeScript 笔记:String 字符串
    Linux防火墙:Firewalld 常用命令
    一、Linux下常用的压缩格式
    排序算法 —— 希尔排序(图文超详细)
  • 原文地址:https://blog.csdn.net/qq_39689711/article/details/134756767