From 825255c64ac94d9ed13b4bcfb216b9bff7f770bf Mon Sep 17 00:00:00 2001 From: Denis Shatskiy Date: Fri, 11 Jul 2025 19:24:43 +0700 Subject: [PATCH] update --- DEPLOY.md | 293 ++++++++++++++++++++++++++++ TROUBLESHOOTING.md | 279 ++++++++++++++++++++++++++ config/bird.conf | 30 ++- config/bird6.conf | 30 ++- config/bird_any_peer.conf | 97 +++++++++ config/bird_simple.conf | 42 ++++ enable_any_peer.sh | 401 ++++++++++++++++++++++++++++++++++++++ fix_config.sh | 224 +++++++++++++++++++++ install.sh | 269 +++++++++++++++++++++++-- install_bird6.sh | 198 +++++++++++++++++++ 10 files changed, 1813 insertions(+), 50 deletions(-) create mode 100644 DEPLOY.md create mode 100644 TROUBLESHOOTING.md create mode 100644 config/bird_any_peer.conf create mode 100644 config/bird_simple.conf create mode 100644 enable_any_peer.sh create mode 100644 fix_config.sh create mode 100644 install_bird6.sh diff --git a/DEPLOY.md b/DEPLOY.md new file mode 100644 index 0000000..22a9327 --- /dev/null +++ b/DEPLOY.md @@ -0,0 +1,293 @@ +# Развертывание BGP сервера на Ubuntu 24.04 + +## Клонирование репозитория + +### 1. Клонирование с веткой bird + +```bash +# Клонирование репозитория с веткой bird +git clone -b bird bgp-server + +# Переход в директорию проекта +cd bgp-server +``` + +### 2. Альтернативные способы клонирования + +#### Если ветка bird существует: +```bash +# Клонирование с указанием ветки +git clone -b bird https://github.com/username/bgp-server.git + +# Или клонирование и переключение на ветку +git clone https://github.com/username/bgp-server.git +cd bgp-server +git checkout bird +``` + +#### Если нужно создать ветку bird: +```bash +# Клонирование основного репозитория +git clone https://github.com/username/bgp-server.git +cd bgp-server + +# Создание и переключение на ветку bird +git checkout -b bird + +# Добавление всех файлов +git add . + +# Коммит изменений +git commit -m "Initial BGP server implementation" + +# Отправка ветки на сервер +git push origin bird +``` + +### 3. Проверка клонирования + +```bash +# Проверка текущей ветки +git branch + +# Проверка содержимого +ls -la + +# Проверка статуса git +git status +``` + +## Установка на сервере + +### 1. Подготовка системы + +```bash +# Обновление системы +sudo apt update && sudo apt upgrade -y + +# Установка необходимых пакетов +sudo apt install -y python3 python3-pip git curl wget +``` + +### 2. Клонирование и установка + +```bash +# Клонирование репозитория (замените на ваш URL) +git clone -b bird https://github.com/username/bgp-server.git +cd bgp-server + +# Проверка файлов +ls -la + +# Сделать скрипт установки исполняемым +chmod +x install.sh + +# Запуск установки +sudo ./install.sh +``` + +### 3. Настройка после установки + +```bash +# Настройка IP адреса и ASN +sudo nano /etc/bird/bird.conf +# Измените: +# router id YOUR_SERVER_IP; +# local as YOUR_ASN; + +# Настройка префиксов +sudo nano /opt/bgp-server/data/prefixes.txt +# Добавьте ваши префиксы + +# Загрузка префиксов +python3 /opt/bgp-server/scripts/load_prefixes.py + +# Проверка статуса +python3 /opt/bgp-server/scripts/monitor.py +``` + +## Примеры команд для разных репозиториев + +### GitHub +```bash +git clone -b bird https://github.com/username/bgp-server.git +``` + +### GitLab +```bash +git clone -b bird https://gitlab.com/username/bgp-server.git +``` + +### Bitbucket +```bash +git clone -b bird https://bitbucket.org/username/bgp-server.git +``` + +### SSH (если настроен ключ) +```bash +git clone -b bird git@github.com:username/bgp-server.git +``` + +## Автоматическое развертывание + +### Скрипт автоматического развертывания + +Создайте файл `deploy.sh`: + +```bash +#!/bin/bash + +# Автоматическое развертывание BGP сервера +REPO_URL="https://github.com/username/bgp-server.git" +BRANCH="bird" +INSTALL_DIR="/opt/bgp-server-deploy" + +echo "Начинаем развертывание BGP сервера..." + +# Создание директории +sudo mkdir -p $INSTALL_DIR +cd $INSTALL_DIR + +# Клонирование репозитория +echo "Клонирование репозитория..." +git clone -b $BRANCH $REPO_URL . + +# Проверка успешности клонирования +if [ $? -eq 0 ]; then + echo "Репозиторий успешно клонирован" + + # Запуск установки + chmod +x install.sh + sudo ./install.sh +else + echo "Ошибка при клонировании репозитория" + exit 1 +fi +``` + +### Использование скрипта развертывания + +```bash +# Создание скрипта +nano deploy.sh + +# Сделать исполняемым +chmod +x deploy.sh + +# Запуск +./deploy.sh +``` + +## Проверка установки + +### 1. Проверка сервисов + +```bash +# Статус BIRD сервисов +sudo systemctl status bird bird6 + +# Проверка портов +sudo netstat -tlnp | grep :179 + +# Проверка процессов +ps aux | grep bird +``` + +### 2. Проверка конфигурации + +```bash +# Проверка синтаксиса конфигурации +sudo birdc -p /etc/bird/bird.conf +sudo bird6c -p /etc/bird/bird6.conf + +# Проверка протоколов +sudo birdc show protocols +``` + +### 3. Проверка префиксов + +```bash +# Загрузка префиксов +python3 /opt/bgp-server/scripts/load_prefixes.py + +# Проверка маршрутов +sudo birdc show routes +``` + +## Troubleshooting + +### Проблема: Не удается клонировать репозиторий + +```bash +# Проверка подключения к интернету +ping -c 3 github.com + +# Проверка git +git --version + +# Очистка кэша git +git config --global credential.helper cache +``` + +### Проблема: Ветка bird не найдена + +```bash +# Просмотр доступных веток +git branch -r + +# Клонирование без указания ветки +git clone https://github.com/username/bgp-server.git +cd bgp-server + +# Создание локальной ветки +git checkout -b bird origin/main +``` + +### Проблема: Нет прав доступа + +```bash +# Настройка SSH ключей (если используете SSH) +ssh-keygen -t rsa -b 4096 -C "your_email@example.com" +cat ~/.ssh/id_rsa.pub +# Добавьте ключ в настройки GitHub/GitLab + +# Или используйте HTTPS с токеном +git clone https://username:token@github.com/username/bgp-server.git +``` + +## Обновление репозитория + +### Обновление кода + +```bash +# Переход в директорию проекта +cd /path/to/bgp-server + +# Получение обновлений +git fetch origin + +# Переключение на ветку bird +git checkout bird + +# Обновление кода +git pull origin bird + +# Перезапуск сервисов (если нужно) +sudo systemctl restart bird bird6 +``` + +### Автоматическое обновление + +Создайте cron задачу для автоматического обновления: + +```bash +# Редактирование crontab +crontab -e + +# Добавление задачи (обновление каждый день в 2:00) +0 2 * * * cd /opt/bgp-server && git pull origin bird && sudo systemctl restart bird bird6 +``` + +--- + +**Готово!** Теперь у вас есть полные инструкции по клонированию и развертыванию BGP сервера. 🚀 \ No newline at end of file diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md new file mode 100644 index 0000000..210d8e5 --- /dev/null +++ b/TROUBLESHOOTING.md @@ -0,0 +1,279 @@ +# Troubleshooting - Решение проблем + +## Проблема: "Unit file bird6.service does not exist" + +### Описание проблемы +В Ubuntu 24.04 сервис `bird6` не всегда устанавливается по умолчанию вместе с пакетом `bird2`. + +### Решение 1: Установка BIRD6 отдельно + +```bash +# Установка BIRD6 +sudo apt install -y bird6 + +# Проверка установки +which bird6 +systemctl list-unit-files | grep bird6 +``` + +### Решение 2: Использование скрипта установки BIRD6 + +```bash +# Сделать скрипт исполняемым +chmod +x install_bird6.sh + +# Запуск установки BIRD6 +sudo ./install_bird6.sh +``` + +### Решение 3: Ручное создание сервиса BIRD6 + +Если BIRD6 не устанавливается, создайте сервис вручную: + +```bash +# Создание systemd сервиса для BIRD6 +sudo tee /etc/systemd/system/bird6.service > /dev/null << EOF +[Unit] +Description=BIRD Internet Routing Daemon (IPv6) +Documentation=man:bird(8) +After=network.target + +[Service] +Type=notify +ExecStart=/usr/sbin/bird6 -c /etc/bird/bird6.conf -s /var/run/bird6.ctl +ExecReload=/bin/kill -HUP \$MAINPID +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +# Перезагрузка systemd +sudo systemctl daemon-reload + +# Включение и запуск сервиса +sudo systemctl enable bird6 +sudo systemctl start bird6 + +# Проверка статуса +sudo systemctl status bird6 +``` + +### Решение 4: Использование только IPv4 + +Если BIRD6 не нужен, можно использовать только IPv4: + +```bash +# Проверка статуса BIRD IPv4 +sudo systemctl status bird + +# Проверка конфигурации +sudo birdc -p /etc/bird/bird.conf + +# Запуск BIRD IPv4 +sudo systemctl start bird +``` + +## Другие частые проблемы + +### Проблема: "Permission denied" при запуске скриптов + +```bash +# Установка прав на выполнение +chmod +x install.sh +chmod +x install_bird6.sh +chmod +x scripts/*.py + +# Проверка прав +ls -la install.sh +ls -la scripts/ +``` + +### Проблема: "Command not found: birdc" + +```bash +# Проверка установки BIRD +which bird +which birdc + +# Переустановка BIRD +sudo apt remove --purge bird2 +sudo apt install -y bird2 + +# Проверка символических ссылок +ls -la /usr/sbin/bird* +``` + +### Проблема: "Configuration file not found" + +```bash +# Проверка существования файлов конфигурации +ls -la /etc/bird/ + +# Копирование файлов конфигурации +sudo cp config/bird.conf /etc/bird/ +sudo cp config/bird6.conf /etc/bird/ + +# Проверка прав доступа +sudo chown bird:bird /etc/bird/bird*.conf +sudo chmod 644 /etc/bird/bird*.conf +``` + +### Проблема: "Port 179 already in use" + +```bash +# Проверка процессов на порту 179 +sudo netstat -tlnp | grep :179 +sudo lsof -i :179 + +# Остановка конфликтующих сервисов +sudo systemctl stop bird bird6 +sudo pkill bird + +# Перезапуск сервисов +sudo systemctl start bird +sudo systemctl start bird6 +``` + +### Проблема: "Firewall blocking BGP" + +```bash +# Проверка статуса firewall +sudo ufw status + +# Разрешение BGP порта +sudo ufw allow 179/tcp + +# Проверка правил iptables +sudo iptables -L | grep 179 +``` + +### Проблема: "Python script errors" + +```bash +# Проверка версии Python +python3 --version + +# Установка зависимостей +sudo apt install -y python3-pip + +# Проверка скриптов +python3 -m py_compile scripts/load_prefixes.py +python3 -m py_compile scripts/monitor.py +``` + +## Проверка работоспособности + +### Полная диагностика + +```bash +#!/bin/bash +# Скрипт диагностики BGP сервера + +echo "=== Диагностика BGP сервера ===" + +echo "1. Проверка установки BIRD:" +which bird && echo "✓ BIRD найден" || echo "✗ BIRD не найден" +which birdc && echo "✓ BIRDc найден" || echo "✗ BIRDc не найден" + +echo "2. Проверка сервисов:" +systemctl is-active bird && echo "✓ BIRD IPv4 активен" || echo "✗ BIRD IPv4 неактивен" +systemctl is-active bird6 2>/dev/null && echo "✓ BIRD IPv6 активен" || echo "✗ BIRD IPv6 неактивен" + +echo "3. Проверка портов:" +netstat -tlnp | grep :179 && echo "✓ Порт 179 прослушивается" || echo "✗ Порт 179 не прослушивается" + +echo "4. Проверка конфигурации:" +birdc -p /etc/bird/bird.conf 2>/dev/null && echo "✓ Конфигурация IPv4 корректна" || echo "✗ Ошибка в конфигурации IPv4" +bird6c -p /etc/bird/bird6.conf 2>/dev/null && echo "✓ Конфигурация IPv6 корректна" || echo "✗ Ошибка в конфигурации IPv6" + +echo "5. Проверка файлов:" +ls -la /etc/bird/ && echo "✓ Файлы конфигурации найдены" || echo "✗ Файлы конфигурации не найдены" + +echo "6. Проверка логов:" +tail -5 /var/log/bird/bird.log 2>/dev/null || echo "Логи BIRD не найдены" +``` + +### Сохранение скрипта диагностики + +```bash +# Создание скрипта диагностики +nano diagnose_bgp.sh +# Вставьте код выше + +# Сделать исполняемым +chmod +x diagnose_bgp.sh + +# Запуск диагностики +./diagnose_bgp.sh +``` + +## Восстановление после сбоя + +### Полное переустановка + +```bash +# Остановка сервисов +sudo systemctl stop bird bird6 + +# Удаление конфигурации +sudo rm -rf /etc/bird/bird*.conf +sudo rm -rf /opt/bgp-server + +# Переустановка BIRD +sudo apt remove --purge bird2 bird6 +sudo apt install -y bird2 + +# Повторная установка +sudo ./install.sh +``` + +### Восстановление из резервной копии + +```bash +# Восстановление конфигурации +sudo cp /etc/bird/bird.conf.backup.* /etc/bird/bird.conf +sudo cp /etc/bird/bird6.conf.backup.* /etc/bird/bird6.conf + +# Перезапуск сервисов +sudo systemctl restart bird bird6 +``` + +## Получение помощи + +### Логи для диагностики + +```bash +# Сбор логов для анализа +sudo journalctl -u bird --no-pager > bird_logs.txt +sudo journalctl -u bird6 --no-pager > bird6_logs.txt +sudo systemctl status bird bird6 > service_status.txt +sudo netstat -tlnp > network_status.txt + +# Создание архива с логами +tar -czf bgp_diagnostics_$(date +%Y%m%d_%H%M%S).tar.gz *.txt +``` + +### Полезные команды + +```bash +# Проверка версии BIRD +bird --version + +# Проверка синтаксиса конфигурации +birdc -p /etc/bird/bird.conf + +# Просмотр протоколов +birdc show protocols + +# Просмотр маршрутов +birdc show routes + +# Просмотр логов в реальном времени +journalctl -u bird -f +``` + +--- + +**Примечание**: Если проблема не решается, соберите логи и обратитесь к документации BIRD: https://bird.network.cz/ \ No newline at end of file diff --git a/config/bird.conf b/config/bird.conf index 60cef44..ea3df1f 100644 --- a/config/bird.conf +++ b/config/bird.conf @@ -21,12 +21,25 @@ protocol kernel { disabled; } +# Таблица для BGP маршрутов +table bgp_table; + +# Статическая таблица маршрутов +protocol static { + # Маршруты будут загружаться из файла prefixes.txt + # через скрипт load_prefixes.py + table bgp_table; + + # Пример статических маршрутов + # route 192.168.1.0/24 via 192.168.1.1; + # route 10.0.1.0/24 via 10.0.1.1; +} + # BGP Configuration # Принимаем соединения от любых пиров protocol bgp { # Локальные настройки local as 65001; - listen bgp; # Настройки для всех пиров hold time 90; @@ -34,7 +47,6 @@ protocol bgp { startup hold time 240; # Принимаем соединения от любых IP - listen bgp; listen bgp port 179; # Настройки для пиров @@ -70,20 +82,6 @@ protocol bgp { }; } -# Статическая таблица маршрутов -protocol static { - # Маршруты будут загружаться из файла prefixes.txt - # через скрипт load_prefixes.py - table bgp_table; - - # Пример статических маршрутов - # route 192.168.1.0/24 via 192.168.1.1; - # route 10.0.1.0/24 via 10.0.1.1; -} - -# Таблица для BGP маршрутов -table bgp_table; - # Фильтры для community filter community_filter { if bgp_community.matches(65001:*) then { diff --git a/config/bird6.conf b/config/bird6.conf index 6a8411d..a97fd46 100644 --- a/config/bird6.conf +++ b/config/bird6.conf @@ -21,11 +21,24 @@ protocol kernel { disabled; } +# Таблица для BGP маршрутов IPv6 +table bgp_table; + +# Статическая таблица маршрутов IPv6 +protocol static { + # Маршруты будут загружаться из файла prefixes6.txt + # через скрипт load_prefixes.py + table bgp_table; + + # Пример статических маршрутов IPv6 + # route 2001:db8::/32 via 2001:db8::1; + # route 2001:db8:1::/48 via 2001:db8:1::1; +} + # BGP IPv6 Configuration protocol bgp { # Локальные настройки local as 65001; - listen bgp; # Настройки для всех пиров hold time 90; @@ -33,7 +46,6 @@ protocol bgp { startup hold time 240; # Принимаем соединения от любых IPv6 адресов - listen bgp; listen bgp port 179; # Настройки для пиров @@ -69,20 +81,6 @@ protocol bgp { }; } -# Статическая таблица маршрутов IPv6 -protocol static { - # Маршруты будут загружаться из файла prefixes6.txt - # через скрипт load_prefixes.py - table bgp_table; - - # Пример статических маршрутов IPv6 - # route 2001:db8::/32 via 2001:db8::1; - # route 2001:db8:1::/48 via 2001:db8:1::1; -} - -# Таблица для BGP маршрутов IPv6 -table bgp_table; - # Фильтры для community filter community_filter { if bgp_community.matches(65001:*) then { diff --git a/config/bird_any_peer.conf b/config/bird_any_peer.conf new file mode 100644 index 0000000..6e14419 --- /dev/null +++ b/config/bird_any_peer.conf @@ -0,0 +1,97 @@ +# BIRD Configuration for BGP Server - Accept ANY Peer +# Ubuntu 24.04 +# Эта конфигурация принимает ЛЮБЫХ пиров с ЛЮБЫМИ ASN + +# Logging configuration +log "/var/log/bird/bird.log" all; +log stderr all; + +# Router ID (замените на ваш IP адрес) +router id 192.168.1.1; + +# Protocol configuration +protocol device { + scan time 10; +} + +protocol direct { + disabled; +} + +protocol kernel { + disabled; +} + +# Таблица для BGP маршрутов +table bgp_table; + +# Статическая таблица маршрутов +protocol static { + # Маршруты будут загружаться из файла prefixes.txt + # через скрипт load_prefixes.py + table bgp_table; +} + +# BGP Configuration - принимаем ЛЮБЫХ пиров +protocol bgp { + # Локальные настройки + local as 65001; + + # Настройки для всех пиров + hold time 90; + keepalive time 30; + startup hold time 240; + + # Принимаем соединения от ЛЮБЫХ IP и ЛЮБЫХ ASN + listen bgp port 179; + + # Настройки для пиров - принимаем ЛЮБЫХ пиров + import none; # Не импортируем маршруты от пиров + export all; # Экспортируем все маршруты пирам + + # Настройки для статических маршрутов + import where source = RTS_STATIC; + export where source = RTS_STATIC; + + # MD5 аутентификация ОТКЛЮЧЕНА для приема любых пиров + # password "your_bgp_password"; + + # Настройки для больших таблиц маршрутизации + table limit 100000; + + # Настройки для community - принимаем любые community + import filter { + # Принимаем ВСЕ маршруты от любых пиров + accept; + }; + + export filter { + # Экспортируем маршруты с community + if source = RTS_STATIC then { + bgp_community.add(65001:100); + accept; + } + reject; + }; +} + +# Фильтры для community +filter community_filter { + if bgp_community.matches(65001:*) then { + accept; + } + reject; +} + +# Функция для добавления community +function add_community() { + bgp_community.add(65001:100); +} + +# Настройки для мониторинга +protocol pipe { + table master; + peer table bgp_table; + import all; + export none; +} \ No newline at end of file diff --git a/config/bird_simple.conf b/config/bird_simple.conf new file mode 100644 index 0000000..c1b611c --- /dev/null +++ b/config/bird_simple.conf @@ -0,0 +1,42 @@ +# Простая конфигурация BIRD для тестирования +# Ubuntu 24.04 + +# Logging configuration +log "/var/log/bird/bird.log" all; +log stderr all; + +# Router ID (замените на ваш IP адрес) +router id 192.168.1.1; + +# Protocol configuration +protocol device { + scan time 10; +} + +protocol direct { + disabled; +} + +protocol kernel { + disabled; +} + +# Статическая таблица маршрутов +protocol static { + # Пример статических маршрутов + route 192.168.1.0/24 via 192.168.1.1; + route 10.0.1.0/24 via 10.0.1.1; +} + +# BGP Configuration +protocol bgp { + # Локальные настройки + local as 65001; + + # Принимаем соединения от любых IP + listen bgp port 179; + + # Настройки для пиров + import none; # Не импортируем маршруты от пиров + export all; # Экспортируем все маршруты пирам +} \ No newline at end of file diff --git a/enable_any_peer.sh b/enable_any_peer.sh new file mode 100644 index 0000000..bf1db23 --- /dev/null +++ b/enable_any_peer.sh @@ -0,0 +1,401 @@ +#!/bin/bash + +# Скрипт для включения режима приема ЛЮБЫХ пиров +# 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" +} + +# Создание конфигурации для любых пиров +create_any_peer_config() { + local server_ip=$(get_server_ip) + + print_info "Создание конфигурации для приема ЛЮБЫХ пиров с IP: $server_ip" + + # Создание конфигурации IPv4 + cat > /etc/bird/bird.conf << EOF +# BIRD Configuration for BGP Server - Accept ANY Peer +# Ubuntu 24.04 +# Эта конфигурация принимает ЛЮБЫХ пиров с ЛЮБЫМИ ASN + +# 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; +} + +# Таблица для BGP маршрутов +table bgp_table; + +# Статическая таблица маршрутов +protocol static { + # Маршруты будут загружаться из файла prefixes.txt + # через скрипт load_prefixes.py + table bgp_table; +} + +# BGP Configuration - принимаем ЛЮБЫХ пиров +protocol bgp { + # Локальные настройки + local as 65001; + + # Настройки для всех пиров + hold time 90; + keepalive time 30; + startup hold time 240; + + # Принимаем соединения от ЛЮБЫХ IP и ЛЮБЫХ ASN + listen bgp port 179; + + # Настройки для пиров - принимаем ЛЮБЫХ пиров + import none; # Не импортируем маршруты от пиров + export all; # Экспортируем все маршруты пирам + + # Настройки для статических маршрутов + import where source = RTS_STATIC; + export where source = RTS_STATIC; + + # MD5 аутентификация ОТКЛЮЧЕНА для приема любых пиров + # password "your_bgp_password"; + + # Настройки для больших таблиц маршрутизации + table limit 100000; + + # Настройки для community - принимаем любые community + import filter { + # Принимаем ВСЕ маршруты от любых пиров + accept; + }; + + export filter { + # Экспортируем маршруты с community + if source = RTS_STATIC then { + bgp_community.add(65001:100); + accept; + } + reject; + }; +} + +# Фильтры для community +filter community_filter { + if bgp_community.matches(65001:*) then { + accept; + } + reject; +} + +# Функция для добавления community +function add_community() { + bgp_community.add(65001:100); +} + +# Настройки для мониторинга +protocol pipe { + table master; + peer table bgp_table; + import all; + export none; +} +EOF + + # Создание конфигурации IPv6 + cat > /etc/bird/bird6.conf << EOF +# BIRD IPv6 Configuration for BGP Server - Accept ANY Peer +# Ubuntu 24.04 +# Эта конфигурация принимает ЛЮБЫХ пиров с ЛЮБЫМИ ASN + +# Logging configuration +log "/var/log/bird/bird6.log" all; +log stderr all; + +# Router ID +router id $server_ip; + +# Protocol configuration +protocol device { + scan time 10; +} + +protocol direct { + disabled; +} + +protocol kernel { + disabled; +} + +# Таблица для BGP маршрутов IPv6 +table bgp_table; + +# Статическая таблица маршрутов IPv6 +protocol static { + # Маршруты будут загружаться из файла prefixes6.txt + # через скрипт load_prefixes.py + table bgp_table; +} + +# BGP IPv6 Configuration - принимаем ЛЮБЫХ пиров +protocol bgp { + # Локальные настройки + local as 65001; + + # Настройки для всех пиров + hold time 90; + keepalive time 30; + startup hold time 240; + + # Принимаем соединения от ЛЮБЫХ IPv6 адресов и ЛЮБЫХ ASN + listen bgp port 179; + + # Настройки для пиров - принимаем ЛЮБЫХ пиров + import none; # Не импортируем маршруты от пиров + export all; # Экспортируем все маршруты пирам + + # Настройки для статических маршрутов + import where source = RTS_STATIC; + export where source = RTS_STATIC; + + # MD5 аутентификация ОТКЛЮЧЕНА для приема любых пиров + # password "your_bgp_password"; + + # Настройки для больших таблиц маршрутизации + table limit 100000; + + # Настройки для community - принимаем любые community + import filter { + # Принимаем ВСЕ маршруты от любых пиров + accept; + }; + + export filter { + # Экспортируем маршруты с community + if source = RTS_STATIC then { + bgp_community.add(65001:100); + accept; + } + reject; + }; +} + +# Фильтры для community +filter community_filter { + if bgp_community.matches(65001:*) then { + accept; + } + reject; +} + +# Функция для добавления community +function add_community() { + bgp_community.add(65001:100); +} + +# Настройки для мониторинга +protocol pipe { + table master; + peer table bgp_table; + import all; + export none; +} +EOF + + # Установка правильных прав доступа + chown bird:bird /etc/bird/bird*.conf + chmod 644 /etc/bird/bird*.conf + + print_success "Конфигурация для любых пиров создана" +} + +# Проверка конфигурации +check_config() { + print_info "Проверка конфигурации..." + + if bird -p /etc/bird/bird.conf; then + print_success "Конфигурация BIRD (IPv4) корректна" + else + print_error "Ошибка в конфигурации BIRD (IPv4)" + return 1 + fi + + if command -v bird6 &> /dev/null; then + if bird6 -p /etc/bird/bird6.conf; then + print_success "Конфигурация BIRD (IPv6) корректна" + else + print_warning "Ошибка в конфигурации BIRD (IPv6)" + fi + fi + + return 0 +} + +# Перезапуск сервисов +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 "Enable ANY Peer Mode for BGP Server" + echo "Ubuntu 24.04" + echo "==========================================" + + check_root + + # Создание конфигурации для любых пиров + create_any_peer_config + + # Проверка конфигурации + if check_config; then + # Перезапуск сервисов + if restart_services; then + # Проверка работоспособности + test_functionality + + print_success "Режим приема любых пиров включен!" + + echo "" + echo "Теперь сервер принимает ЛЮБЫХ пиров с ЛЮБЫМИ ASN" + echo "" + echo "Полезные команды:" + echo " sudo birdc show protocols" + echo " sudo birdc show routes" + echo " sudo systemctl status bird" + echo " sudo journalctl -u bird -f" + echo "" + echo "Для подключения клиентов используйте:" + echo " Remote AS: 65001" + echo " Remote IP: $(get_server_ip)" + echo " Port: 179" + else + print_error "Ошибка перезапуска сервисов" + exit 1 + fi + else + print_error "Ошибка в конфигурации" + exit 1 + fi +} + +# Запуск основной функции +main "$@" \ No newline at end of file diff --git a/fix_config.sh b/fix_config.sh new file mode 100644 index 0000000..966620d --- /dev/null +++ b/fix_config.sh @@ -0,0 +1,224 @@ +#!/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 "$@" \ No newline at end of file diff --git a/install.sh b/install.sh index ce26378..2eaec28 100644 --- a/install.sh +++ b/install.sh @@ -37,6 +37,24 @@ check_root() { 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" +} + # Проверка версии Ubuntu check_ubuntu_version() { if [[ ! -f /etc/os-release ]]; then @@ -110,9 +128,153 @@ copy_config_files() { 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 + # Получение IP адреса сервера + local server_ip=$(get_server_ip) + print_info "Используется IP адрес: $server_ip" + + # Создание правильной конфигурации BIRD IPv4 + cat > /etc/bird/bird.conf << EOF +# BIRD Configuration for BGP Server +# 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; +} + +table bgp_table; + +protocol static { + table bgp_table; +} + +protocol bgp { + local as 65001; + listen bgp port 179; + hold time 90; + keepalive time 30; + startup hold time 240; + + # Сервер НЕ принимает маршруты от клиентов + import none; + # Сервер раздает ТОЛЬКО свои статические маршруты + export where source = RTS_STATIC; + + # MD5 аутентификация (опционально) + # password "your_bgp_password"; + table limit 100000; + + # Фильтры: не принимаем ничего, раздаем всё + import filter { + reject; + }; + export filter { + accept; + }; +} + +filter community_filter { + reject; +} + +function add_community() { + # пусто +} + +protocol pipe { + table master; + peer table bgp_table; + import all; + export none; +} +EOF + + # Создание правильной конфигурации BIRD IPv6 + cat > /etc/bird/bird6.conf << EOF +# BIRD IPv6 Configuration for BGP Server +# Ubuntu 24.04 + +# Logging configuration +log "/var/log/bird/bird6.log" all; +log stderr all; + +# Router ID +router id $server_ip; + +# Protocol configuration +protocol device { + scan time 10; +} + +protocol direct { + disabled; +} + +protocol kernel { + disabled; +} + +table bgp_table; + +protocol static { + table bgp_table; +} + +protocol bgp { + local as 65001; + listen bgp port 179; + hold time 90; + keepalive time 30; + startup hold time 240; + + # Сервер НЕ принимает маршруты от клиентов + import none; + # Сервер раздает ТОЛЬКО свои статические маршруты + export where source = RTS_STATIC; + + # MD5 аутентификация (опционально) + # password "your_bgp_password"; + table limit 100000; + + # Фильтры: не принимаем ничего, раздаем всё + import filter { + reject; + }; + export filter { + accept; + }; +} + +filter community_filter { + reject; +} + +function add_community() { + # пусто +} + +protocol pipe { + table master; + peer table bgp_table; + import all; + export none; +} +EOF # Копирование скриптов cp scripts/load_prefixes.py /opt/bgp-server/scripts/ @@ -124,7 +286,11 @@ copy_config_files() { # Установка прав на выполнение для скриптов chmod +x /opt/bgp-server/scripts/*.py - print_success "Файлы конфигурации скопированы" + # Установка правильных прав доступа к конфигурации + chown bird:bird /etc/bird/bird*.conf + chmod 644 /etc/bird/bird*.conf + + print_success "Файлы конфигурации созданы и скопированы" } # Настройка firewall @@ -152,15 +318,21 @@ configure_firewall() { configure_services() { print_info "Настройка systemd сервисов..." - # Включение автозапуска + # Включение автозапуска для bird (IPv4) systemctl enable bird - systemctl enable bird6 + + # Проверка существования bird6 сервиса + if systemctl list-unit-files | grep -q bird6; then + systemctl enable bird6 + print_info "BIRD6 сервис найден и включен" + else + print_warning "BIRD6 сервис не найден, будет использоваться только IPv4" + fi # Запуск сервисов systemctl start bird - systemctl start bird6 - # Проверка статуса + # Проверка статуса bird if systemctl is-active --quiet bird; then print_success "BIRD (IPv4) запущен" else @@ -168,11 +340,18 @@ configure_services() { systemctl status bird fi - if systemctl is-active --quiet bird6; then - print_success "BIRD (IPv6) запущен" + # Запуск 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_error "Ошибка запуска BIRD (IPv6)" + systemctl status bird6 + fi else - print_error "Ошибка запуска BIRD (IPv6)" - systemctl status bird6 + print_warning "BIRD6 не запущен (сервис не найден)" fi } @@ -185,18 +364,57 @@ check_configuration() { print_success "Конфигурация BIRD (IPv4) корректна" else print_error "Ошибка в конфигурации BIRD (IPv4)" - exit 1 + print_info "Попытка создания простой конфигурации..." + create_simple_config + if bird -p /etc/bird/bird.conf; then + print_success "Простая конфигурация BIRD (IPv4) создана" + else + print_error "Не удалось создать рабочую конфигурацию BIRD (IPv4)" + exit 1 + fi fi # Проверка синтаксиса IPv6 конфигурации - if bird6 -p /etc/bird/bird6.conf; then - print_success "Конфигурация BIRD (IPv6) корректна" + if command -v bird6 &> /dev/null; then + if bird6 -p /etc/bird/bird6.conf; then + print_success "Конфигурация BIRD (IPv6) корректна" + else + print_warning "Ошибка в конфигурации BIRD (IPv6), будет использоваться только IPv4" + fi else - print_error "Ошибка в конфигурации BIRD (IPv6)" - exit 1 + print_warning "BIRD6 не установлен, пропускаем проверку IPv6" fi } +# Создание простой конфигурации +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 + +log "/var/log/bird/bird.log" all; +log stderr all; +router id $server_ip; +protocol device { scan time 10; } +protocol direct { disabled; } +protocol kernel { disabled; } +protocol static {} +protocol bgp { + local as 65001; + listen bgp port 179; + import none; + export where source = RTS_STATIC; + import filter { reject; }; + export filter { accept; }; +} +EOF + chown bird:bird /etc/bird/bird.conf + chmod 644 /etc/bird/bird.conf + print_success "Простая конфигурация создана" +} + # Создание systemd таймера для автоматической загрузки префиксов create_systemd_timer() { print_info "Создание systemd таймера для загрузки префиксов..." @@ -270,7 +488,13 @@ final_check() { print_info "Статус сервисов:" systemctl status bird --no-pager -l echo "" - systemctl status bird6 --no-pager -l + + # Проверка bird6 если существует + if systemctl list-unit-files | grep -q bird6; then + systemctl status bird6 --no-pager -l + else + print_warning "BIRD6 сервис не установлен" + fi # Проверка прослушивания порта if netstat -tlnp | grep :179; then @@ -279,6 +503,15 @@ final_check() { print_warning "BGP порт 179 не прослушивается" fi + # Проверка конфигурации + echo "" + print_info "Проверка конфигурации:" + if birdc show protocols 2>/dev/null; then + print_success "BIRD отвечает на команды" + else + print_warning "BIRD не отвечает на команды (возможно, нужно время для запуска)" + fi + # Проверка firewall echo "" print_info "Статус firewall:" diff --git a/install_bird6.sh b/install_bird6.sh new file mode 100644 index 0000000..4eccb83 --- /dev/null +++ b/install_bird6.sh @@ -0,0 +1,198 @@ +#!/bin/bash + +# Скрипт для установки BIRD6 на Ubuntu 24.04 +# BIRD6 не всегда устанавливается по умолчанию + +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 +} + +# Установка BIRD6 +install_bird6() { + print_info "Проверка установки BIRD6..." + + # Проверка существования bird6 + if command -v bird6 &> /dev/null; then + print_success "BIRD6 уже установлен" + return 0 + fi + + print_info "Установка BIRD6..." + + # Попытка установки bird6 + if apt install -y bird6; then + print_success "BIRD6 установлен успешно" + else + print_warning "BIRD6 не найден в репозиториях, попробуем альтернативные способы" + + # Попытка установки из пакета bird2 + if apt install -y bird2; then + print_info "BIRD2 установлен, проверяем наличие bird6" + + # Проверка символических ссылок + if [[ -f /usr/sbin/bird6 ]]; then + print_success "BIRD6 найден в BIRD2 пакете" + else + print_warning "BIRD6 не найден в BIRD2 пакете" + return 1 + fi + else + print_error "Не удалось установить BIRD6" + return 1 + fi + fi + + return 0 +} + +# Настройка BIRD6 сервиса +configure_bird6_service() { + print_info "Настройка BIRD6 сервиса..." + + # Проверка существования сервиса + if systemctl list-unit-files | grep -q bird6; then + print_success "BIRD6 сервис найден" + + # Включение автозапуска + systemctl enable bird6 + + # Запуск сервиса + systemctl start bird6 + + # Проверка статуса + if systemctl is-active --quiet bird6; then + print_success "BIRD6 сервис запущен" + else + print_error "Ошибка запуска BIRD6 сервиса" + systemctl status bird6 + return 1 + fi + else + print_warning "BIRD6 сервис не найден, создаем вручную" + + # Создание systemd сервиса для BIRD6 + cat > /etc/systemd/system/bird6.service << EOF +[Unit] +Description=BIRD Internet Routing Daemon (IPv6) +Documentation=man:bird(8) +After=network.target + +[Service] +Type=notify +ExecStart=/usr/sbin/bird6 -c /etc/bird/bird6.conf -s /var/run/bird6.ctl +ExecReload=/bin/kill -HUP \$MAINPID +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + + # Перезагрузка systemd + systemctl daemon-reload + + # Включение и запуск сервиса + systemctl enable bird6 + systemctl start bird6 + + # Проверка статуса + if systemctl is-active --quiet bird6; then + print_success "BIRD6 сервис создан и запущен" + else + print_error "Ошибка запуска созданного BIRD6 сервиса" + systemctl status bird6 + return 1 + fi + fi + + return 0 +} + +# Проверка конфигурации BIRD6 +check_bird6_config() { + print_info "Проверка конфигурации BIRD6..." + + if [[ -f /etc/bird/bird6.conf ]]; then + # Проверка синтаксиса + if bird6 -p /etc/bird/bird6.conf; then + print_success "Конфигурация BIRD6 корректна" + else + print_error "Ошибка в конфигурации BIRD6" + return 1 + fi + else + print_warning "Файл конфигурации BIRD6 не найден" + return 1 + fi + + return 0 +} + +# Основная функция +main() { + echo "==========================================" + echo "BIRD6 Installation Script" + echo "Ubuntu 24.04" + echo "==========================================" + + check_root + + # Установка BIRD6 + if install_bird6; then + # Настройка сервиса + if configure_bird6_service; then + # Проверка конфигурации + if check_bird6_config; then + print_success "BIRD6 успешно установлен и настроен" + + echo "" + echo "Полезные команды:" + echo " sudo systemctl status bird6" + echo " sudo bird6c show protocols" + echo " sudo bird6c show routes" + echo " sudo journalctl -u bird6 -f" + else + print_warning "BIRD6 установлен, но есть проблемы с конфигурацией" + fi + else + print_error "Ошибка настройки BIRD6 сервиса" + exit 1 + fi + else + print_error "Ошибка установки BIRD6" + exit 1 + fi +} + +# Запуск основной функции +main "$@" \ No newline at end of file