docker部署frp穿透内网

文章目录

(1)部署frps服务器

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

1.创建目录

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

复制代码
mkdir -p /data/frp

cd /data/frp
vim frps.ini

2.编辑配置文件

复制代码
#进入 /data/frp 目录
cd /data/frp

#使用 Vim 编辑器打开 frps.ini 文件
vim frps.ini

配置文件如下:

复制代码
[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 编辑器。

配置内容含义:

复制代码
[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。

3.拉取镜像

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

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

复制代码
docker pull ryaning/frps

4.启动容器

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

复制代码
docker run --restart=always --network host -d -v /data/frp/frps.ini:/etc/frp/frps.ini --name frps ryaning/frps
  • --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.创建目录

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

python 复制代码
mkdir -p /data/frp
cd /data/frp

2.配置文件

复制代码
vim frpc.ini

配置内容

复制代码
[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. [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

4.拉取snowdreamtech/frpc 镜像

复制代码
docker pull snowdreamtech/frpc 

5.启动snowdreamtech/frpc 容器

复制代码
docker run --restart=always --network host -d -v /data/frp/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc 

(3)重启与访问frp

服务端重启

复制代码
docker restart frps

客户端重启

复制代码
docker restart frpc

查看监听服务

重启完成,查看服务器监听的端口(其中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  

尝试访问

浏览器打开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
  • /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

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/

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
  • 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;
        }
    }

模块解释:

  • 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

域名访问

http://chat.joshzhong.top/

http://could.joshzhong.top/

相关推荐
热爱Liunx的丘丘人6 分钟前
Ansible-doc及常用模块
linux·运维·服务器·ansible
tianyuanwo43 分钟前
OS/DevOps程序员切入Harness Engineering的入门与进阶指南
运维·devops·harness
飞飞传输1 小时前
国产化FTP替代方案哪个好?选对平台让传输更安全高效
大数据·运维·安全
一生了无挂1 小时前
自己编译RustDesk,并将自建ID服务器和key信息写入客户端
运维·服务器
王飞飞不会飞1 小时前
Mac 安装Hermes Agent 过程记录
运维·深度学习·机器学习
徐子元竟然被占了!!2 小时前
Nginx
运维·nginx
SPC的存折3 小时前
6、Docker常用配置
运维·docker·容器
图图玩ai3 小时前
SSH 命令管理工具怎么选?从命令收藏到批量执行一次讲清
linux·nginx·docker·ai·程序员·ssh·可视化·gmssh·批量命令执行
星谐4 小时前
AutoUploadLL:自动化上传工具开发实践
运维·自动化
NineData4 小时前
NineData将亮相2026德国汉诺威工业博览会
运维·数据库·后端