#!/bin/bash # downmyip - 自动从 /etc/bird/vars.conf 读取ASN并下载ROA配置 # 配置文件路径 VARS_CONF="/etc/bird/vars.conf" BASE_URL="https://ntwkapi.noc.zhuantou.com.cn/brnet/roa/api.php?as=" # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' get_asn() { grep "^define $1_ASN" "$VARS_CONF" | awk -F'[=; ]' '{print $5}' } # 函数:下载配置 download_roa() { local asn="$1" local filename="/etc/bird/whitelist/$2" if [ -z "$asn" ]; then echo -e "${YELLOW}⏭️ $filename 未配置ASN,跳过下载${NC}" return fi echo -e "${YELLOW}📥 正在下载 $filename (ASN: $asn)${NC}" if wget -q -O "$filename" "${BASE_URL}${asn}"; then echo -e "${GREEN}✅ $filename 下载成功${NC}" else echo -e "${RED}❌ $filename 下载失败${NC}" fi } # 函数:创建软链接 create_symlink() { local script_path=$(realpath "$0") local link_path="/usr/local/bin/downmyip" if [ -L "$link_path" ] || [ -f "$link_path" ]; then echo -e "${YELLOW}🔗 软链接已存在${NC}" return fi echo -e "${YELLOW}🔗 创建全局命令:downmyip${NC}" if ln -s "$script_path" "$link_path"; then echo -e "${GREEN}✅ 软链接创建完成!${NC}" else echo -e "${RED}❌ 请用sudo运行脚本以创建软链接${NC}" fi } # ===================== 主逻辑 ===================== clear echo -e "${YELLOW}===== downmyip - 自动下载ROA配置 =====${NC}" # 1. 检查vars.conf是否存在 if [ ! -f "$VARS_CONF" ]; then echo -e "${RED}❌ 配置文件不存在:$VARS_CONF${NC}" exit 1 fi # 2. 读取三个ASN INET_ASN=$(get_asn "LOCAL") DN42_ASN=$(get_asn "DN42") UNET_ASN=$(get_asn "UNET") echo -e "${GREEN}📄 从vars.conf读取ASN:${NC}" [ -n "$INET_ASN" ] && echo "公网ASN:$INET_ASN" || echo "公网ASN:未配置" [ -n "$DN42_ASN" ] && echo "DN42 ASN:$DN42_ASN" || echo "DN42 ASN:未配置" [ -n "$UNET_ASN" ] && echo "内网ASN:$UNET_ASN" || echo "内网ASN:未配置" echo # 3. 依次下载(不存在则跳过) download_roa "$INET_ASN" "inet.conf" download_roa "$DN42_ASN" "dn42.conf" download_roa "$UNET_ASN" "unet.conf" echo # 4. 重载BIRD配置 echo -e "${YELLOW}🔄 执行:birdc c${NC}" if command -v birdc &>/dev/null; then birdc c echo -e "${GREEN}✅ BIRD重载完成${NC}" else echo -e "${RED}❌ 未找到birdc命令${NC}" fi # 5. 创建全局软链接 create_symlink echo -e "\n${GREEN}===== 全部执行完毕 =====${NC}"