一键禁用 IPv6 脚本,适用于使用 sysctl 的 Linux 发行版
方法一:将脚本保存为文件后执行 (推荐)
- 在您的 VPS 上,创建一个脚本文件 :
nano disable_ipv6.sh
将下面的完整脚本代码粘贴进去 :
#!/bin/bash # ================================================================= # 一键禁用IPv6脚本 (基于sysctl安全方法) # 适用于 Debian, Ubuntu 及其他使用 sysctl 的 Linux 发行版 # ================================================================= # 检查是否以root用户运行 if [ "$(id -u)" -ne 0 ]; then echo "错误:此脚本必须以root用户权限运行。" >&2 echo "请尝试使用 'sudo -i' 或 'sudo bash' 切换到root用户后执行。" >&2 exit 1 fi # 定义配置文件路径 CONFIG_FILE="/etc/sysctl.d/99-disable-ipv6.conf" echo "🚀 开始执行IPv6禁用程序..." echo "--------------------------------------------------" # 使用cat和HERE Document创建并写入配置文件 # 这种方法会直接覆盖同名旧文件,确保配置是全新的 echo "1. 正在创建并写入sysctl配置文件: $CONFIG_FILE" cat > "$CONFIG_FILE" << EOF # 由一键脚本自动生成,用于禁用IPv6 # 禁用所有网络接口的IPv6 net.ipv6.conf.all.disable_ipv6 = 1 # 禁用新接口(如热插拔的USB网卡)的默认IPv6设置 net.ipv6.conf.default.disable_ipv6 = 1 # 禁用回环接口(lo)的IPv6 net.ipv6.conf.lo.disable_ipv6 = 1 EOF # 检查文件是否创建成功 if [ -f "$CONFIG_FILE" ]; then echo " ✅ 配置文件创建成功。" else echo " ❌ 错误:配置文件创建失败!脚本终止。" >&2 exit 1 fi echo "" echo "2. 正在应用内核参数使其立即生效..." # 应用 sysctl 配置,并将输出重定向到/dev/null以保持界面整洁 sysctl -p "$CONFIG_FILE" > /dev/null 2>&1 # 检查IPv6是否真的被禁用了 # 读取 all.disable_ipv6 的当前值,看是否为1 ipv6_status=$(cat /proc/sys/net/ipv6/conf/all/disable_ipv6) if [ "$ipv6_status" -eq 1 ]; then echo " ✅ 内核参数已应用,IPv6当前状态为【已禁用】。" echo "--------------------------------------------------" echo "🎉 恭喜!IPv6已成功禁用。" echo "此配置是永久性的,重启服务器后依然生效。" echo "为了确保所有正在运行的服务都切换到无IPv6模式,强烈建议您现在重启服务器: sudo reboot" else echo " ❌ 错误:应用内核参数后,状态检查失败!" >&2 echo " 请手动检查 $CONFIG_FILE 文件和 'sysctl -p' 命令的输出。" >&2 exit 1 fi exit 0
- 保存并退出 ( 在
nano
中是Ctrl+X
,然后按Y
,再按Enter
)。 - 给脚本添加执行权限 :
chmod +x disable_ipv6.sh
- 运行脚本 :
./disable_ipv6.sh
方法二:终极懒人一键命令 (适合批量操作)
对于大量的 VPS,您可以直接复制下面这一整行命令,在 SSH 终端里粘贴并回车即可。它会自动下载并执行上述脚本,无需手动创建文件。
bash -c "$(curl -fsSL https://cdn.vdj.me/shell_scripts/disable_ipv6.sh)"
这个命令做了什么?
它使用 curl
从一个安全的链接(Gist 是 GitHub 的服务)下载脚本内容,然后通过管道 |
直接交给 bash
来解释执行。整个过程全自动,非常高效。
两种方法效果完全相同,可以根据自己的喜好和安全习惯来选择。