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/

相关推荐
荒Huang23 分钟前
Linux挖矿病毒(kswapd0进程使cpu爆满)
linux·运维·服务器
海阔天空_201333 分钟前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
桥田智能36 分钟前
气爪在自动化装配线中是如何应用的?
运维·自动化
MonkeyKing_sunyuhua38 分钟前
ubuntu22.04 docker-compose安装postgresql数据库
数据库·docker·postgresql
追风林1 小时前
mac m1 docker本地部署canal 监听mysql的binglog日志
java·docker·mac
€☞扫地僧☜€2 小时前
docker 拉取MySQL8.0镜像以及安装
运维·数据库·docker·容器
茶馆大橘2 小时前
微服务系列六:分布式事务与seata
分布式·docker·微服务·nacos·seata·springcloud
其乐无涯2 小时前
服务器技术(一)--Linux基础入门
linux·运维·服务器
Diamond技术流2 小时前
从0开始学习Linux——网络配置
linux·运维·网络·学习·安全·centos
写bug的小屁孩2 小时前
前后端交互接口(三)
运维·服务器·数据库·windows·用户界面·qt6.3