内网穿透系列八:Docker 快速搭建 frp 服务,实现安全稳定的内网穿透服务

一、简介

  • frp是一个由go语言开发的简单、高效的内网穿透工具
  • frp 支持多种代理类型,包括TCP、UDP、HTTP、HTTPS等等,为不同场景需求提供丰富的解决方案
  • 支持流量加密、压缩,身份认证,代理限速,负载均衡等众多能力,同时提供一个代理连接实时流量可视化面板
  • 开源地址参考:https://github.com/fatedier/frp,官方使用文档:https://gofrp.org/zh-cn/docs/
  • 基本架构与工作原理可参考下图:

二、安装与使用

1. 服务端搭建

  • 需要准备一台具有公网IP的服务器
  • 提前安装好Docker、docker-compose软件环境
  • 新建docker-compose.yml配置文件,内容如下:
    services:
      frps:
        image: snowdreamtech/frps:0.63
        container_name: frps
        restart: always
        volumes:
          - ./frps.toml:/etc/frp/frps.toml
        #开启主机网络模式,可以任意使用主机端口,安全起见,也可以注释这个,开启下面的ports配置的主机端口映射,以限制主机端口的使用      
        network_mode: host
        #ports:
            #- "7000:7000"     # 服务端通信端口
            #- "8080:8080"     # HTTP 端口,
            #- "7500:7500"     # Dashboard 端口
            #- "6000-6100:6000-6100"     # 额外增加的端口,供其他tcp/udp等协议使用
  • 在docker-compose.yml同目录下,再新建frp服务端的配置文件frps.toml,配置如下:
    # 客户端连接服务端的端口
    bindPort = 7000
    # 客户端连接校验密码,部署时需要自行改成复杂的密码
    auth.token = "P<#.nF_R"
    # 开启web服务的端口,客户端反代http服务时,需要使用这个端口,然后根据客户端绑定的域名来进行区分
    vhostHTTPPort = 8080
    # 默认为 127.0.0.1,如果需要公网访问,需要修改为 0.0.0.0。
    webServer.addr = "0.0.0.0"
    # dashboard页面端口
    webServer.port = 7500
    # dashboard 用户名密码,可选,默认为空,部署时需要自行改成复杂的登录信息
    webServer.user = "admin"
    webServer.password = "123456"
    # 表示 server 端只接受 TLS 连接的客户端,新版本默认就是开启的,开启后,会自动使用自签证书或自定义配置的证书进行通信流量加密
    transport.tls.force = true
  • 一键启动frp服务端
    docker-compose up -d

2. 客户端搭建

  • 同样需要Docker环境,新建docker-compose.yml配置文件,内容如下:
    services:
      frpc:
        image: snowdreamtech/frpc:0.63
        container_name: frpc
        restart: always
        volumes:
          - ./frpc.toml:/etc/frp/frpc.toml
  • 需要新建frp客户端配置文件frpc.toml,配置如下:
    #这里连接服务端的配置
    serverAddr = "你的公网IP或者域名"
    serverPort = 7000
    auth.token = "P<#.nF_R"
    #http服务穿透1,如果域名已经指向公网服务器,可以配置域名访问,如下可访问:http://npm.vds.luxi.free.hr:8080/
    [[proxies]]
    name = "web_test1"
    type = "http"
    localIp = "172.17.0.1"
    localPort = 9000
    customDomains = ["npm.vds.luxi.free.hr"]
    #http/tcp服务穿透2,可以自定义公网端口,如下配置可以访问:http://公网ip:9999/
    [[proxies]]
    name = "web_test2"
    type = "tcp"
    localIP = "172.17.0.1"
    localPort = 9000
    remotePort = 9999
    #mysql服务穿透示例,可以连接公网6033端口访问内网中mysql服务
    [[proxies]]
    name = "mysql_test"
    type = "tcp"
    localIP = "172.17.0.1"
    localPort = 3306
    remotePort = 6033
  • 一键启动frp客户端
    docker-compose up -d

3. C/S都部署完之后,就可以通过公网访问内网中的服务

  • 如上客户端配置,访问内网中 portainer 服务,成功访问如下

  • 如上客户端配置,访问内网中的 mysql 服务,成功访问如下

  • 访问frp提供的可视化流量面板
    需要授权登录,输入服务端配置文件中配置的账号密码即可

    正在运行的代理服务

三、总结

  • frp是一款比较流行的内网穿透工具,玩法较多,适应各种内网穿透场景,性能不错
  • 没有提供可视化的管理界面,每次增加内网服务代理都需要手动编辑客户端配置,并且重启客户端服务,使用者需要有一定的开发运维能力
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容