#!/bin/bash # BGP Server Installation Script for Ubuntu 24.04 # Устанавливает BIRD и настраивает BGP сервер 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 } # Проверка версии Ubuntu check_ubuntu_version() { if [[ ! -f /etc/os-release ]]; then print_error "Не удалось определить версию ОС" exit 1 fi source /etc/os-release if [[ "$ID" != "ubuntu" ]]; then print_error "Этот скрипт предназначен только для Ubuntu" exit 1 fi if [[ "$VERSION_ID" != "24.04" ]]; then print_warning "Скрипт тестировался на Ubuntu 24.04. Текущая версия: $VERSION_ID" fi print_success "Обнаружена Ubuntu $VERSION_ID" } # Обновление системы update_system() { print_info "Обновление системы..." apt update apt upgrade -y print_success "Система обновлена" } # Установка BIRD install_bird() { print_info "Установка BIRD..." # Установка BIRD2 apt install -y bird2 # Проверка установки if command -v bird &> /dev/null; then print_success "BIRD установлен успешно" else print_error "Ошибка установки BIRD" exit 1 fi } # Создание директорий create_directories() { print_info "Создание директорий..." mkdir -p /var/log/bird mkdir -p /opt/bgp-server/data mkdir -p /opt/bgp-server/scripts mkdir -p /opt/bgp-server/logs # Установка прав доступа chown -R bird:bird /var/log/bird chmod 755 /opt/bgp-server/scripts print_success "Директории созданы" } # Копирование файлов конфигурации copy_config_files() { print_info "Копирование файлов конфигурации..." # Резервная копия оригинальных конфигураций if [[ -f /etc/bird/bird.conf ]]; then cp /etc/bird/bird.conf /etc/bird/bird.conf.backup.$(date +%Y%m%d_%H%M%S) fi if [[ -f /etc/bird/bird6.conf ]]; then cp /etc/bird/bird6.conf /etc/bird/bird6.conf.backup.$(date +%Y%m%d_%H%M%S) fi # Копирование новых конфигураций cp config/bird.conf /etc/bird/bird.conf cp config/bird6.conf /etc/bird/bird6.conf # Копирование скриптов cp scripts/load_prefixes.py /opt/bgp-server/scripts/ cp scripts/monitor.py /opt/bgp-server/scripts/ # Копирование файла с префиксами cp data/prefixes.txt /opt/bgp-server/data/ # Установка прав на выполнение для скриптов chmod +x /opt/bgp-server/scripts/*.py print_success "Файлы конфигурации скопированы" } # Настройка firewall configure_firewall() { print_info "Настройка firewall..." # Установка ufw если не установлен if ! command -v ufw &> /dev/null; then apt install -y ufw fi # Разрешение BGP порта ufw allow 179/tcp comment "BGP" # Разрешение SSH ufw allow ssh comment "SSH" # Включение firewall ufw --force enable print_success "Firewall настроен" } # Настройка systemd сервисов configure_services() { print_info "Настройка systemd сервисов..." # Включение автозапуска systemctl enable bird systemctl enable bird6 # Запуск сервисов systemctl start bird systemctl start bird6 # Проверка статуса if systemctl is-active --quiet bird; then print_success "BIRD (IPv4) запущен" else print_error "Ошибка запуска BIRD (IPv4)" systemctl status bird fi if systemctl is-active --quiet bird6; then print_success "BIRD (IPv6) запущен" else print_error "Ошибка запуска BIRD (IPv6)" systemctl status bird6 fi } # Проверка конфигурации check_configuration() { print_info "Проверка конфигурации BIRD..." # Проверка синтаксиса IPv4 конфигурации if bird -p /etc/bird/bird.conf; then print_success "Конфигурация BIRD (IPv4) корректна" else print_error "Ошибка в конфигурации BIRD (IPv4)" exit 1 fi # Проверка синтаксиса IPv6 конфигурации if bird6 -p /etc/bird/bird6.conf; then print_success "Конфигурация BIRD (IPv6) корректна" else print_error "Ошибка в конфигурации BIRD (IPv6)" exit 1 fi } # Создание systemd таймера для автоматической загрузки префиксов create_systemd_timer() { print_info "Создание systemd таймера для загрузки префиксов..." # Создание сервиса cat > /etc/systemd/system/bgp-prefix-loader.service << EOF [Unit] Description=BGP Prefix Loader After=bird.service bird6.service [Service] Type=oneshot ExecStart=/usr/bin/python3 /opt/bgp-server/scripts/load_prefixes.py User=root StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target EOF # Создание таймера cat > /etc/systemd/system/bgp-prefix-loader.timer << EOF [Unit] Description=Run BGP Prefix Loader every 5 minutes Requires=bgp-prefix-loader.service [Timer] OnBootSec=1min OnUnitActiveSec=5min Unit=bgp-prefix-loader.service [Install] WantedBy=timers.target EOF # Перезагрузка systemd и включение таймера systemctl daemon-reload systemctl enable bgp-prefix-loader.timer systemctl start bgp-prefix-loader.timer print_success "Systemd таймер создан" } # Создание alias для удобства create_aliases() { print_info "Создание alias команд..." # Добавление в .bashrc root пользователя cat >> /root/.bashrc << EOF # BGP Server Aliases alias bgp-status='python3 /opt/bgp-server/scripts/monitor.py' alias bgp-load='python3 /opt/bgp-server/scripts/load_prefixes.py' alias bgp-monitor='python3 /opt/bgp-server/scripts/monitor.py -c' alias bird-status='systemctl status bird bird6' alias bird-restart='systemctl restart bird bird6' alias bird-logs='journalctl -u bird -f' alias bird6-logs='journalctl -u bird6 -f' EOF print_success "Alias команды добавлены" } # Финальная проверка final_check() { print_info "Выполнение финальной проверки..." # Проверка статуса сервисов echo "" print_info "Статус сервисов:" systemctl status bird --no-pager -l echo "" systemctl status bird6 --no-pager -l # Проверка прослушивания порта if netstat -tlnp | grep :179; then print_success "BGP порт 179 прослушивается" else print_warning "BGP порт 179 не прослушивается" fi # Проверка firewall echo "" print_info "Статус firewall:" ufw status print_success "Установка завершена успешно!" } # Основная функция main() { echo "==========================================" echo "BGP Server Installation Script" echo "Ubuntu 24.04" echo "==========================================" check_root check_ubuntu_version update_system install_bird create_directories copy_config_files configure_firewall configure_services check_configuration create_systemd_timer create_aliases final_check echo "" echo "==========================================" echo "УСТАНОВКА ЗАВЕРШЕНА" echo "==========================================" echo "" echo "Полезные команды:" echo " bgp-status - Показать статус BGP сервера" echo " bgp-load - Загрузить префиксы из файла" echo " bgp-monitor - Непрерывный мониторинг" echo " bird-status - Статус сервисов BIRD" echo " bird-restart - Перезапуск сервисов BIRD" echo " bird-logs - Просмотр логов BIRD" echo "" echo "Файлы конфигурации:" echo " /etc/bird/bird.conf - Конфигурация BIRD IPv4" echo " /etc/bird/bird6.conf - Конфигурация BIRD IPv6" echo " /opt/bgp-server/data/prefixes.txt - Файл с префиксами" echo "" echo "Логи:" echo " /var/log/bird/bird.log - Логи BIRD IPv4" echo " /var/log/bird/bird6.log - Логи BIRD IPv6" echo "" echo "Для применения изменений выполните:" echo " source /root/.bashrc" echo "" } # Запуск основной функции main "$@"