Proxmox VE 使用 LXC 容器安装 Docker 版 Cloudflare WARP

编辑于:2026年01月15日

Proxmox VE 使用 LXC 容器安装 Docker 版 Cloudflare WARP

要实现通过 LXC 里的 Docker WARP 为其他虚拟机提供网络,最稳定且侵入性最小的方案是 SOCKS5 代理模式。这种方案不需要修改你现有的宿主机 PVE 网络配置文件,完全依赖你已经配置好的 vmbr1 内网。

现在是 2025 年底 Debian 13 (Trixie) 已经是稳定版,使用它是最明智的选择。以下是基于 PVE 9.x + Debian 13 LXC + Docker + Cloudflare WARP 的完整保姆级操作手册。

此方案的目标:

  • ⭕1.创建一个极轻量的 Debian 13 容器。
  • ⭕2.在容器内运行 Docker 版 WARP。
  • ⭕3.对外暴露 SOCKS5 代理端口(1080)。
  • ⭕4.你的 Windows 虚拟机通过这个代理上网,保护宿主机 IP。

1. 网络拓扑设计

在这个架构中 WARP 容器充当一个旁路网关或代理服务器,LXC 通常不直接挂在公网口,除非你有额外公网IP。挂在 vmbr1 可以利用宿主机已经配好的 NAT 也就是 iptables ... MASQUERADE 规则上网。

1.1 网络架构设置

#宿主机两个网卡 vmbr0 公网和 vmbr1 内网

#PVE 宿主机 (Host) ,挂载在 vmbr1
#作用:作为所有虚拟机的出口网关 NAT
IP: 192.168.100.1 

#LXC 容器 (运行 Docker WARP),挂载在 vmbr1
#作用:运行 WARP,暴露 1080 端口
IP: 192.168.100.10
网关: 192.168.100.1

#目标虚拟机 (Client VM),挂载在 vmbr1
#配置:通过软件或系统代理设置,将流量指向 192.168.100.10:1080
IP: 192.168.100.2
网关: 192.168.100.1

1.2 宿主机网络配置示例:

玩机大学在《为 OVH 服务器 Proxmox VE 配置 IPv4 和 IPv6》一文详细讲解了网络配置的设计,如下是示例:

# ---系统默认网卡设置 ---
auto vmbr0
iface vmbr0 inet static
    # 你的宿主机 IPv4 (保持默认)
    address 54.38.122.125/24
    # 你的宿主机 IPv4 网关 (保持默认)
    gateway 54.38.122.254
    bridge-ports eno1
    bridge-stp off
    bridge-fd 0
    # 物理网卡 MAC 地址 (保持默认)
    hwaddress AA:BB:CC:DD:EE:FF
    # [新增] 强制开启 IPv4 转发,确保 NAT 100% 可用
    post-up echo 1 > /proc/sys/net/ipv4/ip_forward
 
iface vmbr0 inet6 static
    # 宿主机自用 IPv6,默认为 128 改为 64
    address 2607:5300:313:3d22::1/64
    # OVH 官方 IPv6 网关 (保持默认)
    gateway 2607:5300:0203:3dff:00ff:00ff:00ff:00ff
    # [Forwarding: 确保宿主机能转发包]
    # all: 覆盖当前所有接口
    post-up echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
    # default: 确保未来新建的接口(如 tap/veth)也默认开启
    post-up echo 1 > /proc/sys/net/ipv6/conf/default/forwarding
 
    # [NDP Proxy: 确保宿主机能代答]
    # all: 确保内核全局允许该行为
    post-up echo 1 > /proc/sys/net/ipv6/conf/all/proxy_ndp
    # default: 确保未来接口继承该行为
    post-up echo 1 > /proc/sys/net/ipv6/conf/default/proxy_ndp
    # vmbr0: 明确在外网口开启(最重要的一行)
    post-up echo 1 > /proc/sys/net/ipv6/conf/vmbr0/proxy_ndp
 
# --- LAN 接口 (虚拟机专用内网) ---
auto vmbr1
iface vmbr1 inet static
    # 内网网关 IPv4
    address 192.168.100.1/24
    bridge-ports none
    bridge-stp off
    bridge-fd 0
 
    # [IPv4 NAT] 开启伪装上网,把来自 192.168.100.0/24 的流量,伪装成 vmbr0 的公网 IP 发出去
    post-up iptables -t nat -A POSTROUTING -s '192.168.100.0/24' -o vmbr0 -j MASQUERADE
    # 关机清理,删除规则
    post-down iptables -t nat -D POSTROUTING -s '192.168.100.0/24' -o vmbr0 -j MASQUERADE
 
    # IPv4 端口映射示例,宿主机 3389 -> Windows 3389 (建议仅在需要远程桌面时开启,同时为了安全,建议更改默认的3389端口)
    # post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 3389 -j DNAT --to-destination 192.168.100.2:3389
    # post-up iptables -t nat -A PREROUTING -i vmbr0 -p udp --dport 3389 -j DNAT --to-destination 192.168.100.2:3389
 
