套 Cloudflare Warp 解决IP送中
Posted | stdout
缘起
网上很多套Cloudflare教程,但是大多数都是在前置作为反向代理,CF的IP如果不挑选,则喜提“减速乐”
我这边的情况是该死的 Google 把我IP送中了,打死不提供 gemini 服务,为了解决锁区问题,本来以为简单用一下 Cloudflare Warp 就行,没想到是个大坑。花了好几天研究。
核心问题是, warp-cli connect 之后就失联了,ssh 都连不上。
warp-cli 网上很多教程都过时了。它命令行改版了。最简单的 warp-cli mode 其实官方教程都不全,它的 warp 和 warp+ ,改成 tunnel_only 还是不行。寄希望于 proxy 模式,官方博客说 "use the proxy (HTTPS or SOCKS5)",我实际测试,这个默认端口 40000 都是拼凑搜出来的。 然而我打死也没测试成功如何用 HTTP_PROXY 。AI 说只有 win/mac 的桌面版本支持?wtf。
CF一键脚本
没有希望,看下别人怎么解决的,大神给出的解是 一键脚本。
Cloudflare WARP 多功能一键脚本,支持纯IPV4/纯IPV6/双栈V4V6的VPS共9种情况随意切换安装,screen一键手动/自动刷新支持Netflix奈飞的IP(自动识别WGCF与SOCKS5环境,自定义刷新奈飞IP的时间段间隔,自定义奈飞区域国家,自定义仅刷区域国家),支持升级WARP+及Teams账户。
搜到最早的出处应该是 p3terx 的。但是这种一键脚本我都不太敢用,万一写个什么后门之类的你怎么知道。
大概读了下,会执行下面的脚本:
curl -fsSL git.io/wgcf.shcurl -fsSL git.io/wireguard-go.sh
git.io 是个第三方短链服务,可能会看人下菜碟?怕怕
看了半天发现回到原点,核心原理还是proxy然后socks5。或者把 wireguard 配置提取出来自己配路由
有没有什么不用第三方复杂配置,用官方的 warp-cli 但是保留几个tcp端口可用呢?
研究
于是同 ChatGPT、gemini 两位老师向 Linux 网络栈 展开了斗智斗勇。真是苦啊。需要在 warp 生效的时候测试不同的方法,就在那个贼难用的 noVNC html5 based VNC client 里一行一行代码试出来的
得到了以下宝贵教训:
- iptables 老早就过时了。现在的 iptables 实际上是 nf-tables 的马甲!吃了大亏!翻来覆去在错误的地方检查,AI也不提醒我一下
ip route路由也不是全部,其实还有 policy based routing 叫ip rule
其中 warp-cli 会创建一个叫 cloudflare-warp 的 nft,还有一个叫 CloudflareWARP 的 dev。然后在 ip rule 里会添加一条
32765: not from all fwmark 0x100cf lookup 65743
这里学到几个冷知识:
- 前面的 32765 是优先级,越低越优先,命令行里可以写成 priority 32765 或者 pref 32765 一回事
- 后面的 65743 是内核里的table,可以在
/etc/iproute2/rt_tables定义一套alias
耍聪明把INPUT流量标记一个 0x100cf 是不行的。以为是配置问题用 tcpdump 发现甚至只有 SYN 包。后来才知道去折腾 nf-tables。
如何给全局 warp 开一个端口
echo "200 inbound" | sudo tee -a /etc/iproute2/rt_tables或者这一步不做也行,后面所有的 inbound 都替换成200就行sudo ip route add default dev eth0 scope link table inbound这个是因为我VPS是on-link的。如果是实体 dev 自己换下- 连接
warp-cli connect这玩意会在所有自定义ip rule add前面加一条策略所以记得先连,再加自己的策略 sudo ip rule add from all sport 6666 lookup inbound pref 500这里的 500必须比默认的 32765 低。所以要先连上 warpsudo nft insert rule inet cloudflare-warp input tcp dport 6666 accept入站 接受sudo nft insert rule inet cloudflare-warp output tcp sport 6666 accept出站 接受
因为步骤3 执行之后你ssh就掉了,记得做成一个 .sh 脚本。。。
然后每次断开连接 warp-cli disconnet 之后,记得删除第4步里创建的
sudo ip rule del pref 500
否则的话,该死的 warp-cli connect 会创建一个 pref 499 在你前面卡位!
测试
curl -sk https://www.cloudflare.com/cdn-cgi/trace
折腾结束。这应该是全网第一个不动官方 warp-cli 能开端口的方法。
Comments