为 Docker CloudFlare Tunnel 隧道设置独立 IP 从而进行分流

对于个人及家庭用户来说,在家中放置服务器 / NAS 运行服务是较为方便的选择,无惧高昂的托管及流量费用,能够完全实现硬件的自主可控,且通过这种方式实现的外网访问不会违反家用宽带不可搭建公网 Web 服务的运营商 TOS 条款。实现公网访问家中网络的一种方案是使用 CloudFlare Tunnel (cloudflared),其通过 CloudFlare 网络访问家中内网,与内网穿透无异,可以理解为 FRP。然而,包括合法服务在内,从大陆境内直连境外 IP 的访问速度较为缓慢,且通常丢包严重,会影响 CloudFlare Tunnel 的稳定性。如果你拥有一台线路较好的 VPS,则可以通过 Enson’s Blog 提供的如下方法进行速度优化。

为了解决上述问题,最方便的方式是,令路由器的海外访问策略改为全局,但这会严重影响境内网站的访问速度。如果将运行 CloudFlare Tunnel 的这台物理服务器海外访问策略改为全局,则会影响该服务器上其他服务的访问速度。而物理服务器上运行的 CloudFlare Tunnel Cli 无法单独设置绑定当前服务器的指定网卡。因此有了如下解决方法:使用 Docker CloudFlare Tunnel (cloudflared),创建一张 macvlan 虚拟 Docker 网络接口,获得一个独立于物理服务器的 IP,让容器与之相绑定。完成后在路由器上单独设置 macvlan 网络接口的海外 IP 直连策略。

本文章使用 Portainer 进行 Docker 配置。

具体实现方法如下:

第一步: 左侧边栏中选择 Networks,点击右上角 Add Network,网卡名称自定,Driver 下拉列表中选择 “macvlan”。

    Docker - Create Network - macvlan
    Docker – Create Network – macvlan

    第二步:IP 相关设定。Parent Network Card 定义了虚拟网卡的父级物理网卡。在笔者 Enson 的这篇演示中,绑定的物理网卡为 eth1。Subnet 在此处定义为局域网中可使用的子网,此处 Enson 的局域网范围为 CIDR 192.168.0.0/16,子网掩码 255.255.0.0,即 192.168.0.0 – 192.168.255.255 区间,网关为 192.168.1.1,可供 Docker 使用的局域网网段为 192.168.2.0 – 192.168.2.255 (笔者将此局域网段设为禁用 DHCP,在实践中请遵循类似规则,防止 IP 冲突)。请参考上述配置,根据自己所处网络环境进行修改。其余部分保持默认即可,点击 Create the network 完成网络接口的创建。

    Docker - Create Network - IPv4 Configuration
    Docker – Create Network – IPv4 Configuration

    第三步:创建 CloudFlare Tunnel 容器。选择左侧边栏 Containers,点击右上角 Add Container。容器名称自定,Image 输入 cloudflare/cloudflared

    Docker - Create Container - 1
    Docker – Create Container – 1

    移动到页面底部,选择 Network 标签,在 Network 下拉框中选择刚才创建的网络接口。此处笔者 Enson 的网络接口名为 macvlan-eth1。随后,在 IPv4 Address 中输入你期望的 IP。需要注意的是,该 IP 必须在第二步设定的 IP Range 之中,否则有概率导致 IP 冲突。

    Docker - Create Container - 2
    Docker – Create Container – 2

    第四步:选择 Command & logging 标签,Command 右侧选择 Override,输入 tunnel –no-autoupdate run –token <这里输入你的 CloudFlare Tunnel Token,可从 https://one.dash.cloudflare.com 获取,创建隧道时会显示>。如果需要自动更新,则去除 <–no-autoupdate>。完成后点击 Deploy the container。

    Docker - Create Container - 3
    Docker – Create Container – 3

    第五步:到这一步,CloudFlare Tunnel 已经开始正常运行,且使用的 IP 与这台服务器的物理接口不同。为了让其施行海外全局代理的效果,需在路由器中进行设置。笔者 Enson 使用的案例为 OpenWrt + 某 PW 插件,完成设置后重启 cloudflared 容器即可。

    OpenWrt - Set bypass rule for cloudflared
    OpenWrt – Set bypass rule for cloudflared

    Enson’s Blog 感谢您阅读本文。请注意:这篇文章不是越过网络审查系统的教程,它仅能在合理范围内优化合法网站的访问速度。

    本站所有内容,未经授权严禁转载。
    Unauthorized reproduction of any content is strictly prohibited.

    EnsonYan

    文章作者

    目前正在加拿大攻读游戏设计相关学位。IT / 摄影 / 汽车爱好者

    发表回复

    textsms
    account_circle
    email

    为 Docker CloudFlare Tunnel 隧道设置独立 IP 从而进行分流
    对于个人及家庭用户来说,在家中放置服务器 / NAS 运行服务是较为方便的选择,无惧高昂的托管及流量费用,能够完全实现硬件的自主可控,且通过这种方式实现的外网访问不会违反家用宽带不…
    扫描二维码继续阅读
    2024-07-24