
使用Cloudflare Warp隐藏Misskey的IP地址

Skyone
科技爱好者
我一直使用 Cloudflare tunnel 来隐藏 Misskey 的 IP 地址,但是昨天晚上忽然想到,由于 misskey 是基于 ActivityPub 协议的,在服务器与其他服务器之间的通信中,IP 地址是公开的,如果攻击者构造了一个恶意的 ActivityPub 实现,马上就能拿到 Misskey 源站的 IP 地址。
想要避免这种情况,只能为 Misskey 的源站添加代理,而 Cloudflare Warp 就是一个不错的选择。本文根据大佬们的经验完成了 Misskey 的 Cloudflare Warp 配置。
Cloudflare Warp 简介
Cloudflare Warp 是 Cloudflare 提供的一个 VPN 服务,旨在提供更快、更安全的互联网连接。它通过 Cloudflare 的全球网络来加密和优化用户的网络流量,从而提高访问速度并保护用户隐私1。
Warp 是限速的,为了获取不限量的 Warp+(速度更快),我们需要绑定 Cloudflare Zero Trust 的账号2。
准备工作
如果你决定不使用 Warp+,可以跳过这一步。
注册 Cloudflare 账号,如果你还没有 Cloudflare 账号,注册一个。
在 Cloudflare Zero Trust 中创建一个团队,登录 Cloudflare 后,访问 Cloudflare Zero Trust 并创建一个新团队。
在 Cloudflare Zero Trust 配置 Warp 为 Proxy 模式
找到 设置 -> WARP 客户端 -> 配置文件设置,如图所示
将服务模式改为“代理模式”,然后点击“保存更改”。
在 网络 -> Tunnels 中,点击“添加隧道”,创建一个 Warp 隧道,拿到 Warp 令牌(warp-cli connector new
后面的那一串字符串)。
构建 Warp 容器
确保你的服务器上安装了 Docker 和 Docker Compose。
下面是我的 docker-compose.yml
文件内容3:
services:
cloudlare-warp:
container_name: cloudflare-warp
image: luotianyi/cloudflare-warp:latest
restart: unless-stopped
build:
context: build
volumes:
- "./data:/app"
environment:
WARP_TOKEN: ChangeMe
networks:
- proxy
networks:
proxy:
external: true
将 WARP_TOKEN
替换为你在 Cloudflare Zero Trust 中获取的 Warp 令牌。
下面的 Dockerfile 放到 build
目录下:
FROM debian:bookworm-slim
WORKDIR /app
RUN apt-get update && \
apt-get install -y --no-install-recommends \
ca-certificates \
curl \
gnupg \
lsb-release && \
rm -rf /var/lib/apt/lists/*
RUN curl https://pkg.cloudflareclient.com/pubkey.gpg | gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg && \
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/cloudflare-client.list && \
apt-get update && \
apt-get install cloudflare-warp -y --no-install-recommends && \
rm -rf /var/lib/apt/lists/* && \
curl -L https://github.com/go-gost/gost/releases/download/v3.2.3/gost_3.2.3_linux_amd64.tar.gz -o gost.tar.gz && \
tar -xzf gost.tar.gz -C /usr/local/bin/ && \
rm gost.tar.gz /usr/local/bin/LICENSE /usr/local/bin/README.md /usr/local/bin/README_en.md
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
CMD ["/entrypoint.sh"]
VOLUME ["/app"]
EXPOSE 1080/tcp
下面是 entrypoint.sh
4,同样放在 build
目录下:
#!/usr/bin/env sh
nohup /usr/bin/warp-svc > /app/warp.log &
sleep 3
if [ -n "$WARP_TOKEN" ]; then
echo "Using WARP token from environment variable"
warp-cli --accept-tos connector new "$WARP_TOKEN"
warp-cli --accept-tos connect
else
echo "No WARP token provided, using default connector"
warp-cli --accept-tos registration new
warp-cli --accept-tos mode proxy
warp-cli --accept-tos connect
fi
gost -L=http://:1080 -F=socks5://127.0.0.1:40000
解释一下这个容器的功能,它会后台启动 Cloudflare Warp 服务,然后使用 warp-cli
命令连接到 Cloudflare 的 Warp 网络。由于
Warp 只支持 socks5 协议,所以我们使用 gost
将其转换为 HTTP 代理,监听在 1080 端口。
实际上这个容器并不完善,因为使用了 nohup
命令来后台运行 warp-svc
,在关闭容器时必然要等到超时强制
kill。不是很优雅的做法,但凑合用吧,不想折腾 s6-overlay 了。
启动容器 docker-compose up -d
,然后让我们测试一下:
curl -x http://<warp-container-ip>:1080 https://ipinfo.io
应该会告诉你你的 IP 属于 Cloudflare Warp。
配置 Misskey 使用 Warp 代理
这一步非常简单,只需要在 Misskey 的配置文件中添加以下内容:
proxy: http://cloudflare-warp:1080
如果你修改了容器名,这里自行同步修改。
然后重启 Misskey 容器即可 docker restart misskey
。打开浏览器,看看你的 Misskey 能不能获取其他服务器的信息吧。