您好,根据您提供的操作说明,我为您整理了一份在 Docker 中部署 OpenWrt 和 Clash 的清晰指南。

🔧 准备工作:验证网络环境

您提到的教程中使用了 ens33 作为网卡名和 192.168.254.0/24 作为网络网段。在开始操作前,请务必在您的 Ubuntu 系统中运行以下命令,确认这些信息与您的实际环境匹配

1
2
3
4
5
6
7
# 1. 查看您的主网卡名称(不一定是ens33)
ifconfig
# 或使用以下命令查看更清晰的列表
ip addr show

# 2. 查看您当前的IP地址和网关
ip route show default

关键核对点

  • 物理网卡名:确认用于连接外网(或您希望 OpenWrt 接入)的网卡名称,例如 ens160eth0 等。
  • 子网与网关:确认您希望为 OpenWrt 虚拟网络分配的网段(如 192.168.254.0/24不能与宿主机 Ubuntu 所在的局域网网段(例如 192.168.1.0/24)重叠,否则会导致网络冲突。

📦 操作步骤:部署 OpenWrt

以下步骤基于您提供的命令,并加入了关键提示。

  1. 拉取 OpenWrt 镜像

    1
    docker pull piaoyizy/openwrt-x86:latest
  2. 启用网卡混杂模式
    将以下命令中的 ens33 替换为您第一步中确认的真实物理网卡名

    1
    sudo ip link set ens33 promisc on
  3. 创建 Macvlan 网络
    同样,将 parent=ens33 中的网卡名替换。subnetgateway 也请根据您的规划修改。

    1
    docker network create -d macvlan --subnet=192.168.254.0/24 --gateway=192.168.254.2 -o parent=ens33 macnet
    • 创建后,可用 docker network ls 命令查看是否出现 macnet
  4. 创建并启动 OpenWrt 容器
    这里使用了 zzsrv/openwrt:x86_64 镜像,与第一步拉取的镜像名不一致,请注意。如果前者拉取失败,可以尝试将 zzsrv/openwrt:x86_64 替换为 piaoyizy/openwrt-x86:latest

    1
    docker run --restart always --name openwrt -d --network macnet --privileged zzsrv/openwrt:x86_64 /sbin/init
  5. 进入容器并配置网络

    • 进入容器:
      1
      docker exec -it openwrt bash
    • 修改网络配置,将容器 IP 设置到 macnet 网段内(例如 192.168.254.10):
      1
      vi /etc/config/network
    • i 进入编辑模式,修改 config interface 'lan' 下的 ipaddr 选项,例如:
      1
      option ipaddr '192.168.254.10'
    • ESC 键退出编辑模式,输入 :wq 保存并退出 vi 编辑器。
    • 退出容器命令行(输入 exit 或按 Ctrl+D)。
  6. 重启容器使配置生效

    1
    docker container restart openwrt

    默认登录信息:配置完成后,理论上可通过 http://192.168.254.10 访问其 Web 管理界面(如 Luci)。默认账号root默认密码password

🚀 补充:部署 Clash 服务

您提供的 Clash 部署命令非常清晰,可以直接运行。它会在后台启动一个 Clash 容器,并映射 Web 面板和代理端口。

1
2
3
4
5
6
7
docker run --name clash -d \
-p 7890:7890 \
-p 7891:7891 \
-p 7892:7892 \
-p 9090:9090 \
-v /www/wwwroot/docker/clash/config:/etc/.clash.meta.d \
yikyo/clash.meta

关键说明

  • -p 9090:9090:将容器的 9090 端口映射到宿主机。请注意,这与您之前安装的 Cockpit 服务端口(9090)冲突。您必须修改其中一个服务的端口。
    • 建议:将 Clash 的 Web 面板端口改为其他未被占用的端口,例如 -p 9091:9090,这样您就可以通过宿主机的 9091 端口访问 Clash 面板。
  • -v ...:将宿主机目录挂载到容器,用于持久化 Clash 配置文件(如 config.yaml)。请确保 /www/wwwroot/docker/clash/config 目录存在。

⚠️ 重要提醒与建议

  1. 镜像来源:请注意,您提供的步骤中出现了两个不同的 OpenWrt 镜像名称。建议统一使用其中一个,并确保其来源可靠。
  2. 网络规划:这是最关键的步骤。错误地设置 Macvlan 子网(与主机网络冲突)会导致宿主机或容器网络不可用。请务必提前规划好不冲突的 IP 网段。
  3. 端口冲突:如前所述,Clash 的 9090 端口会与 Cockpit 冲突,必须在运行时修改
  4. 防火墙:如果宿主机 Ubuntu 启用了 ufw 防火墙,需要放行相关端口(如 Clash 的 7890-7892,以及修改后的管理端口)。
  5. 后续使用:成功运行 OpenWrt 容器后,通常需要将其设置为旁路由或主路由,并配置 Clash 作为其透明网关,这涉及更复杂的网络配置。

如果您在根据本指南操作时遇到具体问题(例如网络不通、端口冲突或镜像拉取失败),可以提供更多错误信息,我可以帮您进一步分析。