boxmoe_header_banner_img

Hello! 欢迎来到我的博客!

文章导读

Docker 中的 3x-ui 使用宿主机 WARP SOCKS5 分流 Netflix 教程







Docker 中的 3x-ui 使用宿主机 WARP SOCKS5 分流 Netflix 教程


Docker 中的 3x-ui 使用宿主机 WARP SOCKS5 分流 Netflix 教程

本教程适用于在 Debian 12 VPS 上,将 Cloudflare WARP 安装在宿主机,通过 SOCKS5 代理只让 Netflix 流量走 WARP,而其他流量保持原有线路。特别解决了 WARP 在宿主机、3x-ui 在 Docker 容器内时,无法直接使用 127.0.0.1:40000 的问题,并确保安全性(不暴露公网)与开机自启。

一、整体思路

核心只做 3 层转发,结构如下:

3x-ui Docker

172.20.0.1:40000

socat

127.0.0.1:40000

Cloudflare WARP SOCKS5

其中:

  • WARP 自己只监听 127.0.0.1:40000
  • socat 在 Docker 网关 172.20.0.1:40000 上监听
  • iptables 只允许 Docker 网段访问这个 40000 端口
  • systemd 负责让 socat 开机自动运行
  • netfilter-persistent 负责让 iptables 规则重启后自动恢复

最终 Xray 只需要把 Netflix 域名指向 172.20.0.1:40000,其他流量完全不改变。

二、最简化部署命令

1. 安装 WARP SOCKS5

首先下载 fscarmen WARP 菜单脚本:

wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh
如果系统没有 wget,请先安装:
apt update && apt install -y wget

给脚本执行权限并启动菜单:

chmod +x menu.sh
bash menu.sh

进入菜单后,选择 c

c = Install Cloudflare WARP Linux Client + SOCKS5 Proxy 模式

安装完成后,WARP 会提供 SOCKS5 代理,默认监听:

127.0.0.1:40000

即:

WARP SOCKS5
127.0.0.1:40000

2. 放行 Docker → WARP

iptables -I INPUT 1 -i br-99deaf478bda -s 172.20.0.0/16 -p tcp -d 172.20.0.1 --dport 40000 -j ACCEPT

作用:只允许 Docker 网络 172.20.0.0/16 通过网桥 br-99deaf478bda 访问宿主机 172.20.0.1:40000,不会将 40000 开放到公网。

注意:请根据你的实际 Docker 网桥接口名和网段调整。可用 ip addr show 查看,通常网桥名类似 br-xxxx,网段为 172.20.0.0/16

3. 保存 iptables 规则

iptables-save > /etc/iptables/rules.v4

将当前规则保存到文件,如果你的系统已安装 netfilter-persistent,重启后会自动恢复。

4. 创建 socat 开机服务

cat > /etc/systemd/system/warp-socks-docker.service <<'EOF'
[Unit]
Description=WARP SOCKS5 Docker Bridge Forward
After=warp-svc.service docker.service
Wants=warp-svc.service
Requires=docker.service

[Service]
Type=simple
ExecStart=/usr/bin/socat TCP-LISTEN:40000,bind=172.20.0.1,reuseaddr,fork TCP:127.0.0.1:40000
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target
EOF

作用:将 Docker 网关上的 40000 端口请求转发给本机 WARP 的 127.0.0.1:40000

5. 启用服务

systemctl daemon-reload
systemctl enable --now warp-socks-docker.service

daemon-reload 让 systemd 读取新服务,enable 设置开机自启,--now 立即启动。

三、以后最核心的配置

完成上面步骤后,你的 WARP Docker SOCKS5 地址就是:

172.20.0.1:40000

而不是 127.0.0.1:40000,因为对于 3x-ui 容器来说,127.0.0.1 是容器自身。

四、3x-ui/Xray 最终配置

在 3x-ui 面板中增加一个 SOCKS 出站,并添加 Netflix 路由规则。以下提供两种方式,推荐使用面板操作

方式一:面板配置(推荐)

  1. 登录 3x-ui 面板(通常是 http://你的VPS_IP:12700 或你自定义的端口)。
  2. 进入 Xray 设置出站设置(或 Outbounds)。
  3. 点击“添加出站”,填写:
    • 协议:socks
    • 标签:warp(可自定义)
    • 地址:172.20.0.1
    • 端口:40000

    其余保持默认,保存。

  4. 进入 路由设置(或 Routing)。
  5. 添加规则:
    • 域名:geosite:netflix
    • 出站:选择刚创建的 warp

    确保该规则在列表中的顺序足够靠前。

  6. 保存并重启 Xray(或重启 3x-ui 容器)。

方式二:手动编辑配置文件

如果更习惯直接编辑 Xray 配置文件(通常位于容器内的 /etc/x-ui/xray.json 或通过面板修改),可以在 outbounds 中添加:

{
  "tag": "warp",
  "protocol": "socks",
  "settings": {
    "servers": [
      {
        "address": "172.20.0.1",
        "port": 40000
      }
    ]
  }
}

routingrules 中添加:

{
  "type": "field",
  "domain": [
    "geosite:netflix"
  ],
  "outboundTag": "warp"
}

然后重启 Xray。

最终效果:Netflix 流量 → geosite:netflixwarp172.20.0.1:40000 → socat → WARP → 香港出口。
其他流量 → 保持原来的 Xray 出站。

五、验证与排错

宿主机测试 WARP

curl --socks5 127.0.0.1:40000 https://www.cloudflare.com/cdn-cgi/trace

应看到 warp=oncolo=HKG(或其他你选择的地区)。

容器内测试转发

docker exec 3xui sh -c 'curl --connect-timeout 10 --socks5 172.20.0.1:40000 https://www.cloudflare.com/cdn-cgi/trace'

如果成功,说明链路打通。

检查 socat 服务状态

systemctl status warp-socks-docker.service

应为 active (running) 且已 enabled

六、注意事项

  • 绝对不要将 WARP 的 SOCKS5 监听地址改为 0.0.0.0,否则可能成为公开代理。
  • 不要在云服务商安全组中开放 40000/TCP 端口。
  • 如果 Netflix 无法解锁,可以尝试更换 WARP 出口 IP(使用 warp iwarp i hk 等命令)。
  • 确保 iptables-persistent 已安装并启用,否则重启后规则丢失。可用 apt install iptables-persistent -y 安装并 netfilter-persistent save 保存。
  • 如果 Docker 网桥不是 br-99deaf478bda,请根据 ip addr show 的实际名称修改。

七、总结

本方案通过 socat 和 iptables 巧妙地将宿主机 WARP SOCKS5 暴露给 Docker 容器,同时保持了安全性和开机自启。配置完成后,Netflix 流量自动走 WARP 香港出口,其余流量不受影响,非常适合需要流媒体解锁的 VPS 用户。


教程结束。如有疑问,欢迎交流。




评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字
插入代码