Files
bgp-server/fix_config.sh
T
2025-07-11 19:24:43 +07:00

224 lines
6.0 KiB
Bash

#!/bin/bash
# Скрипт для исправления конфигурации BIRD
# Ubuntu 24.04
set -e
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Функции для вывода
print_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Проверка на root права
check_root() {
if [[ $EUID -ne 0 ]]; then
print_error "Этот скрипт должен быть запущен с правами root"
exit 1
fi
}
# Получение IP адреса сервера
get_server_ip() {
# Попытка получить основной IP адрес
local ip=$(ip route get 8.8.8.8 | awk '{print $7; exit}' 2>/dev/null)
if [[ -z "$ip" ]]; then
# Альтернативный способ
ip=$(hostname -I | awk '{print $1}' 2>/dev/null)
fi
if [[ -z "$ip" ]]; then
print_warning "Не удалось определить IP адрес, используем 192.168.1.1"
ip="192.168.1.1"
fi
echo "$ip"
}
# Создание простой конфигурации BIRD
create_simple_config() {
local server_ip=$(get_server_ip)
print_info "Создание простой конфигурации BIRD с IP: $server_ip"
# Создание простой конфигурации
cat > /etc/bird/bird.conf << EOF
# Простая конфигурация BIRD для BGP сервера
# Ubuntu 24.04
# Logging configuration
log "/var/log/bird/bird.log" all;
log stderr all;
# Router ID
router id $server_ip;
# Protocol configuration
protocol device {
scan time 10;
}
protocol direct {
disabled;
}
protocol kernel {
disabled;
}
# Статическая таблица маршрутов
protocol static {
# Маршруты будут загружаться из файла prefixes.txt
# через скрипт load_prefixes.py
}
# BGP Configuration
protocol bgp {
# Локальные настройки
local as 65001;
# Принимаем соединения от любых IP
listen bgp port 179;
# Настройки для пиров
import none; # Не импортируем маршруты от пиров
export all; # Экспортируем все маршруты пирам
}
EOF
print_success "Простая конфигурация создана"
}
# Проверка конфигурации
check_config() {
print_info "Проверка конфигурации BIRD..."
if bird -p /etc/bird/bird.conf; then
print_success "Конфигурация BIRD корректна"
return 0
else
print_error "Ошибка в конфигурации BIRD"
return 1
fi
}
# Перезапуск сервисов
restart_services() {
print_info "Перезапуск сервисов BIRD..."
# Остановка сервисов
systemctl stop bird 2>/dev/null || true
systemctl stop bird6 2>/dev/null || true
# Запуск BIRD IPv4
systemctl start bird
if systemctl is-active --quiet bird; then
print_success "BIRD (IPv4) запущен"
else
print_error "Ошибка запуска BIRD (IPv4)"
systemctl status bird
return 1
fi
# Попытка запуска BIRD6 если существует
if systemctl list-unit-files | grep -q bird6; then
systemctl start bird6
if systemctl is-active --quiet bird6; then
print_success "BIRD (IPv6) запущен"
else
print_warning "BIRD (IPv6) не запущен"
fi
fi
return 0
}
# Проверка работоспособности
test_functionality() {
print_info "Проверка работоспособности..."
# Проверка статуса сервисов
echo ""
print_info "Статус сервисов:"
systemctl status bird --no-pager -l
# Проверка портов
echo ""
print_info "Проверка портов:"
if netstat -tlnp | grep :179; then
print_success "Порт 179 прослушивается"
else
print_warning "Порт 179 не прослушивается"
fi
# Проверка протоколов
echo ""
print_info "Проверка протоколов:"
if birdc show protocols 2>/dev/null; then
print_success "BIRD отвечает на команды"
else
print_warning "BIRD не отвечает на команды"
fi
}
# Основная функция
main() {
echo "=========================================="
echo "BIRD Configuration Fix Script"
echo "Ubuntu 24.04"
echo "=========================================="
check_root
# Создание простой конфигурации
create_simple_config
# Проверка конфигурации
if check_config; then
# Перезапуск сервисов
if restart_services; then
# Проверка работоспособности
test_functionality
print_success "Конфигурация исправлена успешно!"
echo ""
echo "Полезные команды:"
echo " sudo birdc show protocols"
echo " sudo birdc show routes"
echo " sudo systemctl status bird"
echo " sudo journalctl -u bird -f"
else
print_error "Ошибка перезапуска сервисов"
exit 1
fi
else
print_error "Ошибка в конфигурации"
exit 1
fi
}
# Запуск основной функции
main "$@"