在不关闭ipv6的情况下,禁止这个域名的ipv6解析

替换其中的domainip_file即可。

ipv6-cdn-blocker.sh

#!/bin/bash

# 获取当前时间戳
timestamp=$(date +"%Y-%m-%d %H:%M:%S")

# 目标域名
domain="example.com"

# 文件用于存储上次获取的 IPv6 地址列表
ip_file="/home/scripts/config/ipv6_addresses.txt"

# 获取上次保存的 IPv6 地址列表
previous_ipv6_addresses=$(cat "$ip_file")

# 获取目标域名的最新 IPv6 地址列表
current_ipv6_addresses=$(dig AAAA +short $domain)

if [[ -n $current_ipv6_addresses ]]; then
    echo "$timestamp - 获取到 $domain 的最新 IPv6 地址列表为:"
    echo "$current_ipv6_addresses"

    # 将最新的 IPv6 地址列表转换为数组
    IFS=$'\n' read -rd '' -a current_addresses_array <<<"$current_ipv6_addresses"

    # 设置新的 ip6tables 规则
    for address in "${current_addresses_array[@]}"; do
        # 检查规则是否已存在
        if ! sudo ip6tables -C INPUT -d $address -j DROP 2>/dev/null; then
            sudo ip6tables -A INPUT -d $address -j DROP
        fi
        if ! sudo ip6tables -C OUTPUT -d $address -j DROP 2>/dev/null; then
            sudo ip6tables -A OUTPUT -d $address -j DROP
        fi
        if ! sudo ip6tables -C FORWARD -d $address -j DROP 2>/dev/null; then
            sudo ip6tables -A FORWARD -d $address -j DROP
        fi
    done

    # 删除旧的 ip6tables 规则
    for address in $previous_ipv6_addresses; do
        if [[ ! " ${current_addresses_array[@]} " =~ " ${address} " ]]; then
            sudo ip6tables -D INPUT -d $address -j DROP
            sudo ip6tables -D OUTPUT -d $address -j DROP
            sudo ip6tables -D FORWARD -d $address -j DROP
        fi
    done

    # 保存新的 IPv6 地址列表到文件
    echo "$current_ipv6_addresses" >"$ip_file"

    # 保存 ip6tables 规则
    sudo service netfilter-persistent save

    echo "$timestamp - 已更新针对 $domain 的 IPv6 过滤规则"
else
    echo "$timestamp - 无法获取到 $domain 的 IPv6 地址"
fi
mkdir -p /home/scripts/log

crontab:

# 禁止域名的ipv6解析
* * * * * sudo bash /home/scripts/ipv6-cdn-blocker.sh > /home/scripts/log/ipv6-cdn-blocker.log 2>&1
Last modification:June 15, 2023
V50%看看实力