Home

Awesome

CFnat-Docker

首先声明,这款软件并非我原创开发,而是目前了解到由 股神CF中转IP 频道 发布的一款实时筛选 Cloudflare 数据中心的软件。我所编写的脚本是在这位开发者的原始版本基础上进行的二次开发

由于该软件尚未开源,接下来我将根据作者的简介,结合我的理解进行说明。若有不当之处,欢迎指正。

CFnat 是一款自动查找并优化 Cloudflare IP 转发的工具,旨在解决泛播 IP 路由不稳定的问题。如果你曾找到过速度不错的 Cloudflare IP,CFnat 能帮助你快速筛选出最佳 IP 并实现端口转发,从而提升网络使用体验。因此,这款工具对于移动、广电网络用户来说尤为明显

CFnat 使用场景也必须是在国内机子长期上运行!必须是在国内机子长期上运行!必须是在国内机子长期上运行!!!

免责声明

CFnat 相关项目仅供教育、研究和安全测试目的而设计和开发。本项目旨在为安全研究人员、学术界人士及技术爱好者提供一个探索和实践网络通信技术的工具。

在下载和使用本项目代码时,使用者必须严格遵守其所适用的法律和规定。使用者有责任确保其行为符合所在地区的法律框架、规章制度及其他相关规定。

使用条款

请记住:本项目的主要目的是促进学习、研究和安全测试。作者不支持或认可任何其他用途。使用者应当在合法和负责任的前提下使用本工具。

使用方法

一键命令

docker run -d --name mycfnat --restart always -p 1234:1234 cmliu/cfnat:latest
docker run -d --name mycfnat --restart always -p 1234:1234 docker.fxxk.dedyn.io/cmliu/cfnat:latest

创建 docker-compose.yml

version: '3'

services:
  cfnat:
    container_name: mycfnat
    image: cmliu/cfnat:latest
    environment:
      - colo=HKG,SJC,LAX  # 筛选数据中心例如 HKG,SJC,LAX.电信/联通 推荐 SJC,LAX.移动/广电 推荐 HKG"
      - delay=300  # 有效延迟(毫秒),超过此延迟将断开连接
      - ips=4  # 指定生成IPv4还是IPv6地址
      - port=443  # 转发的目标端口
      - tls=true  # 是否为 TLS 端口
      - random=true  # 是否随机生成IP,如果为false,则从CIDR中拆分出所有IP
      - ipnum=10  # 提取的有效IP数量
      - num=10  # 目标负载 IP 数量
      - task=100  # 并发请求最大协程数
      - code=200  # HTTP/HTTPS 响应状态码
      - domain=cloudflaremirrors.com/debian # 响应状态码检查的域名地址
    ports:
      - "1234:1234"  # 将主机的 1234 端口映射到容器的 1234 端口
    restart: always

使用案例

docker run -d -e colo="HKG" -e delay=160 -e ips=6 --restart always -p 1234:1234 cmliu/cfnat:latest

docker run -d -e colo="HKG" -e delay=160 -e ips=4 -e port=80 -e tls=false --restart always -p 8080:1234 cmliu/cfnat:latest

docker run -d -e colo="SJC,LAX" -e delay=300 -e ips=4 --restart always -p 1234:1234 cmliu/cfnat:latest

docker run -d \
    -e colo="LAX" \
    -e delay=300 \
    -e ips=4 \
    -e port=80 \
    -e tls=false \
    -e random=true \
    -e ipnum=10 \
    -e num=10 \
    -e task=100 \
    -e code=200 \
    -e domain="cloudflaremirrors.com/debian" \
    --restart always \
    -p 1234:1234 \
    cmliu/cfnat:latest

version: '3'

