|
@@ -0,0 +1,181 @@
|
|
|
|
|
+#!/bin/bash
|
|
|
|
|
+# info: add system ip address
|
|
|
|
|
+# options: IPV6 NETMASK [INTERFACE] [USER] [IP_STATUS] [IP_NAME]
|
|
|
|
|
+#
|
|
|
|
|
+# 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 $HESTIA/func/main.sh
|
|
|
|
|
+source $HESTIA/func/ipv6.sh
|
|
|
|
|
+source $HESTIA/func/domain.sh
|
|
|
|
|
+source $HESTIA/conf/hestia.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 hestia"
|
|
|
|
|
+ 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 hestia"
|
|
|
|
|
+ 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 hestia 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'" > $HESTIA/data/ips/$ipv6
|
|
|
|
|
+chmod 660 $HESTIA/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_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
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+#----------------------------------------------------------#
|
|
|
|
|
+# Hestia #
|
|
|
|
|
+#----------------------------------------------------------#
|
|
|
|
|
+
|
|
|
|
|
+# Updating user counters
|
|
|
|
|
+increase_user_value "$user" '$IPV6_OWNED'
|
|
|
|
|
+if [ "$user" = 'admin' ]; then
|
|
|
|
|
+ if [ "$ip_status" = 'shared' ]; then
|
|
|
|
|
+ for user in $(ls $HESTIA/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
|