#!/bin/bash

# 一键彻底关闭 VPS 的 IPv6 脚本
# 作者: Trae AI
# 日期: 2026-03-23

echo "=== 开始关闭 IPv6 ==="

# 1. 临时禁用 IPv6
echo "1. 临时禁用 IPv6..."
sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl -w net.ipv6.conf.default.disable_ipv6=1
sysctl -w net.ipv6.conf.lo.disable_ipv6=1

# 2. 永久禁用 IPv6（通过 sysctl 配置）
echo "2. 永久禁用 IPv6（通过 sysctl 配置）..."
cat > /etc/sysctl.d/disable-ipv6.conf << EOF
# 禁用 IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOF

# 3. 加载新的 sysctl 配置
echo "3. 加载新的 sysctl 配置..."
sysctl -p /etc/sysctl.d/disable-ipv6.conf

# 4. 修改 GRUB 配置，添加 ipv6.disable=1 参数
echo "4. 修改 GRUB 配置..."
if [ -f /etc/default/grub ]; then
    # 检查 GRUB_CMDLINE_LINUX 中是否已经包含 ipv6.disable=1
    if grep -q "ipv6.disable=1" /etc/default/grub; then
        echo "   GRUB 中已包含 ipv6.disable=1 参数，跳过修改"
    else
        # 备份原文件
        cp /etc/default/grub /etc/default/grub.bak
        # 修改 GRUB_CMDLINE_LINUX
        sed -i 's/\(GRUB_CMDLINE_LINUX=\"\)/\1ipv6.disable=1 /' /etc/default/grub
        # 修复可能的重复空格
        sed -i 's/  / /g' /etc/default/grub
        echo "   GRUB 配置已更新"
    fi
else
    echo "   警告：未找到 /etc/default/grub 文件"
fi

# 5. 更新 GRUB 配置
echo "5. 更新 GRUB 配置..."
if command -v update-grub > /dev/null; then
    update-grub
elif command -v grub-mkconfig > /dev/null; then
    grub-mkconfig -o /boot/grub/grub.cfg
else
    echo "   警告：未找到 update-grub 或 grub-mkconfig 命令"
fi

# 6. 验证 IPv6 是否已禁用
echo "6. 验证 IPv6 状态..."
echo "   === sysctl 配置 ==="
sysctl net.ipv6.conf.all.disable_ipv6 net.ipv6.conf.default.disable_ipv6 net.ipv6.conf.lo.disable_ipv6
echo "   === 网络接口状态 ==="
ip addr | grep -E 'inet6|inet'

# 7. 检查是否有 inet6 地址
if ip addr | grep -q inet6; then
    echo "   警告：仍然存在 IPv6 地址，可能需要重启系统"
else
    echo "   成功：IPv6 已完全禁用"
fi

echo "=== 操作完成 ==="
echo "提示：若要使 GRUB 配置生效，建议重启系统"
