收起左侧

飞牛OS实现Docker国内外线路分离与Fake-IP 网络环境下容器无法联网的设置分享

2
回复
379
查看
[ 复制链接 ]

2

主题

1

回帖

0

牛值

fnOS系统内测组

2025-4-1 15:11:48 显示全部楼层 阅读模式

整理时间:2025年4月1日

一、背景

对于需要多线路管理的用户,将Docker容器按需分配到国内外线路可提升效率并节省流量。例如,百度网盘、迅雷/P2P 下载等国内服务直连本地网关;而部分容器需通过软路由访问国际资源。本文基于飞牛OS系统,分享如何通过自定义Docker网络实现线路分离,并解决Fake-IP 网络环境下容器DNS错误导致的断网问题。

本教程最适合于已经将飞牛 OS 的网关和 DNS 指向软路由的用户。


二、环境准备

  • 系统版本:飞牛OS(Docker服务已启用)

  • 网络拓扑

    • 主路由:本地网关(如 192.168.1.1
    • 软路由:国际线路网关(如 192.168.1.210
  • 工具需求:SSH访问权限或终端工具


三、实现思路:

  1. 默认将飞牛 OS 宿主机网关和 DNS 指向软路由(简略);
  2. 新建 macvlan 网络实现容器网络定向指向硬路由,不经过软路由;
  3. 再配置容器 DNS 映射修复联网问题。

(本文的重点在2和3,理论上环境反过来也可以,但笔者习惯使用的官方 docker 源需要代/理,且下载容器通过 macvlan 而非bridge 直接指向硬路由会有更好的性能。)

四、实现步骤

1. 将飞牛 OS 宿主机网关和 DNS 指向软路由(简略)

在飞牛 OS 操作界面,打开系统设置--网络设置--网口编辑,手动设置地址并将网关地址设置为软路由地址,这里是 192.168.1.210 ,DNS 根据你的软路由情况设置,我使用的是 Fake-IP,这里设置为 198.18.0.2

这一步一般来说为了宿主机能够连接外网,是你早就根据其他需求提前设置好的。如对设置不懂或没有外网连接需求也没必要这么设置,也不用往下看了。软路由相关设置不做分享。

2、新建 macvlan 网络实现容器网络定向指向硬路由,不经过软路由

通过 SSH 工具连接飞牛,输入以下命令查看和确认已经存在的docker网络:

docker network ls

创建 macvlan

通过第1步的网络设置查看网口名称,我这里是 enp1s0

docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 --ipv6 --subnet=fd00::/64 -o parent=enp1s0 china

解释:Docker Network 创建一个 macvlan 接口,v4子网地址 192.168.1.0/24,v6子网地址 fd00::/64 ,网关地址 192.168.1.1 ,网络接口 enp1s0 macvlan ,接口名称 china。

创建容器时,选择 bridge 对应国外网络环境 ,选择 China 对应国内网络环境,需要注意的是由于目前飞牛 OS 不支持界面配置 macvlan 下容器的 IP 地址,所以需要通过 SSH 创建容器。

3、配置容器 DNS 映射修复联网问题

软路由为 Fake-IP 网络环境可能会因为 DNS 导致网络类型为 china 的容器无法访问互联网。在任意目录,比如 /vol1/1000/myappdata/network/resolv.conf 里新建一个文本文件 resolv.conf,内容为 nameserver 223.5.5.5

之后在容器中映射路径容器路径: /etc/resolv.conf 到主机路径: /vol1/1000/myappdata/network/resolv.conf 即可。

五、举例说明-迅雷

通过 SSH 工具连接飞牛,输入以下命令创建迅雷 docker,实现通过 macvlan 网络,不经过宿主机 bridge 网桥,直连国内网络:

docker run -d \
  --name xunlei \
  --network china \
  --ip 192.168.1.20 \
  --privileged \
  -v /vol1/1000/myappdata/xunlei:/xunlei/data \
  -v /vol2/1000/download:/xunlei/downloads \
  -v /vol1/1000/myappdata/network/resolv.conf:/etc/resolv.conf \
  -e XL_DASHBOARD_USERNAME=admin \
  -e XL_DASHBOARD_PASSWORD=12345678 \
  cnk3x/xunlei

解释: -d 以“后台模式”(detached mode)运行容器; --name xunlei 为容器指定名称 xunlei--network china 指定容器加入名为 china 的自定义 Docker 网络; --ip 192.168.1.20 为容器分配固定 IP 192.168.1.20--privileged 赋予容器“特权模式”; -v /vol1/1000/myappdata/xunlei:/xunlei/data 将宿主机的 /vol1/1000/myappdata/xunlei 目录挂载到容器的 /xunlei/data,保存配置文件; -v /vol2/1000/download:/xunlei/downloads 将宿主机的下载目录 /vol2/1000/download 挂载到容器的 /xunlei/downloads,保存下载文件; -v /vol1/1000/myappdata/network/resolv.conf:/etc/resolv.conf 覆盖容器内的 DNS 配置文件 /etc/resolv.conf,自定析规则; -e XL_DASHBOARD_USERNAME=admin 和 -e XL_DASHBOARD_PASSWORD=12345678 设置容器内环境变量,用于配置迅雷 Web 控制台的登录用户名和密码。 cnk3x/xunlei** 使用的迅雷镜像。

通过以上设置,可实现Docker容器国内外网络指向的精细化控制,同时提升网络稳定性。欢迎留言讨论优化方案。

收藏
送赞
分享

1

主题

15

回帖

0

牛值

江湖小虾

2025-4-1 15:46:37 显示全部楼层
我用的pve,另外还有wifi网卡,我用的ASTRILL,不支持OPENWRT,只能安装到主路由里。
设置两个虚拟网口,一个wifi。
lan:本地连接
wan:国内出口,
wifi:主路由ASTRILL白名单出口。
https://ispip.clang.cn/每日抓取IP设置到规则
软路由通过mwan3进行分流,国内ip走wan口,其他的ip全部走梯子。
设备要走梯子把网关设置为软路由的本地IP就行了。

缺点就是所有的外国IP都会走梯子,如果知道哪里可以获取到**的IP,可以**我一下。
是IP,不是域名,因为MWAN3的规则只能设置IP,试过将域名转化为IP添加到规则,不太好用。


靠软路由分流会浪费性能,比如 qbit 超多连接线路会大幅增加软路由不必要的性能开支,而且也没办法控制每个连接 ip 的分流,说不定就走代/理下载了。不如从网络接口分离国内外来的干净彻底,也有利于整体网络环境的  详情 回复
2025-4-1 15:56

2

主题

1

回帖

0

牛值

fnOS系统内测组

2025-4-1 15:56:34 楼主 显示全部楼层
朝闻道🇨? 发表于 2025-4-1 15:46
我用的pve,另外还有wifi网卡,我用的ASTRILL,不支持OPENWRT,只能安装到主路由里。
设置两个虚拟网口,一 ...

靠软路由分流会浪费性能,比如 qbit 超多连接线路会大幅增加软路由不必要的性能开支,而且也没办法控制每个连接 ip 的分流,说不定就走代/理下载了。不如从网络接口分离国内外来的干净彻底,也有利于整体网络环境的性能开销降低。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则