批量管理VPS的ipv6地址

!/bin/bash

服务器信息列表

SERVERS=(
“user1@vps1_ipv6”
“user2@vps2_ipv6”
“user3@vps3_ipv6”
)

你的网络接口

INTERFACE=”eth0″

固定的 IPv6 前三组列表

PREFIX_LIST=(“2001:db8:2” “2001:db8:d” “2001:db8:5”)

生成随机的 IPv6 地址后 5 组

generate_ipv6_suffix() {
echo “$(printf “%x:%x:%x:%x:%x” $((RANDOM%65536)) $((RANDOM%65536)) \
$((RANDOM%65536)) $((RANDOM%65536)) $((RANDOM%65536)))”
}

备份文件

TIMESTAMP=$(date +”%Y%m%d_%H%M%S”)
BACKUP_FILE=”ipv6_backup_${TIMESTAMP}.txt”
LOGFILE=”ipv6_update.log”
ERROR_SERVERS=() # 记录失败的服务器

echo “===== $(date) 开始更新 IPv6 地址 =====” | tee -a $LOGFILE
echo “===== $(date) 备份文件: ${BACKUP_FILE} =====” | tee -a $LOGFILE

遍历每台服务器

for SERVER in “${SERVERS[@]}”; do
# 选择随机 IPv6 前缀
PREFIX=”${PREFIX_LIST[$RANDOM % ${#PREFIX_LIST[@]}]}”

# 生成完整的 IPv6 地址
NEW_IPV6="${PREFIX}:$(generate_ipv6_suffix)"

echo "正在更新 ${SERVER} 的 IPv6 地址为: ${NEW_IPV6}" | tee -a $LOGFILE

# 检查 SSH 连接是否成功
if ! ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no ${SERVER} "exit"; then
    echo "无法连接到 ${SERVER},跳过..." | tee -a $LOGFILE
    ERROR_SERVERS+=("${SERVER}")
    continue
fi

# 获取旧的 IPv6 地址
OLD_IPV6=$(ssh -o StrictHostKeyChecking=no ${SERVER} "ip -6 addr show ${INTERFACE} | grep 'inet6 ' | awk '{print \$2}' | head -n 1" 2>/dev/null)

echo "旧 IPv6: ${OLD_IPV6} -> 新 IPv6: ${NEW_IPV6}" | tee -a $BACKUP_FILE

# 远程更新 IPv6 地址
ssh -o StrictHostKeyChecking=no ${SERVER} << EOF | tee -a $LOGFILE
    BACKUP_DIR="/root/ipv6_backup/${TIMESTAMP}"
    sudo mkdir -p "\$BACKUP_DIR"
    sudo cp /etc/network/interfaces "\$BACKUP_DIR/interfaces.bak" 2>/dev/null
    sudo cp /etc/netplan/*.yaml "\$BACKUP_DIR/" 2>/dev/null
    sudo cp /etc/systemd/network/*.network "\$BACKUP_DIR/" 2>/dev/null

    sudo tar -czf "/root/ipv6_backup/backup_${TIMESTAMP}.tar.gz" -C "\$BACKUP_DIR" . && sudo rm -rf "\$BACKUP_DIR"

    if [ -f /etc/network/interfaces ]; then
        sudo sed -i '/iface ${INTERFACE} inet6 static/{n;s/address .*/address ${NEW_IPV6}/}' /etc/network/interfaces || exit 1
        sudo systemctl restart networking || exit 1
    elif ls /etc/netplan/*.yaml >/dev/null 2>&1; then
        sudo sed -i 's/\(addresses:\)\s*\[.*\]/\1 [${NEW_IPV6}]/' /etc/netplan/*.yaml || exit 1
        sudo netplan apply || exit 1
    elif systemctl is-active systemd-networkd >/dev/null 2>&1; then
        sudo sed -i 's/\(Address=\).*/\1${NEW_IPV6}\/64/' /etc/systemd/network/*.network || exit 1
        sudo systemctl restart systemd-networkd || exit 1
    elif nmcli -t -f RUNNING general 2>/dev/null | grep -q "running"; then
        sudo nmcli connection modify ${INTERFACE} ipv6.addresses ${NEW_IPV6}/64 || exit 1
        sudo nmcli connection up ${INTERFACE} || exit 1
    else
        exit 1
    fi

EOF

if [ $? -ne 0 ]; then
    echo "更新 ${SERVER} 的 IPv6 地址失败" | tee -a $LOGFILE
    ERROR_SERVERS+=("${SERVER}")
fi

done

if [ ${#ERROR_SERVERS[@]} -ne 0 ]; then
echo “===== 以下服务器更新失败 =====” | tee -a $LOGFILE
printf ‘%s\n’ “${ERROR_SERVERS[@]}” | tee -a $LOGFILE
fi

echo “===== $(date) 所有服务器 IPv6 更新完成! =====” | tee -a $LOGFILE

No Comments

Send Comment Edit Comment


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
Previous
Next