如何将Cloudflare Warp与Ubuntu服务器上现有SSH及Nekoray代理集成以隐藏服务器IP
我之前帮朋友搞定过几乎一模一样的场景,核心逻辑就是让Ubuntu服务器上所有通过SSH代理转发的流量,先经过Cloudflare Warp再对外请求,这样最终暴露的就是Cloudflare的IP而非你的服务器IP。下面是一步步的实操步骤:
第一步:在Ubuntu服务器上安装并激活Cloudflare Warp
首先得把Warp装到服务器上,用官方提供的脚本最稳妥:
# 添加Cloudflare的软件源密钥 curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg # 添加软件源 echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list # 更新源并安装Warp sudo apt update && sudo apt install cloudflare-warp -y
安装完成后,注册并连接Warp:
# 注册Warp账号(按提示输入邮箱即可,也支持匿名注册) warp-cli register # 连接到Warp网络 warp-cli connect # 验证连接状态,输出显示"Connected"就没问题 warp-cli status
别忘了设置Warp开机自启,避免服务器重启后需要手动连接:
sudo systemctl enable --now warp-svc
第二步:确保SSH连接不受Warp影响(关键!)
如果直接让Warp接管所有流量,可能会导致你的SSH连接突然断开(因为服务器的SSH响应会走Warp路由,可能和本地连接冲突)。所以要先添加例外规则,让SSH相关的流量绕过Warp:
# 添加你的客户端IP到Warp的排除列表,这样服务器和你本地的SSH通信不走Warp warp-cli add-exclude 你的本地IP地址 # 或者如果你经常换IP,可以排除整个SSH端口的流量(更通用) warp-cli add-exclude tcp://0.0.0.0:22
第三步:让代理流量强制走Warp
现在需要确保所有通过Nekoray SSH代理转发的流量都经过Warp,这里分两种简单的实现方式:
方式1:切换Warp到全局模式(最省心)
如果你不想折腾复杂的路由规则,直接让Warp接管服务器所有出站流量,只保留之前设置的SSH例外即可:
# 设置Warp为全局模式 warp-cli set-mode global # 重新连接使配置生效 warp-cli disconnect && warp-cli connect
方式2:用iptables强制路由(更灵活)
假设你Nekoray通过SSH转发的是SOCKS5端口(默认一般是1080),可以用iptables规则把从这个端口产生的出站流量导向Warp的tun0接口:
# 先确认Warp的接口是否存在,输出里能看到tun0就没问题 ip addr show tun0 # 添加iptables规则 # 允许本地回环流量(避免代理自身出问题) sudo iptables -A OUTPUT -o lo -j ACCEPT # 允许SSH相关流量绕过Warp sudo iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT sudo iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT # 将所有非本地、非SSH的出站流量导向tun0(Warp接口) sudo iptables -A OUTPUT -o eth0 -j DROP sudo iptables -A OUTPUT -o tun0 -j ACCEPT
注意:
eth0是服务器的主网卡,如果你服务器用的是其他网卡名(比如ens33),要替换成对应的名字,可以用ip addr查看。
第四步:验证配置是否生效
用Nekoray连接你的SSH代理,然后打开浏览器访问https://www.cloudflare.com/cdn-cgi/trace,查看返回结果里的ip字段——如果显示的是Cloudflare的IP(一般是104.x.x.x、172.x.x.x这类段),就说明配置成功了,你的服务器IP已经被隐藏。
如果遇到SSH断开的情况,直接在服务器控制台(比如VPS的网页控制台)重新执行warp-cli add-exclude 你的本地IP,然后重启Warp服务sudo systemctl restart warp-svc就能恢复。
备注:内容来源于stack exchange,提问作者Mohammad Fanni




