224 lines
6.0 KiB
Bash
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 "$@" |