甲骨文arm使用docker安装warp
warp的好处Cloudflare WARP 是 Cloudflare 提供的免费 VPN 服务,由于多数服务商都将其出口 IP 视作信誉良好的家宽 IP,许多人将其用于 IP 地址较脏的服务器,以便访问风控较严格的网站。还有解锁Netflix,chatgpt,以及一些其他的对ip有风控的服务。
说到这里,我就要分享一下我和 WARP 的一段爱恨情仇了。事情是这样的,我有一台甲骨文 VPS,虽然它的 CPU 是 ARM 架构的(听起来很高级,但有点麻烦),问题来了:当我在这台 VPS 上安装 WARP 后,发现 Docker 服务只能用 host 网络模式,不能进行端口映射。这就像你辛辛苦苦搭好了积木,却发现少了最关键的一块!
很多服务都搭建在这台 VPS 上,比如这个博客系统,还有一些需要 Docker 端口映射的服务。
于是,我在网络上展开了一场大搜寻,终于找到了一个超级项目:caomingjun/warp
这个项目简直就是救世主,因为作者还做了防掉线处理。下面是我的 docker-compose.yml 内容:
version: '3'
services:
warp:
image: caomingjun/warp
container_name: warp
restart: always
ports:
- '127.0.0.1:1080:1080'
environment:
- WARP_SLEEP=2
# - WARP_LICENSE_KEY= # optional
cap_add:
- NET_ADMIN
sysctls:
- net.ipv6.conf.all.disable_ipv6=0
- net.ipv4.conf.all.src_valid_mark=1
volumes:
- ./data:/var/lib/cloudflare-warp看见那个 ports: - '127.0.0.1:1080:1080' 了吗?这是我的小聪明之处!只允许本机连接 Docker 容器的 1080 端口,这样就像给你的房子装上了只让你自己进出的门,外面的坏人都进不来啦!
不把端口映射到外部网络的原因
为什么不直接把端口映射到外部网络?因为这样做速度慢,还容易被 GFW(防火墙大魔王)发现,安全性也不高。想象一下,给小偷发了一张你家的地图,那可就糟了!
魔法棒登场:sing-box 一键安装脚本
接下来,我找到了一个更牛的解决方案:sing-box 一键安装脚本。这简直就是一键搞定所有问题的魔法棒,只要修改配置内容,就能让流量像过山车一样顺畅地从 WARP 出来。
下面是我让chatgpt写的脚本,别问我是什么意思?问就是告诉你我也不知道。:
#!/bin/bash # 检查并安装必需的工具 check_and_install_tools() { local tools=("wget" "jq" "expect" "curl") for tool in "${tools[@]}"; do if ! command -v "$tool" &> /dev/null; then echo "$tool 未安装,正在安装..." sudo apt-get update && sudo apt-get install -y "$tool" else echo "$tool 已安装" fi done } # 获取外网IP地址 get_external_ip() { curl -s http://ip.sb } # 获取IP地址的信息 get_ip_info() { local ip="$1" local response=$(curl -s "http://ip-api.com/json/${ip}?lang=zh-CN") local country=$(echo "$response" | jq -r '.country // "Unknown"') local region=$(echo "$response" | jq -r '.query // "Unknown"') local city=$(echo "$response" | jq -r '.city // "Unknown"') local org=$(echo "$response" | jq -r '.org // "Unknown"') echo "$country,$query,$city,$org" } # 检查 singbox 是否已安装 check_and_install_singbox() { if ! command -v sing-box &> /dev/null; then echo "sing-box 未安装,正在安装..." bash <(wget -qO- https://github.com/zhumao520/sing-box/raw/main/install.sh) else echo "sing-box 已安装" check_hysteria2_files fi } # 检查是否存在 Hysteria2 配置文件 check_hysteria2_files() { local config_dir="/etc/sing-box/conf" local files=("$config_dir"/Hysteria2-*.json) if [ -e "${files[0]}" ]; then echo "Hysteria2 配置文件已存在" else echo "Hysteria2 配置文件不存在,正在重新安装 sing-box..." local output=$(bash <(wget -qO- https://github.com/zhumao520/sing-box/raw/main/install.sh)) echo "$output" if ! echo "$output" | grep -q "Hysteria2"; then echo "没有检测到 Hysteria2 字符,请手动运行 sb 进行配置。" sb echo "请在 sb 配置完成后按 Enter 继续..." read -r fi fi } # 检查是否安装Docker check_docker_installed() { if ! command -v docker &> /dev/null; then return 1 else return 0 fi } # 安装Docker install_docker() { sudo apt-get update sudo apt-get install -y docker.io sudo systemctl start docker sudo systemctl enable docker } # 检查是否存在名为warp的容器 check_warp_container() { if [ "$(docker ps -a --format '{{.Names}}' | grep -w "warp" | wc -l)" -eq 0 ]; then return 1 else return 0 fi } # 创建Warp容器所需的目录并运行容器 install_warp_container() { mkdir -p /mnt/warp/data && \ docker run -d --name warp --restart always -p 127.0.0.1:1080:1080 \ -e WARP_SLEEP=2 -e WARP_LICENSE_KEY=94A3DxI1-1od769nM-Z5D9bx81 \ --cap-add=NET_ADMIN --sysctl net.ipv6.conf.all.disable_ipv6=0 \ --sysctl net.ipv4.conf.all.src_valid_mark=1 \ -v /mnt/warp/data:/var/lib/cloudflare-warp \ caomingjun/warp } # 修改Hysteria2配置文件并生成链接 modify_hysteria2_config() { local config_dir="/etc/sing-box/conf" for file in "$config_dir"/Hysteria2-*.json; do if [ -f "$file" ];then local filename=$(basename "$file") local password=$(jq -r '.inbounds[0].users[0].password' "$file") local listen_port=$(jq -r '.inbounds[0].listen_port' "$file") cat <<EOF > "$file" { "log": { "level": "info", "timestamp": true }, "inbounds": [ { "tag": "$filename", "type": "hysteria2", "listen": "::", "listen_port": $listen_port, "users": [ { "password": "$password" } ], "tls": { "enabled": true, "alpn": [ "h3" ], "key_path": "/etc/sing-box/bin/tls.key", "certificate_path": "/etc/sing-box/bin/tls.cer" } } ], "outbounds": [ { "type": "socks", "tag": "socks-out", "server": "127.0.0.1", "server_port": 1080 }, { "type": "direct", "tag": "direct-out" } ], "route": { "rules": [ { "inbound": [ "$filename" ], "outbound": "socks-out" } ], "final": "direct-out" } } EOF local ip_address=$(get_external_ip) local ip_info=$(get_ip_info "$ip_address") local country=$(echo "$ip_info" | cut -d',' -f1) local query=$(echo "$ip_info" | cut -d',' -f2) local city=$(echo "$ip_info" | cut -d',' -f3) local org=$(echo "$ip_info" | cut -d',' -f4) # 处理可能的 null 值 country=${country:-"Unknown"} query=${region:-"Unknown"} city=${city:-"Unknown"} org=${org:-"Unknown"} local hysteria2_link="hysteria2://${password}@${ip_address}:${listen_port}?alpn=h3&insecure=1#${country}-${ip_address}-${city}-${org}" echo "生成的Hysteria2链接:$hysteria2_link" fi done } main() { check_and_install_tools check_and_install_singbox if ! check_docker_installed; then echo "Docker未安装,正在安装Docker..." install_docker else echo "Docker已安装。" fi if ! check_warp_container; then echo "Warp容器未找到,正在安装Warp容器..." install_warp_container else echo "Warp容器已安装。" fi # 修改Hysteria2配置文件 modify_hysteria2_config echo "Hysteria2配置文件已修改。" } main # 重启sing-box服务 systemctl restart sing-box && echo "sing-box服务已重启。"
上面这段代码只是提供了修改hysteria2的配置内容其他协议没改,因为这种协议最暴力最速度快。其他的协议根据配置代码修改一下自行修改。
原作者的地址是:最好用的 sing-box 一键安装脚本 - 233Boy
这个脚本就像在家里装了一个魔法门,进来是 sing-box,出去是 WARP,全程无缝连接,既快速又安全。怎么样,是不是觉得很酷呢?赶紧试试吧!
注:文章内容是由chatgpt代写的 我只是给了一个提纲写了个大概!