对于个人及家庭用户来说,在家中放置服务器 / 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](https://blog.ensonyan.com/wp-content/uploads/2024/07/Docker-Create-Network-macvlan-1024x350.png)
第二步: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](https://blog.ensonyan.com/wp-content/uploads/2024/07/Docker-Create-Network-IPv4-Configuration.png)
第三步:创建 CloudFlare Tunnel 容器。选择左侧边栏 Containers,点击右上角 Add Container。容器名称自定,Image 输入 cloudflare/cloudflared。
![Docker - Create Container - 1](https://blog.ensonyan.com/wp-content/uploads/2024/07/Docker-Create-Container-1.png)
移动到页面底部,选择 Network 标签,在 Network 下拉框中选择刚才创建的网络接口。此处笔者 Enson 的网络接口名为 macvlan-eth1。随后,在 IPv4 Address 中输入你期望的 IP。需要注意的是,该 IP 必须在第二步设定的 IP Range 之中,否则有概率导致 IP 冲突。
![Docker - Create Container - 2](https://blog.ensonyan.com/wp-content/uploads/2024/07/Docker-Create-Container-2.png)
第四步:选择 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](https://blog.ensonyan.com/wp-content/uploads/2024/07/Docker-Create-Container-3.png)
第五步:到这一步,CloudFlare Tunnel 已经开始正常运行,且使用的 IP 与这台服务器的物理接口不同。为了让其施行海外全局代理的效果,需在路由器中进行设置。笔者 Enson 使用的案例为 OpenWrt + 某 PW 插件,完成设置后重启 cloudflared 容器即可。
![OpenWrt - Set bypass rule for cloudflared](https://blog.ensonyan.com/wp-content/uploads/2024/07/OpenWrt-Set-bypass-rule-for-cloudflared.png)
Enson’s Blog 感谢您阅读本文。请注意:这篇文章不是越过网络审查系统的教程,它仅能在合理范围内优化合法网站的访问速度。
发表回复