myvesta/bin/v-add-sys-ipv6
2024-04-14 22:28:39 +02:00

189 lines
5.7 KiB
Bash

#!/bin/bash
# info: add system ip address
# options: IPV6 NETMASK [INTERFACE] [USER] [IP_STATUS] [IP_NAME] [NAT_IP]
#
# The function adds ipv6 address into a system. It also creates rc scripts. You
# can specify ipv6 name which will be used as root domain for temporary aliases.
# For example, if you set a1.myhosting.com as name, each new domain created on
# this ipv6 will automatically receive alias $domain.a1.myhosting.com. Of course
# you must have wildcard record *.a1.myhosting.com pointed to ipv6. This feature
# is very handy when customer wants to test domain before dns migration.
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
ipv6=${1// /}
netmask=$2
interface="${3-eth0}"
user="${4-admin}"
ip_status="${5-shared}"
ip_name=$6
# Includes
source $VESTA/func/main.sh
source $VESTA/func/ipv6.sh
source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '2' "$#" 'IPV6 NETMASK [INTERFACE] [USER] [STATUS] [NAME]'
is_format_valid 'ipv6' 'netmaskv6' 'interface' 'user' 'ip_status'
is_ipv6_free
is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user"
if [ ! -z "$ip_name" ] ; then
is_format_valid 'ip_name'
fi
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
iface=$(get_ipv6_iface)
#cidr=$(convert_netmaskv6 $netmask)
cidr=$netmask
sys_ip_check=$(/sbin/ip -6 addr | grep "$ipv6")
if [ -z "$sys_ip_check" ]; then
# Adding sys ip
/sbin/ip addr add $ipv6/$cidr dev $interface
# Adding RHEL/CentOS/Fedora startup script
if [ -e "/etc/redhat-release" ]; then
sys_ip="# Added by vesta"
sys_ip="$sys_ip\nIPV6INIT=yes"
sys_ip="$sys_ip\nIPV6ADDR=$ipv6/$cidr"
sys_ip="$sys_ip\nIPV6_DEFAULTGW=$interface"
sys_ip="$sys_ip\nIPV6_AUTOCONF=no"
####### sys_ip="$sys_ip\nIPV6ADDR_SECONDARIES="""
echo -e $sys_ip > /etc/sysconfig/network-scripts/ifcfg-$interface
fi
# Adding Debian/Ubuntu startup script
if [ -e "/etc/debian_version" ]; then
sys_ip="\n# Added by vesta"
sys_ip="$sys_ip\niface $interface inet6 static"
sys_ip="$sys_ip\naddress $ipv6"
sys_ip="$sys_ip\nnetmask $cidr"
echo -e $sys_ip >> /etc/network/interfaces
fi
fi
# Generating timestamp
time_n_date=$(date +'%T %F')
time=$(echo "$time_n_date" |cut -f 1 -d \ )
date=$(echo "$time_n_date" |cut -f 2 -d \ )
# Adding vesta ip
echo "OWNER='$user'
STATUS='$ip_status'
NAME='$ip_name'
U_SYS_USERS=''
U_WEB_DOMAINS='0'
INTERFACE='$interface'
NETMASK='$netmask'
NAT=''
TIME='$time'
DATE='$date'
VERSION='6'" > $VESTA/data/ips/$ipv6
chmod 660 $VESTA/data/ips/$ipv6
# WEB support
if [ ! -z "$WEB_SYSTEM" ]; then
web_conf="/etc/$WEB_SYSTEM/conf.d/$ipv6.conf"
rm -f $web_conf
if [ "$WEB_SYSTEM" = 'httpd' ] || [ "$WEB_SYSTEM" = 'apache2' ]; then
if [ -z "$(/usr/sbin/apachectl -v | grep Apache/2.4)" ]; then
echo "NameVirtualHost [$ipv6]:$WEB_PORT" > $web_conf
fi
echo "Listen [$ipv6]:$WEB_PORT" >> $web_conf
fi
if [ "$WEB_SSL" = 'mod_ssl' ]; then
if [ -z "$(/usr/sbin/apachectl -v | grep Apache/2.4)" ]; then
echo "NameVirtualHost [$ipv6]:$WEB_SSL_PORT" >> $web_conf
fi
echo "Listen [$ipv6]:$WEB_SSL_PORT" >> $web_conf
fi
fi
# Proxy support
if [ ! -z "$PROXY_SYSTEM" ]; then
cat $WEBTPL/$PROXY_SYSTEM/proxy_ip.tpl |\
sed -e "s/%ip%/[$ipv6]/g" \
-e "s/%web_port%/$WEB_PORT/g" \
-e "s/%proxy_port%/$PROXY_PORT/g" \
> /etc/$PROXY_SYSTEM/conf.d/$ipv6.conf
# mod_extract_forwarded
# fw_conf="/etc/$WEB_SYSTEM/conf.d/mod_extract_forwarded.conf"
# if [ -e "$fw_conf" ]; then
# ips=$(grep 'MEFaccept ' $fw_conf | grep -v '#' | head -n1)
# sed -i "s/$ips/$ips $ip/g" $fw_conf
# fi
# mod_rpaf
rpaf_conf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
if [ -e "$rpaf_conf" ]; then
rpaf_str=$(grep RPAFproxy_ips $rpaf_conf)
rpaf_str="$rpaf_str $ipv6"
sed -i "s/.*RPAFproxy_ips.*/$rpaf_str/" $rpaf_conf
fi
#mod_remoteip
remoteip_conf="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
if [ -e "$remoteip_conf" ]; then
if [ $( grep -ic "$ipv6" $remoteip_conf ) -eq 0 ]; then
sed -i "s/<\/IfModule>/RemoteIPInternalProxy $ipv6\n<\/IfModule>/g" $remoteip_conf
fi
fi
fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Updating user counters
increase_user_value "$user" '$IPV6_OWNED'
if [ "$user" = 'admin' ]; then
if [ "$ip_status" = 'shared' ]; then
for user in $(ls $VESTA/data/users); do
increase_user_value "$user" '$IPV6_AVAIL'
done
else
increase_user_value 'admin' '$IPV6_AVAIL'
fi
else
increase_user_value "$user" '$IPV6_AVAIL'
increase_user_value 'admin' '$IPV6_AVAIL'
fi
# Restarting web server
$BIN/v-restart-web
check_result $? "Web restart failed" >/dev/null
# Restarting proxy server
if [ ! -z "$PROXY_SYSTEM" ]; then
$BIN/v-restart-proxy
check_result $? "Proxy restart failed" >/dev/null
fi
# Restarting firewall
if [ ! -z "$FIREWALL_SYSTEM" ]; then
$BIN/v-update-firewall
fi
# Logging
log_history "added system ipv6 address $ipv6" '' 'admin'
log_event "$OK" "$ARGUMENTS"
exit