pve使用脚本DHCP自动获取ipv4和ipv6

这段脚本可以直接复制后粘贴到PVE母机的终端里执行,
会生成 /root/getip.sh 这个自动获取IP的脚本,并添加计划任务。
每分钟检查一次vmbr0端口的IP,如果vmbr0 IP 异常就会DHCP重新请求IP
"inet 1[90][2.]" 这里检查IPV4是否为192或10开头,
"inet6 2[04]0[89e]:" 这里检查IPV6是否是公网IP,
没有IPV6公网的请自行删除vmbr0_ipv6的部分

自动获取ipv4及ipv6

#自动获取ipv4及ipv6
echo 'ifreload -a' >>/root/getip.sh
echo 'slepp 5s' >>/root/getip.sh
echo '#!/bin/sh' >/root/getip.sh
echo -e "\t" >>/root/getip.sh
echo 'vmbr0_ipv4=$(/usr/sbin/ip -4 a sh vmbr0 | grep "inet 1[90][2.]" | awk -F'"'"'[ /]+'"'"' '"'"'{print $3}'"'"')' >>/root/getip.sh
echo 'if [ -z "$vmbr0_ipv4" ]; then' >>/root/getip.sh
echo '    dhclient -4 -r vmbr0' >>/root/getip.sh
echo '    logger "vmbr0 has no IPv4,get a IP"' >>/root/getip.sh
echo '    /usr/sbin/dhclient -4 vmbr0' >>/root/getip.sh
echo '    pkill -9 dhclient' >>/root/getip.sh
echo 'fi' >>/root/getip.sh
echo 'logger "vmbr0 already has an IPv4:"$vmbr0_ipv4",skip.."' >>/root/getip.sh
echo -e "\t" >>/root/getip.sh
echo 'vmbr0_ipv6=$(/usr/sbin/ip -6 a sh vmbr0 | grep "inet6 2[04]0[89e]:" | awk -F'"'"'[ /]+'"'"' '"'"'{print $3}'"'"')' >>/root/getip.sh
echo 'if [ -z "$vmbr0_ipv6" ]; then' >>/root/getip.sh
echo '    dhclient -6 -r vmbr0' >>/root/getip.sh
echo '    logger "vmbr0 has no IPv6,get a IP"' >>/root/getip.sh
echo '    /usr/sbin/dhclient -6 vmbr0' >>/root/getip.sh
echo '    pkill -9 dhclient' >>/root/getip.sh
echo 'fi' >>/root/getip.sh
echo 'logger "vmbr0 already has an IPv6:"$vmbr0_ipv6",skip.."' >>/root/getip.sh
echo -e "\t" >>/root/getip.sh
chmod +x /root/getip.sh
echo '* * * * * /root/getip.sh' | crontab

 

自动获取ipv6

#自动获取ipv6
echo 'ifreload -a' >>/root/getip.sh
echo 'slepp 5s' >>/root/getip.sh
echo '#!/bin/sh' >/root/getip.sh
echo -e "\t" >>/root/getip.sh
echo 'vmbr0_ipv6=$(/usr/sbin/ip -6 a sh vmbr0 | grep "inet6 2[04]0[89e]:" | awk -F'"'"'[ /]+'"'"' '"'"'{print $3}'"'"')' >>/root/getip.sh
echo 'if [ -z "$vmbr0_ipv6" ]; then' >>/root/getip.sh
echo '    dhclient -6 -r vmbr0' >>/root/getip.sh
echo '    logger "vmbr0 has no IPv6,get a IP"' >>/root/getip.sh
echo '    /usr/sbin/dhclient -6 vmbr0' >>/root/getip.sh
echo '    pkill -9 dhclient' >>/root/getip.sh
echo 'fi' >>/root/getip.sh
echo 'logger "vmbr0 already has an IPv6:"$vmbr0_ipv6",skip.."' >>/root/getip.sh
echo -e "\t" >>/root/getip.sh
chmod +x /root/getip.sh
echo '* * * * * /root/getip.sh' | crontab

 

如果只添加ipv6,会导致dns全部变成ipv6,所以我们需要固定dns,改为只读,禁止写入
#查看dns配置文件权限
ll /etc/resolv.conf
#设置文件权限为只读
chmod 444 /etc/resolv.conf

 

删除定时任务

#查看已有定时任务
crontab -l

#编辑定时任务文件,删除不需要的任务和相关文件即可
nano /var/spool/cron/crontabs/root

#重启定时任务进程
service crond restart

自用备份(ipv6)

#请求v6地址
/usr/sbin/ifreload -a
sleep 30s
/usr/sbin/dhclient -6 vmbr1
pkill -9 dhclient

#dns文件复制
cp /root/resolv.conf /etc/resolv.conf

dns文件(resolv.conf

search com
nameserver 2409:8060:20ea:200::1
nameserver 114.114.114.114
nameserver 8.8.8.8

 

2024-9-19更新脚本

#!/bin/bash
#重载网络配置
/usr/sbin/ifreload -a
sleep 5s
#删除已有DHCP ipv6地址,关闭命令输出
/usr/sbin/dhclient -6 -r vmbr1 > /dev/null 2>&1
sleep 3s
#DHCP获取ipv6地址
/usr/sbin/dhclient -6 vmbr1 > /dev/null 2>&1
sleep 5s
#杀死进程
pkill -9 dhclient
#复制dns文件
cp /root/resolv.conf /etc/resolv.conf

 2025-8-8更新脚本

定时

#!/bin/bash

/usr/sbin/ifreload -a
sleep 3s
#删除已有ipv6地址
/usr/sbin/dhclient -6 -r vmbr0 > /dev/null 2>&1
sleep 3s
timeout 10s /usr/sbin/dhclient -6 vmbr0 > /dev/null 2>&1
sleep 10s
pkill -9 dhclient
cp /root/resolv.conf /etc/resolv.conf

重启

#重启等待
sleep 4m
#请求v6地址
/usr/sbin/ifreload -a
sleep 3s
timeout 10s /usr/sbin/dhclient -6 vmbr0
sleep 10s
pkill -9 dhclient

#dns文件复制
cp /root/resolv.conf /etc/resolv.conf

 

crontab-e 任务:

00 */2 * * * /root/getip.sh
@reboot /root/getip-reboot.sh
@reboot /root/cpupower.sh

版权声明:
作者:laop
链接:https://laopy.dpdns.org/31.html
来源:LPY-老朋友
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>