内网穿透(docker部署frp)

本文详细介绍了内网穿透的概念,常见的实现方法,以及frp(FatedierReverseProxy)这款工具的原理、frps服务端和frpc客户端的部署配置,包括通过docker和docker-compose进行部署的步骤。
摘要由CSDN通过智能技术生成

内网穿透

内网穿透是指在内部网络(内网)中实现穿透外网(公网)的通信。内网通常是指公司、组织或家庭等内部网络,而外网则是指互联网,也就是公共网络。内网穿透的目的是让位于内网中的设备或应用程序能够访问外部网络中的资源,实现内外网的通信。

实现内网穿透的常见方法

实现内网穿透的方法有很多,以下是一些常见的内网穿透技术:

  1. 虚拟专用网络(VPN):通过建立VPN连接,可以让位于内网的设备访问外网的资源,但这种方法相对复杂,需要配置和管理VPN服务器。
  2. 代理服务器:通过在内外网之间设置代理服务器,可以让位于内网的设备通过代理服务器访问外网资源。这种方法简单易用,但可能会导致网络延迟和数据传输速度变慢。
  3. 端口映射:通过在内外网之间映射特定的端口,可以让位于内网的设备访问外网的资源。这种方法简单易用,但需要关心端口映射的安全问题。
  4. 负载均衡:通过在内外网之间设置负载均衡器,可以将内外网的流量分发到多个服务器上,从而实现内外网的通信。这种方法适用于大型企业和高性能场景,但需要部署和维护负载均衡器。
  5. 隧道技术:通过在内外网之间建立隧道,可以让位于内网的设备访问外网的资源。这种方法类似于VPN,但更加简洁易用。

frp

frp是一款免费开源的专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS、Websocket、P2P 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

frp的实现原理

frp是基于C/S模式实现的内网穿透服务代理应用,通过在公网IP上部署服务器端应用,客户端部署在内网上。当访问服务端暴露的应用时,反向代理到内网的服务实现内网穿透的代理。

frps服务端应用部署

在frp中,分为客户端frpc和服务端fprs,frp应用支持以toml配置文件的方式和参数的方式进行服务部署。frp应用通过-c参数指定配置文件进行读取

frps -c frps.toml
frpc -c frpc.toml

配置文件部署

在部署frps时,需要指定绑定端口用于接收客户端连接,默认情况下绑定端口为7000,当需要修改用于客户端连接的端口时,可以修改此配置。在配置文件中通过bindPort参数进行配置

# frps.toml
bindPort = 7000

通过docker compose部署

version: '3.9'
services:
  frps:
    image: fatedier/frps:v0.53.2
    hostname: frps
    container_name: frps
    volumes:
      - "./frps.toml:/frps.toml"
    command:
      - "-c"
      - "/frps.toml"
    ports:
      - "7000:7000"

参数配置

同样的,frp也支持在启动时直接以参数的方式进行服务部署,通过--bind_port可以设置frps的绑定端口

frps --bind_port 7000

通过docker compose部署

version: '3.9'
services:
  frps:
    image: fatedier/frps:v0.53.2
    hostname: frps
    container_name: frps
    command:
      - "--bind_port"
      - "7000"
    ports:
      - "7000:7000"

frpc客户端部署

frpc客户端中,主要配置为

  • 配置frps连接信息
  • 配置内网应用

frpc中需要配置的内容相对较多,推荐以文件的方式进行配置,以下是frpc.toml的简单示例

# 服务端地址
serverAddr = "x.x.x.x"
# 服务端配置的bindPort
serverPort = 7000

[[proxies]]
# 代理应用名称,根据自己需要进行配置
name = "ssh"
# 代理类型
type = "tcp"
# 客户端代理应用IP
localIP = "127.0.0.1"
# 客户端代理应用端口
localPort = 8080
# 服务端反向代理端口
remotePort = 7001

如上述示例所示,为客户端frpc代理配置,通过tcp协议的方式将本地8080端口服务代理到serverAddr:7001上,代理后,可以通过serverAddr:7001直接在公网上访问到本地服务。

通过docker compose部署frpc应用:

version: '3.9'
services:
  frpc:
    image: fatedier/frpc:v0.53.2
    hostname: frpc
    container_name: frpc
    volumes:
      - "./frpc.toml:/frpc.toml"
    command:
      - "-c"
      - "/frpc.toml"
    network_mode: "host"
  • fatedier/frpc镜像在启动时,直接运行frpc命令,frpc命令到默认配置文件默认参数为./frpc.ini文件,所以必须要挂载配置文件到容器内,否则无法直接启动frpc服务
  • 通过frpc进行内网穿透,frpc需要可以直接访问到需要内网穿透代理到应用,所以采用network_mode: host参数将frpc服务到网络设置为宿主机网络,否则容器内无法直接访问宿主机上的应用,网络根据代理应用进行配置
    • 由于docker是基于Linux内核开发的,在Mac、Windows系统上对Docker应用本质是通过虚拟机运行对,所以network_mode: host对应的网络为虚拟机网络,而不是宿主机网络,所以该参数在Mac、Windows系统上不受支持,可以考虑直接以应用的方式在以上系统部署
  • 部署后,内网服务的公网访问方式为serverAddr:remotePortbindPort仅用于frp交互使用,所以在上面的frps通过docker方式中,需要将内网对应的remotePort和宿主机关联配置好
    • 在部署frps指定ports时可以考虑给定范围的方式进行部署

更多frp部署应用方式请参考frp 官方文档

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker是一种容器化技术,可以将应用程序及其依赖项打包到一个独立的、可移植的容器中,然后在任何支持Docker的环境中运行。FRP是一种用于内网穿透的工具,可以将内网服务暴露给外网访问。 要在Docker部署FRP,可以按照以下步骤进行操作: 1. 首先,创建一个用于存放FRP配置文件的目录,例如`/path/to/config`。 2. 在该目录下创建一个名为`frps.ini`的配置文件,并按照FRP的配置规则进行配置。例如,可以指定监听端口、认证方式、代理设置等。 3. 创建一个名为`Dockerfile`的文件,并在其中编写Docker镜像的构建指令。以下是一个示例的`Dockerfile`内容: ``` FROM alpine:latest LABEL maintainer="Your Name <your_email@example.com>" # 安装FRP RUN apk add --no-cache wget RUN wget -O /tmp/frp.tar.gz https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64.tar.gz RUN tar -xzf /tmp/frp.tar.gz -C /tmp && mv /tmp/frp_0.37.1_linux_amd64 /frp # 复制配置文件 COPY frps.ini /frp/frps.ini # 暴露FRP端口 EXPOSE 7000 # 启动FRP CMD ["/frp/frps", "-c", "/frp/frps.ini"] ``` 4. 构建Docker镜像。在终端中进入`Dockerfile`所在的目录,执行以下命令: ``` docker build -t frps . ``` 其中,`frps`是镜像的名称,可以根据需要进行修改。 5. 运行Docker容器。执行以下命令: ``` docker run -d -p 7000:7000 --name frps-container frps ``` 其中,`7000:7000`表示将容器的7000端口映射到主机的7000端口,`frps-container`是容器的名称,可以根据需要进行修改。 现在,FRP已经在Docker中成功部署并运行了。你可以通过访问主机的7000端口来访问FRP服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北溪入江流

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值