You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							191 lines
						
					
					
						
							5.7 KiB
						
					
					
				
			
		
		
	
	
							191 lines
						
					
					
						
							5.7 KiB
						
					
					
				#!/bin/bash
 | 
						|
# info: update system IP
 | 
						|
# options: NONE
 | 
						|
#
 | 
						|
# example: v-update-sys-ip
 | 
						|
#          # Intended for internal usage
 | 
						|
#
 | 
						|
# This function scans configured IP in the system and register them with Hestia
 | 
						|
# internal database. This call is intended for use on vps servers, where IP is
 | 
						|
# set by hypervisor.
 | 
						|
 | 
						|
#----------------------------------------------------------#
 | 
						|
#                Variables & Functions                     #
 | 
						|
#----------------------------------------------------------#
 | 
						|
 | 
						|
# Includes
 | 
						|
# shellcheck source=/etc/hestiacp/hestia.conf
 | 
						|
source /etc/hestiacp/hestia.conf
 | 
						|
# shellcheck source=/usr/local/hestia/func/main.sh
 | 
						|
source $HESTIA/func/main.sh
 | 
						|
# shellcheck source=/usr/local/hestia/func/ip.sh
 | 
						|
source $HESTIA/func/ip.sh
 | 
						|
# shellcheck source=/usr/local/hestia/func/domain.sh
 | 
						|
source $HESTIA/func/domain.sh
 | 
						|
# load config file
 | 
						|
source_conf "$HESTIA/conf/hestia.conf"
 | 
						|
 | 
						|
#----------------------------------------------------------#
 | 
						|
#                    Verifications                         #
 | 
						|
#----------------------------------------------------------#
 | 
						|
 | 
						|
# Perform verification if read-only mode is enabled
 | 
						|
check_hestia_demo_mode
 | 
						|
 | 
						|
#----------------------------------------------------------#
 | 
						|
#                       Action                             #
 | 
						|
#----------------------------------------------------------#
 | 
						|
 | 
						|
confd=$(get_conf_d_name "$WEB_SYSTEM")
 | 
						|
pconfd=$(get_conf_d_name "$PROXY_SYSTEM")
 | 
						|
 | 
						|
# Listing system IP addresses
 | 
						|
nics="$(ip -d -j link show | jq -r '.[] | if .link_type == "loopback" then empty else .ifname end')"
 | 
						|
 | 
						|
for nic in $nics; do
 | 
						|
	nic_type="$(ip -d -j link show "$nic" | jq -r '.[].linkinfo.info_kind')"
 | 
						|
	if [ "$nic_type" = "bridge" ]; then
 | 
						|
		break
 | 
						|
	fi
 | 
						|
	nic_ipv4s="$(ip -4 -d -j addr show "$nic" | jq -r '.[] | select(length > 0) | .addr_info[] | if .scope == "global" then .local else empty end')"
 | 
						|
	if [ -z "$ips" ]; then
 | 
						|
		ips="$nic_ipv4s"
 | 
						|
	else
 | 
						|
		ips="$ips $nic_ipv4s"
 | 
						|
	fi
 | 
						|
done
 | 
						|
 | 
						|
v_ips="$(ls $HESTIA/data/ips/)"
 | 
						|
ip_num="$(echo "$ips" | wc -w)"
 | 
						|
v_ip_num="$(echo "$v_ips" | wc -w)"
 | 
						|
 | 
						|
# Checking primary IP change
 | 
						|
if [ "$ip_num" -eq "1" ] && [ "$v_ip_num" -eq "1" ]; then
 | 
						|
	if [ -n "$v_ips" ] && [ "$ips" != "$v_ips" ]; then
 | 
						|
		new_ip="$ips"
 | 
						|
		old_ip="$v_ips"
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
# Updating configs
 | 
						|
