如何将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_UP和POST_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




