#!/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 "$@"