if [ -n "$old_ip" ]; then
 | 
						|
	mv $HESTIA/data/ips/$old_ip $HESTIA/data/ips/$new_ip
 | 
						|
 | 
						|
	# Generating timestamp
 | 
						|
	new_timestamp
 | 
						|
 | 
						|
	# Updating IP's values
 | 
						|
	ip="$new_ip"
 | 
						|
	interface="$(ip -d -j addr show | jq --arg IP "$ip" -r '.[] | if .addr_info[].local == $IP then .ifname else empty end')"
 | 
						|
	prefixlen="$(ip -d -j addr show | jq --arg IP "$ip" -r '.[].addr_info[] | if .local == $IP then .prefixlen else empty end')"
 | 
						|
	netmask="$(convert_cidr "$prefixlen")"
 | 
						|
	update_ip_value '$INTERFACE' "$interface"
 | 
						|
	update_ip_value '$NETMASK' "$netmask"
 | 
						|
	update_ip_value '$TIME' "$time"
 | 
						|
	update_ip_value '$DATE' "$date"
 | 
						|
 | 
						|
	# Updating PROXY
 | 
						|
	if [ -n "$PROXY_SYSTEM" ]; then
 | 
						|
		cd /etc/$PROXY_SYSTEM/$pconfd
 | 
						|
		if [ -e "$old_ip.conf" ]; then
 | 
						|
			mv $old_ip.conf $new_ip.conf
 | 
						|
			sed -i "s/$old_ip/$new_ip/g" $new_ip.conf
 | 
						|
		fi
 | 
						|
	fi
 | 
						|
 | 
						|
	# Updating WEB
 | 
						|
	if [ -n "$WEB_SYSTEM" ]; then
 | 
						|
		cd /etc/$WEB_SYSTEM/$confd
 | 
						|
 | 
						|
		if [ -e "$old_ip.conf" ]; then
 | 
						|
			mv $old_ip.conf $new_ip.conf
 | 
						|
			sed -i "s/$old_ip/$new_ip/g" $new_ip.conf
 | 
						|
		fi
 | 
						|
 | 
						|
		for user in $($BIN/v-list-sys-users plain); do
 | 
						|
			sed -i "s/$old_ip/$new_ip/g" $HESTIA/data/users/$user/web.conf
 | 
						|
			$BIN/v-rebuild-web-domains "$user" no
 | 
						|
		done
 | 
						|
 | 
						|
		if [ -e "/etc/apache2/mods-available/remoteip.conf" ]; then
 | 
						|
			sed -i "s/$old_ip/$new_ip/g" /etc/apache2/mods-available/remoteip.conf
 | 
						|
		fi
 | 
						|
 | 
						|
		if [ -e "/etc/apache2/mods-enabled/rpaf.conf" ]; then
 | 
						|
			sed -i "s/$old_ip/$new_ip/g" /etc/apache2/mods-enabled/rpaf.conf
 | 
						|
		fi
 | 
						|
 | 
						|
		$BIN/v-restart-proxy
 | 
						|
		$BIN/v-restart-web
 | 
						|
	fi
 | 
						|
 | 
						|
	# Updating MAIL
 | 
						|
	if [ -n "$IMAP_SYSTEM" ]; then
 | 
						|
		for user in $($BIN/v-list-sys-users plain); do
 | 
						|
			$BIN/v-rebuild-mail-domains "$user" no
 | 
						|
		done
 | 
						|
		$BIN/v-restart-mail
 | 
						|
	fi
 | 
						|
 | 
						|
	# Updating DNS
 | 
						|
	if [ -n "$DNS_SYSTEM" ]; then
 | 
						|
		for user in $($BIN/v-list-sys-users plain); do
 | 
						|
			sed -i "s/$old_ip/$new_ip/g" $HESTIA/data/users/$user/dns.conf
 | 
						|
			sed -i "s/$old_ip/$new_ip/g" $HESTIA/data/users/$user/dns/*.conf
 | 
						|
			$BIN/v-rebuild-dns-domains "$user" no
 | 
						|
		done
 | 
						|
		$BIN/v-restart-dns
 | 
						|
	fi
 | 
						|
 | 
						|
	# Updating FTP
 | 
						|
	if [ -n "$FTP_SYSTEM" ] && [ "$FTP_SYSTEM" = 'vsftpd' ]; then
 | 
						|
		ftp_conf="$(find /etc/ -maxdepth 2 -name $FTP_SYSTEM.conf)"
 | 
						|
		if [ -n "$ftp_conf" ]; then
 | 
						|
			sed -i "s/$old_ip/$new_ip/g" "$ftp_conf"
 | 
						|
			$BIN/v-restart-ftp
 | 
						|
		fi
 | 
						|
	fi
 | 
						|
 | 
						|
	# Updating firewall
 | 
						|
	if [ -n "$FIREWALL_SYSTEM" ]; then
 | 
						|
		sed -i "s/$old_ip/$new_ip/g" $HESTIA/data/firewall/*.conf
 | 
						|
		$BIN/v-update-firewall
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
# Adding system IP
 | 
						|
for ip in $ips; do
 | 
						|
	check_ip="$(ip addr list | grep -w "$ip")"
 | 
						|
	if [ ! -e "$HESTIA/data/ips/$ip" ] && [ -n "$check_ip" ]; then
 | 
						|
		interface="$(ip -d -j addr show | jq --arg IP "$ip" -r '.[] | if .addr_info[].local == $IP then .ifname else empty end')"
 | 
						|
		prefixlen="$(ip -d -j addr show | jq --arg IP "$ip" -r '.[].addr_info[] | if .local == $IP then .prefixlen else empty end')"
 | 
						|
		netmask="$(convert_cidr "$prefixlen")"
 | 
						|
		$BIN/v-add-sys-ip "$ip" "$netmask" "$interface"
 | 
						|
	elif [ -e "/etc/nginx/conf.d/$ip.conf" ]; then
 | 
						|
		process_http2_directive "/etc/nginx/conf.d/$ip.conf"
 | 
						|
	fi
 | 
						|
done
 | 
						|
 | 
						|
# Updating NAT
 | 
						|
if [ -e $HESTIA/conf/nopublickip ]; then
 | 
						|
	ip="$(ls -t $HESTIA/data/ips/ | head -n1)"
 | 
						|
	$BIN/v-change-sys-ip-nat "$ip" "$ip"
 | 
						|
else
 | 
						|
	pub_ipv4="$(curl -fsLm5 --retry 2 --ipv4 -H "Simple-Hestiacp: yes" https://hestiaip.brepo.ru/)"
 | 
						|
	if [ ! -e "$HESTIA/data/ips/$pub_ipv4" ]; then
 | 
						|
		if [ -z "$(grep -R "$pub_ipv4" $HESTIA/data/ips/)" ]; then
 | 
						|
			ip="$(ls -t $HESTIA/data/ips/ | head -n1)"
 | 
						|
			$BIN/v-change-sys-ip-nat "$ip" "$pub_ipv4"
 | 
						|
		fi
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
# Updating IP usage counters
 | 
						|
$BIN/v-update-sys-ip-counters
 | 
						|
 | 
						|
#----------------------------------------------------------#
 | 
						|
#                       Hestia                             #
 | 
						|
#----------------------------------------------------------#
 | 
						|
 | 
						|
exit
 |