Рубрики
bash

ipv6_gen_from_mac

vim gen_ipv6_from_mac.sh
------------------------
#!/bin/bash
# vars
IFACE=ens5
PREFIX=2001:abc::
PROG_IPV6CALC="/usr/bin/ipv6calc"

# Script test prog
[[ -e "${PROG_IPV6CALC}" ]]
if [[ "$?" != "0" ]]; then
        echo -e "\n\tPlease install ipv6calc \n\tNot run script, exit. \n ";
        exit;
fi

#functions
macaddr(){
ip link show | grep -A 1 ${IFACE} | grep ether | awk '{print $2}'
}
ipgen(){
ipv6calc --in prefix+mac ${PREFIX} "$(macaddr)" 2>/dev/null
}
ipaddressthen(){
ip -o a | grep ${IFACE} | grep "$(ipgen)" | awk '{print $4}'
}
badipaddressthen(){
echo "$(ipaddressthen)"|sed 's/\/64//'
}


#
IP_ADDRESS_AND_PREFIX_LIKE="$(ipgen)/64"

echo -e " \n\tInterface: \t${IFACE} \n\tPrefix:\t${PREFIX}\n\tIP address generated:\t$(ipgen) \n\tIP address then:\t$(ipaddressthen)\n"

# Script add ip
if [[ "$(badipaddressthen)" != "$(ipgen)" ]]
     then
      ip -6 a a ${IP_ADDRESS_AND_PREFIX_LIKE} dev ${IFACE}
      echo -e "ADD IP ${IP_ADDRESS_AND_PREFIX_LIKE} dev  ${IFACE}"
else
   echo -e "END"
   exit
fi
------------------------


vim  /etc/systemd/system/gen_ipv6_from_mac.service
--------------------------------------------------
[Unit]
Description=gen_ipv6_from_mac.sh
 
[Service]
Type=oneshot
ExecStart=/usr/bin/gen_ipv6_from_mac.sh
Restart=on-failure
 
[Install]
WantedBy=multi-user.target
--------------------------------------------------


vim /etc/systemd/system/gen_ipv6_from_mac.timer
-----------------------------------------------
[Unit]
Description=gen_ipv6_from_mac
 
[Timer]
OnUnitActiveSec=30 

[Install]
WantedBy=timers.target
-----------------------------------------------






systemctl daemon-reload
systemctl enable gen_ipv6_from_mac.service
systemctl enable gen_ipv6_from_mac.timer
systemctl start gen_ipv6_from_mac.service
systemctl start gen_ipv6_from_mac.timer
systemctl status gen_ipv6_from_mac.service
systemctl status gen_ipv6_from_mac.timer

systemctl list-timers 
systemctl list-timers gen_ipv6_from_mac.timer


/etc/systemd/system/gen_ipv6_from_mac.timer
каждые 30 сек долбит в скрипт и для ipv6 генерируется адрес (естественно если его еще нет, то генерит, если есть, то не генерит)