Skip to content

Latest commit

 

History

History
 
 

natter-docker

Natter & Docker

在 Docker 中使用 Natter ,将 Fullcone NAT (NAT 1) 中的 TCP / UDP 端口,打洞暴露至公网上。

准备工作

  1. 与公网 IP 操作相同,将外部流量全部转发至内网服务器上,下方为参考步骤:

    • 设置光猫为桥接模式;
    • 设置路由器「DMZ 主机」为内网服务器 IP 地址。

    拓扑参考:

    服务器 (Natter) <---DMZ 主机---> 路由器 <---桥接---> 光猫 <---运营商 NAT---> 互联网
    

    设置完成后,您可以在服务器上运行 NatterCheck 检查 NAT 类型是否满足要求。

  2. 在服务器上安装 Docker ,下方使用 清华大学开源软件镜像站 作为参考:

    export DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce"
    curl -fsSL https://get.docker.com/ | sudo -E sh

    需要注意,Natter 只能在 Linux 主机上的 Docker 内工作,而 Docker Desktop for Mac、Docker Desktop for Windows 等不被支持,因为它们不能使用 Host 网络。非 Linux 用户,请在主机上安装 Python 使用 Natter。

使用 Natter

运行 Natter ,默认会开启 HTTP 测试模式:

docker run --net=host nattertool/natter

使用内置转发,对外开放本机 80 端口:

docker run --net=host nattertool/natter -p 80

使用 iptables 内核转发(需要额外权限),对外开放本机 80 端口:

docker run \
    --net=host \
    --cap-add=NET_ADMIN \
    --cap-add=NET_RAW \ 
    nattertool/natter -m iptables -p 80

查询命令行相关帮助:

docker run --rm --net=host nattertool/natter --help

有关详细参数用法,参见 参数说明

选择不同的 Tag

使用默认的 latest Tag 就可以满足绝大多数需求。以下是全部种类:

  • nattertool/natter:debian (等同于 latest。基于 Debian 系统)
  • nattertool/natter:alpine (基于 Alpine Linux 系统)
  • nattertool/natter:openwrt (基于 OpenWrt 系统)
  • nattertool/natter:minimal (不推荐。基于 OpenWrt 系统。最小体积,只能使用最基本的功能)

目前仅支持 AMD64(又称 x86_64, x64)和 ARM64(又称 AArch64, ARMv8)两种架构。

与其他 Docker 服务结合使用

Natter 可以和众多的 Docker 服务结合使用。本仓库提供了一些用例,可供您参考编写。

Web 服务器

本仓库提供了以下用例,作为最基础的用法参考:

BT 类程序

BT 类程序的特点是,需要向 Tracker 宣告自己的端口号。
本仓库提供了以下两种用例,可以开箱即用:

使用 SRV 记录的程序

利用更改 DNS 的 SRV 记录应对随时可能变化的外部端口号。
本仓库提供了以下用例,需要填写您的 CloudFlare API 令牌:

使用 HTTP 跳转服务

利用 HTTP 跳转,实时跳转到当前的外部端口的 HTTP 服务。
本仓库提供了以下用例,需要填写您的 CloudFlare API 令牌:

使用订阅服务

利用订阅服务,及时更新外部 IP 和端口号,使用代理工具回家。
订阅服务本身由 HTTP 跳转实现。
本仓库提供了以下用例,需要填写您的 CloudFlare API 令牌: