169 lines
6.5 KiB
Bash
Executable File
169 lines
6.5 KiB
Bash
Executable File
#!/bin/bash
|
||
#===============================================================================
|
||
# ШАГ 2: НАСТРОЙКА СЕТИ
|
||
#===============================================================================
|
||
# Запуск: sudo bash 01-k-server-initial-setup.02.sh
|
||
#
|
||
# Параметры сети настраиваются в файле 00.sh:
|
||
# NET_EXT_DHCP, NET_EXT_ADDRESS, NET_EXT_GATEWAY, NET_EXT_DNS
|
||
# NET_INT_DHCP, NET_INT_ADDRESS
|
||
#===============================================================================
|
||
|
||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||
source "$SCRIPT_DIR/01-k-server-initial-setup.00.sh"
|
||
|
||
init_log
|
||
check_root
|
||
|
||
print_header "ШАГ 2: НАСТРОЙКА СЕТИ"
|
||
|
||
#-------------------------------------------------------------------------------
|
||
# 2.1 Проверка интерфейсов
|
||
#-------------------------------------------------------------------------------
|
||
print_subheader "Проверка сетевых интерфейсов"
|
||
|
||
check_network_interfaces
|
||
|
||
#-------------------------------------------------------------------------------
|
||
# 2.2 Установка netplan
|
||
#-------------------------------------------------------------------------------
|
||
print_subheader "Проверка netplan"
|
||
|
||
if is_installed netplan.io; then
|
||
print_success "netplan.io установлен"
|
||
else
|
||
print_info "Установка netplan.io..."
|
||
apt install -y netplan.io
|
||
fi
|
||
|
||
#-------------------------------------------------------------------------------
|
||
# 2.3 Показать текущую конфигурацию сети
|
||
#-------------------------------------------------------------------------------
|
||
print_subheader "Параметры сети из конфигурации"
|
||
|
||
echo " Внешний интерфейс ($IFACE_EXT):"
|
||
if [[ "$NET_EXT_DHCP" == "true" ]]; then
|
||
echo " Режим: DHCP"
|
||
else
|
||
echo " Режим: Статический IP"
|
||
echo " Адрес: $NET_EXT_ADDRESS"
|
||
echo " Шлюз: $NET_EXT_GATEWAY"
|
||
echo " DNS: $NET_EXT_DNS"
|
||
fi
|
||
|
||
echo ""
|
||
echo " Внутренний интерфейс ($IFACE_INT):"
|
||
if [[ "$NET_INT_DHCP" == "true" ]]; then
|
||
echo " Режим: DHCP"
|
||
else
|
||
echo " Режим: Статический IP"
|
||
echo " Адрес: $NET_INT_ADDRESS"
|
||
fi
|
||
echo ""
|
||
|
||
#-------------------------------------------------------------------------------
|
||
# 2.4 Создание конфигурации netplan
|
||
#-------------------------------------------------------------------------------
|
||
print_subheader "Создание конфигурации netplan"
|
||
|
||
NETPLAN_FILE="/etc/netplan/01-netcfg.yaml"
|
||
|
||
# Проверка существующей конфигурации
|
||
if [[ -f "$NETPLAN_FILE" ]]; then
|
||
print_warning "Конфигурация netplan уже существует"
|
||
read -p "Перезаписать? [y/N]: " REWRITE
|
||
if [[ ! "$REWRITE" =~ ^[Yy]$ ]]; then
|
||
print_info "Конфигурация оставлена без изменений"
|
||
print_success "Шаг 2 завершён (пропуск)"
|
||
exit 0
|
||
fi
|
||
# Backup
|
||
cp "$NETPLAN_FILE" "${NETPLAN_FILE}.backup.$(date +%Y%m%d_%H%M%S)"
|
||
fi
|
||
|
||
# Генерация конфигурации в зависимости от настроек
|
||
{
|
||
echo "# Netplan configuration for Git Server"
|
||
echo "# Автоматически сгенерировано скриптом 01-k-server-initial-setup.02.sh"
|
||
echo ""
|
||
echo "network:"
|
||
echo " version: 2"
|
||
echo " renderer: networkd"
|
||
echo " ethernets:"
|
||
echo " ${IFACE_EXT}:"
|
||
|
||
if [[ "$NET_EXT_DHCP" == "true" ]]; then
|
||
# DHCP для внешнего интерфейса
|
||
echo " dhcp4: true"
|
||
else
|
||
# Статический IP для внешнего интерфейса
|
||
echo " dhcp4: false"
|
||
echo " addresses:"
|
||
echo " - ${NET_EXT_ADDRESS}"
|
||
echo " routes:"
|
||
echo " - to: default"
|
||
echo " via: ${NET_EXT_GATEWAY}"
|
||
# DNS
|
||
IFS=',' read -ra DNS_ARRAY <<< "$NET_EXT_DNS"
|
||
echo " nameservers:"
|
||
echo " addresses:"
|
||
for dns in "${DNS_ARRAY[@]}"; do
|
||
echo " - ${dns}"
|
||
done
|
||
fi
|
||
|
||
echo " ${IFACE_INT}:"
|
||
|
||
if [[ "$NET_INT_DHCP" == "true" ]]; then
|
||
# DHCP для внутреннего интерфейса
|
||
echo " dhcp4: true"
|
||
else
|
||
# Статический IP для внутреннего интерфейса
|
||
echo " dhcp4: false"
|
||
echo " addresses:"
|
||
echo " - ${NET_INT_ADDRESS}"
|
||
fi
|
||
|
||
} > "$NETPLAN_FILE"
|
||
|
||
print_success "Конфигурация netplan создана: $NETPLAN_FILE"
|
||
|
||
#-------------------------------------------------------------------------------
|
||
# 2.5 Показать созданную конфигурацию
|
||
#-------------------------------------------------------------------------------
|
||
echo ""
|
||
echo -e "${CYAN}Созданная конфигурация:${NC}"
|
||
echo ""
|
||
cat "$NETPLAN_FILE"
|
||
|
||
#-------------------------------------------------------------------------------
|
||
# 2.6 Применение
|
||
#-------------------------------------------------------------------------------
|
||
echo ""
|
||
print_warning "Внимание! Применение новой сетевой конфигурации может нарушить подключение."
|
||
echo ""
|
||
|
||
read -p "Применить сетевую конфигурацию сейчас? [y/N]: " APPLY_NET
|
||
|
||
if [[ "$APPLY_NET" =~ ^[Yy]$ ]]; then
|
||
print_info "Проверка конфигурации..."
|
||
|
||
# Попробовать netplan try с таймаутом (вернёт старую конфигурацию при проблемах)
|
||
if netplan try --timeout 15 2>&1; then
|
||
print_success "Сетевая конфигурация применена"
|
||
else
|
||
print_error "Ошибка в конфигурации netplan или прервано пользователем"
|
||
print_info "Конфигурация не применена. Проверьте и исправьте $NETPLAN_FILE"
|
||
exit 1
|
||
fi
|
||
else
|
||
print_warning "Конфигурация не применена"
|
||
echo ""
|
||
echo "Примените вручную после проверки:"
|
||
echo " sudo netplan try --timeout 30"
|
||
echo " # или"
|
||
echo " sudo netplan apply"
|
||
fi
|
||
|
||
print_success "Шаг 2 завершён: Сеть настроена"
|