# --- IPv6 路由与白名单管理区域 ---
iface vmbr1 inet6 static
    # [修改] 虚拟机用的 IPv6 网关地址
    address 2607:5300:313:3d22::2/64
 
    # ================= 虚拟机列表 (在此处添加) =================
 
    # [虚拟机 A - Windows]
    # IP: 2607:5300:313:3d22::3
    # 1. 告诉 OVH:该 IP 在我这 (NDP Proxy)
    post-up ip -6 neigh add proxy 2607:5300:313:3d22::3 dev vmbr0
    # 2. 告诉 内核:该 IP 往 vmbr1 走 (Routing)
    post-up ip -6 route add 2607:5300:313:3d22::3/128 dev vmbr1
 
# 加载 SDN 配置 (保留此行在文件末尾)
# Proxmox VE 系统自带的配置文件,用于支持“软件定义网络”(Software Defined Network)功能
source /etc/network/interfaces.d/*

2. 准备 LXC 容器 (在 PVE 界面操作)

2.1 下载 Debian 13 模板

PVE 下载 Debian 13 模板

PVE 左侧菜单 -> local存储 -> CT 模板 -> 模板 -> 搜索并下载 debian-13-standard

2.2 创建容器 (Create CT)

创建容器

⬆️右上角创建CT
常规:主机名密码、勾选无特权的容器嵌套

13-standard_13.1_amd64.tar.zst

⬆️模板:储存 local -> 模板 13-standard_13.1_amd64.tar.zst

储存 local

⬆️磁盘:储存 local -> 磁盘大小 8

CPU 核心

⬆️CPU:核心 1

内存

⬆️内存:内存 512

网络 桥接 vmbr1

⬆️网络:桥接 vmbr1 (之前设置的内网网卡) -> IPv4 静态 -> IPv4/CIDR 192.168.100.10/24 (这是给容器分配的内网 IP) -> 网关 192.168.100.1

DNS 域和 DNS 服务器

⬆️DNS:DNS 域和 DNS 服务器默认使用主机设置

Proxmox VE 安装 LXC 容器

2.3 启动容器

启动容器

点击 启动,然后点击 控制台 进入命令行界面。

3. 安装 Docker (在 LXC 控制台内操作)

LXC 控制台内操作

进入 Debian 13 控制台后,用户名 root 密码输入之前设置的密码,输入后会不显示,这是正常现象,点击回车键确认,完成登录。

3.1 安装 Docker

粘贴如下命令执行,安装 Docker。

apt update && apt install curl -y
curl -fsSL https://get.docker.com | sh

3.2 验证安装

docker -v

输出应该类似: Docker version 27.x.x, build ...

4. 部署 WARP 代理 (在 LXC 控制台内操作)

我们将使用 monius/docker-warp-socks 镜像,它自动处理了 WARP 的注册和模式切换,且支持多架构,非常稳定。

4.1 复制以下命令直接运行:

docker run -d \
  --name warp_proxy \
  --restart always \
  -p 9091:9091 \
  --cap-add NET_ADMIN \
  --sysctl net.ipv6.conf.all.disable_ipv6=0 \
  monius/docker-warp-socks

4.2 参数详解:

-p 9091:9091 
#monius/docker-warp-socks 的较新版本(特别是 v5 及 latest 标签)端口由 1080 变为 9091 默认启用的是混合代理 (Mixed Protocol) 模式,支持同时处理 HTTP/HTTPS/SOCKS5 流量。

--cap-add NET_ADMIN 
#必须,因为 WARP 需要创建 VPN 隧道接口 (tun)。

--sysctl ...disable_ipv6=: 
#允许容器内部使用 IPv6 连接 Cloudflare 节点(如果你宿主机支持 IPv6,这样连接更稳;如果不支持也没事,它会回退到 IPv4)。

4.3 验证运行状态:

docker logs -f warp_proxy

如果你看到[INFO] Socks5 proxy listening on :1080,说明成功了。按Ctrl+C 退出日志查看。

4.4 测试代理是否生效 (在容器内测试):

curl -x socks5h://127.0.0.1:9091 https://ifconfig.me

如果返回的是一个 Cloudflare 的 IP(通常不是你 OVH 的 IP),那就大功告成。

5. 配置目标虚拟机 (让它走 WARP)

现在你的 LXC (192.168.100.10) 已经是一个透明的 SOCKS5 代理服务器了。你有两种方式让目标虚拟机使用它:

5.1 方式 A:应用级代理 (推荐,灵活)

如果你只需要浏览器或特定软件走 WARP,在浏览器安装 SwitchyOmega 插件。

添加 SOCKS5 代理:IP 192.168.100.10,端口 9091

5.2 方式 B:系统级强制代理 (推荐,彻底隐藏)

如果你希望目标虚拟机的所有流量(包括不支持代理的软件)都走 WARP:

Windows: 安装 Clash。

rules:
  # -------------------------------------------------
  # 1.【基础保障】局域网与系统核心直连 (绝对不能删)
  # -------------------------------------------------
  - IP-CIDR,127.0.0.0/8,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT
  - DOMAIN-SUFFIX,local,DIRECT
  # 如果你使用了 Tailscale 或 ZeroTier 等虚拟组网,也要加进来,例如:
  # - IP-CIDR,100.64.0.0/10,DIRECT 

  # -------------------------------------------------
  # 2.【特定应用】远程桌面 (RDP) -> 强制直连
  # -------------------------------------------------
  # 解释:所有目标端口为 3389 的流量都走直连。
  # 这样你从这台虚拟机 RDP 连别人,或者别人连你(如果是出站响应),都使用 OVH 线路。
  - DST-PORT,3389,DIRECT
  
  # 如果你有其他不想走代理的应用端口(比如 SSH 的 22,FTP 的 21),也可以加:
  - DST-PORT,22,DIRECT

  # -------------------------------------------------
  # 3.【特定网站】指定某些服务 -> 强制走 WARP
  # -------------------------------------------------
  # 场景 A:指定域名后缀 (最常用)
  - DOMAIN-SUFFIX,netflix.com,WARP-LXC
  - DOMAIN-SUFFIX,openai.com,WARP-LXC
  - DOMAIN-SUFFIX,ip138.com,WARP-LXC  # 测试查IP用
  - DOMAIN-SUFFIX,google.com,WARP-LXC

  # 场景 B:指定关键字 (模糊匹配)
  - DOMAIN-KEYWORD,chatgpt,WARP-LXC

  # -------------------------------------------------
  # 4.【特殊策略】IPv6 处理
  # -------------------------------------------------
  # 建议 IPv6 全部直连,因为 WARP 对 IPv6 支持一般,且 OVH IPv6 质量很好
  - IP-CIDR6,::/0,DIRECT

  # -------------------------------------------------
  # 5.【默认兜底】剩下的流量走哪里?
  # -------------------------------------------------
  # 选项 A (推荐):白名单模式 -> 默认全走直连 (OVH IP),只有上面指定的才走 WARP
  # 适合:服务器用途,希望大部分流量稳定,仅个别业务需要换 IP。
  - MATCH,DIRECT
  
  # 选项 B:黑名单模式 -> 默认全走 WARP,只有上面指定的才走直连
  # 适合:隐私需求高,希望默认隐藏 IP,仅 RDP 等少量服务直连。
  # - MATCH,WARP-LXC

Linux: 使用 proxychains 或者配置环境变量。

# 对于大多数工具,HTTP 协议兼容性最好
export http_proxy="http://192.168.100.10:9091"
export https_proxy="http://192.168.100.10:9091"

# 对于支持 SOCKS5 的工具(如 curl, wget 较新版),SOCKS5 解析域名更佳
export all_proxy="socks5://192.168.100.10:9091"

6. 总结

  • ⭕拓扑:LXC 挂在 vmbr1
  • ⭕网卡:LXC 使用 eth0 桥接到宿主机的 vmbr1
  • ⭕核心逻辑:LXC 通过宿主机 NAT 上网 -> 连接 Cloudflare -> 建立隧道 -> 暴露 9091 端口给内网其他机器使用。

7. 常见问题排错

7.1 容器无法联网,下载不了 Docker?

检查 vmbr1的网关设置。确认你在 PVE 宿主机的 /etc/network/interfaces 里配置了 NAT 转发(iptables ... MASQUERADE)。如果宿主机没配 NAT,容器是上不了网的。

7.2 Windows 连不上 9091 端口?

在 LXC 容器里运行 apt install net-tools 然后 netstat -tulpn。确认 Docker 监听的是 0.0.0.0:9091 而不是 127.0.0.1:9091(我的 docker 命令已经默认包含 0.0.0.0 映射)。同时检查宿主机的防火墙(如果你开了 PVE 防火墙,需要在 Datacenter -> Firewall 允许内网通过)。

相关推荐

暂无评论