services:
      cfnat1:
            container_name: cfnathkg443
            image: cmliu/cfnat:latest
            environment:
                  - colo=HKG  # 筛选数据中心例如 HKG,SJC,LAX.电信/联通 推荐 SJC,LAX.移动/广电 推荐 HKG
                  - delay=160  # 有效延迟(毫秒),超过此延迟将断开连接
                  #- ips=4  # 指定生成IPv4还是IPv6地址
                  - port=443  # 转发的目标端口
                  #- tls=true  # 是否为 TLS 端口
                  #- random=true  # 是否随机生成IP,如果为false,则从CIDR中拆分出所有IP
                  #- ipnum=10  # 提取的有效IP数量
                  #- num=10  # 目标负载 IP 数量
                  - task=64  # 并发请求最大协程数
                  #- code=200  # HTTP/HTTPS 响应状态码
                  #- domain=cloudflaremirrors.com/debian # 响应状态码检查的域名地址
            ports:
                  - "443:1234"  # 将主机的 443 端口映射到容器的 1234 端口
            restart: always

      cfnat2:
            container_name: cfnathkg80
            image: cmliu/cfnat:latest
            environment:
                  - colo=HKG  # 筛选数据中心例如 HKG,SJC,LAX.电信/联通 推荐 SJC,LAX.移动/广电 推荐 HKG
                  - delay=160  # 有效延迟(毫秒),超过此延迟将断开连接
                  #- ips=4  # 指定生成IPv4还是IPv6地址
                  - port=80  # 转发的目标端口
                  - tls=false  # 是否为 TLS 端口
                  #- random=true  # 是否随机生成IP,如果为false,则从CIDR中拆分出所有IP
                  #- ipnum=10  # 提取的有效IP数量
                  #- num=10  # 目标负载 IP 数量
                  - task=64  # 并发请求最大协程数
                  #- code=200  # HTTP/HTTPS 响应状态码
                  #- domain=cloudflaremirrors.com/debian # 响应状态码检查的域名地址
            ports:
                  - "80:1234"  # 将主机的 80 端口映射到容器的 1234 端口
            restart: always
      
      cfnat3:
            container_name: mycfnat
            image: cmliu/cfnat:latest
            environment:
                  - colo=SJC,LAX  # 筛选数据中心例如 HKG,SJC,LAX.电信/联通 推荐 SJC,LAX.移动/广电 推荐 HKG
                  - delay=300  # 有效延迟(毫秒),超过此延迟将断开连接
                  #- ips=4  # 指定生成IPv4还是IPv6地址
                  - port=443  # 转发的目标端口
                  #- tls=true  # 是否为 TLS 端口
                  #- random=true  # 是否随机生成IP,如果为false,则从CIDR中拆分出所有IP
                  #- ipnum=10  # 提取的有效IP数量
                  #- num=10  # 目标负载 IP 数量
                  - task=64  # 并发请求最大协程数
                  #- code=200  # HTTP/HTTPS 响应状态码
                  #- domain=cloudflaremirrors.com/debian # 响应状态码检查的域名地址
            ports:
                  - "1234:1234"  # 将主机的 1234 端口映射到容器的 1234 端口
            restart: always

查看日志

# 查看cfnat容器执行日志
docker logs 容器ID
docker logs -f 容器ID    # 实时查看日志

# 查看cfnat容器启动日志
docker exec 容器ID cat cfnat.log

参数说明

  -code int
        HTTP/HTTPS 响应状态码 (default 200)
  -colo string
        数据中心: 筛选数据中心例如 HKG,SJC,LAX (多个数据中心用逗号隔开,留空则忽略匹配)
  -delay int
        有效延迟(毫秒): 超过此延迟将断开连接 (default 300)
  -domain string
        响应状态码检查的域名地址 (default "cloudflaremirrors.com/debian")
  -ipnum int
        有效IP数: 提取的有效IP数量 (default 20)
  -ips string
        转发IP类型: 指定生成IPv4还是IPv6地址 (4或6) (default "4")
  -num int
        负载IP数: 目标负载 IP 数量 (default 10)
  -port int
        转发目标端口 (default 443)
  -random
        是否随机生成IP,如果为false,则从CIDR中拆分出所有IP (default true)
  -tls
        是否为 TLS 端口 (default true)
  -task int
        最大并发请求数: 并发请求最大协程数 (default 100)

致谢

gdfsnhsw股神、ChatGPT