You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将WireGuard服务器的流量通过Cloudflare WARP代理进行路由?

如何将WireGuard服务器的流量通过Cloudflare WARP代理进行路由?

我在同一台服务器上部署了两个Docker容器——WireGuard服务器和Cloudflare WARP,前者用来搭建VPN服务,后者提供socks5代理(端口映射到主机的1080端口)。先给你看看我当前的容器部署命令:

现有容器部署命令

WireGuard服务器部署命令

docker run -d --name=wireguard \
  -e LANG=en \
  -e WG_HOST=example.com \
  -e PASSWORD='password' \
  -e PORT=51821 \
  -e WG_PORT=51820 \
  -e WG_MTU=1420 \
  -e WG_PERSISTENT_KEEPALIVE=20 \
  -e UI_TRAFFIC_STATS=true \
  -v /opt/wireguard:/etc/wireguard \
  --network=host \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_MODULE \
  --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
  --sysctl="net.ipv4.ip_forward=1" \
  --restart always \
  weejewel/wg-easy

Cloudflare WARP部署命令

docker run -d \
  --name cloudflare-warp \
  --restart always \
  -p 1080:1080 \
  -e WARP_SLEEP=2 \
  --cap-add NET_ADMIN \
  --sysctl net.ipv6.conf.all.disable_ipv6=0 \
  cmj2002/warp-docker

实现流量路由的具体步骤

要让WireGuard客户端的所有流量都通过Cloudflare WARP代理转发,咱们可以通过配置WireGuard的启动/停止脚本,结合iptables规则来实现,具体操作如下:

  • 修改WireGuard启动命令,添加流量转发规则
    在原来的WireGuard docker run命令中,新增POST_UPPOST_DOWN两个环境变量,用来在WireGuard启动时添加iptables规则,停止时清理规则:

    -e POST_UP='iptables -t nat -A PREROUTING -i wg0 -p tcp -j REDIRECT --to-ports 1080; iptables -t nat -A PREROUTING -i wg0 -p udp -j REDIRECT --to-ports 1080' \
    -e POST_DOWN='iptables -t nat -D PREROUTING -i wg0 -p tcp -j REDIRECT --to-ports 1080; iptables -t nat -D PREROUTING -i wg0 -p udp -j REDIRECT --to-ports 1080' \
    

    简单解释下:这两行规则会把WireGuard虚拟网卡(wg0)进来的所有TCP、UDP流量,重定向到主机的1080端口——也就是Cloudflare WARP提供的socks5代理端口。

  • 重启WireGuard容器生效配置
    先停止并删除旧的WireGuard容器,再用修改后的完整命令重新启动:

    docker stop wireguard && docker rm wireguard
    # 执行添加了POST_UP/POST_DOWN的完整docker run命令
    
  • 验证配置是否生效
    用WireGuard客户端连接服务器后,访问一个可以查询公网IP的网站,看看显示的IP是否为Cloudflare WARP的IP,如果是,就说明流量已经成功通过WARP代理转发了。

备注:内容来源于stack exchange,提问作者user1089796

火山引擎 最新活动