4 Commits
Author SHA1 Message Date
denozord c85bb1bd8b a 2025-07-11 19:34:27 +07:00
denozord 935c1ffec3 123 2025-07-11 19:32:02 +07:00
denozord 825255c64a update 2025-07-11 19:24:43 +07:00
denozord 9d07df53d0 update 2025-07-11 19:06:56 +07:00
34 changed files with 4049 additions and 934 deletions
+65
View File
@@ -0,0 +1,65 @@
# Changelog
Все значимые изменения в проекте BGP Server будут документированы в этом файле.
## [1.0.0] - 2025-01-11
### Добавлено
- Первоначальная версия BGP сервера на базе BIRD
- Поддержка IPv4 и IPv6
- Автоматическая загрузка префиксов из файла
- Система мониторинга BGP сессий
- Скрипт автоматической установки для Ubuntu 24.04
- Поддержка community для префиксов
- Автоматический systemd таймер для загрузки префиксов
- Полная документация и руководства
### Функции
- **BGP Server**: Прием соединений от любых пиров
- **Prefix Management**: Загрузка префиксов из файла с community
- **Monitoring**: Мониторинг BGP сессий и системной статистики
- **Security**: Настройка firewall и ограничение доступа
- **Automation**: Автоматическая загрузка префиксов каждые 5 минут
### Файлы
- `install.sh` - Скрипт установки
- `config/bird.conf` - Конфигурация BIRD IPv4
- `config/bird6.conf` - Конфигурация BIRD IPv6
- `scripts/load_prefixes.py` - Скрипт загрузки префиксов
- `scripts/monitor.py` - Скрипт мониторинга
- `data/prefixes.txt` - Пример файла с префиксами
- `README.md` - Основная документация
- `SETUP.md` - Подробные инструкции по настройке
- `QUICKSTART.md` - Быстрый старт
### Технические детали
- **OS**: Ubuntu 24.04 LTS
- **BGP Daemon**: BIRD 2.x
- **Language**: Python 3.x
- **Protocols**: BGP IPv4/IPv6
- **Port**: 179 (BGP)
---
## Планы на будущее
### Версия 1.1.0
- [ ] Web интерфейс для управления
- [ ] REST API для управления префиксами
- [ ] Поддержка Route Reflector
- [ ] Интеграция с системами мониторинга
- [ ] Поддержка BGP-LS
### Версия 1.2.0
- [ ] Поддержка BGP FlowSpec
- [ ] Автоматическое резервное копирование
- [ ] Расширенная система логирования
- [ ] Поддержка множественных ASN
- [ ] Интеграция с DNS
### Версия 2.0.0
- [ ] Микросервисная архитектура
- [ ] Поддержка Docker контейнеров
- [ ] Kubernetes deployment
- [ ] GraphQL API
- [ ] Real-time уведомления
+293
View File
@@ -0,0 +1,293 @@
# Развертывание BGP сервера на Ubuntu 24.04
## Клонирование репозитория
### 1. Клонирование с веткой bird
```bash
# Клонирование репозитория с веткой bird
git clone -b bird <repository-url> 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 сервера. 🚀
+160
View File
@@ -0,0 +1,160 @@
# Быстрый старт BGP сервера
## 🚀 Установка за 5 минут
### 1. Подготовка
```bash
# Обновление системы
sudo apt update && sudo apt upgrade -y
# Установка зависимостей
sudo apt install -y python3 git
```
### 2. Клонирование и установка
```bash
# Клонирование проекта (замените на ваш репозиторий)
git clone <your-repo-url>
cd bgp-server
# Запуск установки
chmod +x install.sh
sudo ./install.sh
```
### 3. Настройка
```bash
# Настройка IP адреса и ASN
sudo nano /etc/bird/bird.conf
# Измените router id и local as на ваши значения
# Настройка префиксов
sudo nano /opt/bgp-server/data/prefixes.txt
# Добавьте ваши префиксы с community
```
### 4. Запуск
```bash
# Загрузка префиксов
python3 /opt/bgp-server/scripts/load_prefixes.py
# Проверка статуса
python3 /opt/bgp-server/scripts/monitor.py
```
## 📋 Основные команды
| Команда | Описание |
|---------|----------|
| `bgp-status` | Статус BGP сервера |
| `bgp-load` | Загрузить префиксы |
| `bgp-monitor` | Непрерывный мониторинг |
| `bird-status` | Статус сервисов |
| `bird-restart` | Перезапуск сервисов |
| `bird-logs` | Просмотр логов |
## 🔧 Быстрая настройка
### Настройка префиксов
Формат файла `/opt/bgp-server/data/prefixes.txt`:
```
192.168.1.0/24 65001:100 "Customer A"
10.0.1.0/24 65001:200 "Customer B"
```
### Настройка клиента
Пример для Cisco:
```
router bgp CLIENT_ASN
neighbor YOUR_SERVER_IP remote-as YOUR_ASN
neighbor YOUR_SERVER_IP send-community
```
## 🛠️ Troubleshooting
### Проблема: BGP сессия не устанавливается
```bash
# Проверка firewall
sudo ufw status
# Проверка логов
sudo journalctl -u bird -n 20
```
### Проблема: Префиксы не загружаются
```bash
# Проверка файла префиксов
python3 /opt/bgp-server/scripts/load_prefixes.py --file /opt/bgp-server/data/prefixes.txt
# Проверка логов
sudo tail -f /var/log/bird/prefix_loader.log
```
## 📁 Структура файлов
```
bgp-server/
├── install.sh # Скрипт установки
├── config/
│ ├── bird.conf # Конфигурация BIRD IPv4
│ └── bird6.conf # Конфигурация BIRD IPv6
├── scripts/
│ ├── load_prefixes.py # Загрузка префиксов
│ └── monitor.py # Мониторинг
├── data/
│ └── prefixes.txt # Файл с префиксами
└── logs/ # Логи
```
## 🔒 Безопасность
### Firewall
```bash
# Проверка статуса
sudo ufw status
# Разрешение BGP
sudo ufw allow 179/tcp
```
### Ограничение доступа
```bash
# Ограничение birdc только для localhost
sudo nano /etc/bird/bird.conf
# Добавьте: control socket "/var/run/bird.ctl" mode 0600;
```
## 📊 Мониторинг
### Проверка BGP сессий
```bash
sudo birdc show protocols
sudo birdc show routes
```
### Системная статистика
```bash
# Использование ресурсов
htop
# Сетевые соединения
netstat -tlnp | grep :179
```
## 🆘 Поддержка
- **Логи**: `/var/log/bird/`
- **Конфигурация**: `/etc/bird/`
- **Данные**: `/opt/bgp-server/data/`
- **Документация**: `SETUP.md`
## ⚡ Автоматизация
Система автоматически:
- Загружает префиксы каждые 5 минут
- Перезапускается при сбоях
- Ведет логи всех операций
---
**Готово!** Ваш BGP сервер настроен и готов к работе. 🎉
-123
View File
@@ -1,123 +0,0 @@
# Быстрый старт BGP сервера на Linux
## Минимальная установка
### Вариант 1: С Docker Compose
```bash
# 1. Клонируйте или скачайте проект
git clone <repository-url>
cd bgp-server
# 2. Установите зависимости
./install-dependencies.sh
# 3. Запустите BGP сервер
./start-bgp-server.sh
```
### Вариант 2: Только Docker (рекомендуется)
```bash
# 1. Клонируйте или скачайте проект
git clone <repository-url>
cd bgp-server
# 2. Сделайте скрипты исполняемыми
chmod +x *.sh
# 3. Быстрый запуск одной командой
./quick-run.sh
```
## Проверка работы
```bash
# Проверить статус
./check-bgp-status.sh
# Подключиться к консоли управления
docker exec -it bgp-server vtysh
# Посмотреть логи
docker-compose logs -f bgp-server
```
## Управление
### С Docker Compose
```bash
# Остановить сервер
./stop-bgp-server.sh
# Обновить префиксы
./update-prefixes.sh
# Перезапустить сервер
./stop-bgp-server.sh && ./start-bgp-server.sh
```
### Только Docker
```bash
# Остановить сервер
./quick-stop.sh
# Полное управление контейнером
./run-bgp-container.sh start
./run-bgp-container.sh stop
./run-bgp-container.sh restart
./run-bgp-container.sh status
./run-bgp-container.sh logs
```
## Основные команды vtysh
```bash
# Войти в консоль
docker exec -it bgp-server vtysh
# Показать статус BGP
show ip bgp summary
# Показать анонсированные префиксы
show ip bgp
# Показать соседей
show ip bgp neighbors
# Показать community
show ip bgp community
```
## Настройки по умолчанию
- **ASN**: 65000
- **Router ID**: 192.168.1.1
- **BGP порт**: 179
- **vtysh порт**: 2601
- **Пароль vtysh**: zebra
## Подключение клиентов
Клиенты могут подключаться к BGP серверу по IP адресу сервера на порту 179.
Пример конфигурации клиента:
```
router bgp 65001
neighbor <SERVER_IP> remote-as 65000
neighbor <SERVER_IP> send-community
```
## Troubleshooting
```bash
# Проверить, что Docker работает
docker version
# Проверить, что контейнер запущен
docker ps
# Проверить логи
docker-compose logs bgp-server
# Проверить сетевые порты
netstat -tuln | grep :179
```
+117 -179
View File
@@ -1,217 +1,155 @@
# BGP Server с FRRouting # BGP Server Setup
Этот проект предоставляет готовое решение для запуска BGP сервера с использованием контейнера FRRouting, который анонсирует префиксы всем подключенным клиентам с разделением по community. ## Обзор
BGP сервер на Ubuntu 24.04 с возможностью подключения любых пиров и загрузки префиксов из файла с community.
## Требования ## Архитектура
- **BGP Server**: BIRD (Bird Internet Routing Daemon)
- Docker Engine - **OS**: Ubuntu 24.04
- Docker Compose - **Функции**:
- Bash shell - Прием BGP соединений от любых пиров
- Загрузка префиксов из файла prefixes.txt
- Настройка community для каждого префикса
- Сервер НЕ получает префиксы, только раздает их клиентам
## Структура проекта ## Структура проекта
``` ```
bgp-server/ bgp-server/
├── docker-compose.yml # Конфигурация Docker контейнера ├── README.md
├── frr.conf # Конфигурация FRRouting ├── install.sh # Скрипт установки
├── prefixes.txt # Файл с префиксами и community ├── config/
├── start-bgp-server.sh # Скрипт запуска для Linux │ ├── bird.conf # Основная конфигурация BIRD
├── stop-bgp-server.sh # Скрипт остановки для Linux │ └── bird6.conf # Конфигурация для IPv6 (опционально)
├── check-bgp-status.sh # Скрипт проверки статуса для Linux ├── scripts/
├── update-prefixes.sh # Скрипт обновления префиксов для Linux │ ├── load_prefixes.py # Скрипт загрузки префиксов
├── install-dependencies.sh # Скрипт установки зависимостей │ └── monitor.py # Мониторинг BGP сессий
── README.md # Эта инструкция ── data/
│ └── prefixes.txt # Файл с префиксами и community
└── logs/
└── bird.log # Логи BIRD
``` ```
## Быстрый запуск ## Установка
1. **Установите зависимости (если не установлены):**
```bash
./install-dependencies.sh
```
2. **Сделайте скрипты исполняемыми:**
```bash
chmod +x *.sh
```
3. **Запустите BGP сервер:**
```bash
./start-bgp-server.sh
```
## Ручной запуск
Если вы предпочитаете запускать вручную:
### 1. Обновление системы
```bash ```bash
# Остановить существующие контейнеры sudo apt update && sudo apt upgrade -y
docker-compose down ```
# Запустить BGP сервер ### 2. Установка BIRD
docker-compose up -d ```bash
sudo apt install bird2 -y
```
# Проверить статус ### 3. Настройка конфигурации
docker ps ```bash
# Копирование конфигурационных файлов
sudo cp config/bird.conf /etc/bird/bird.conf
sudo cp config/bird6.conf /etc/bird/bird6.conf
# Посмотреть логи # Создание директорий
docker-compose logs bgp-server sudo mkdir -p /var/log/bird
sudo mkdir -p /opt/bgp-server/data
sudo mkdir -p /opt/bgp-server/scripts
# Копирование скриптов
sudo cp scripts/* /opt/bgp-server/scripts/
sudo cp data/prefixes.txt /opt/bgp-server/data/
```
### 4. Запуск сервисов
```bash
sudo systemctl enable bird
sudo systemctl start bird
sudo systemctl enable bird6
sudo systemctl start bird6
``` ```
## Конфигурация ## Конфигурация
### Префиксы (prefixes.txt) ### Формат файла prefixes.txt
Файл содержит префиксы в формате:
``` ```
prefix community1:community2:community3 # Формат: prefix community description
# Community: ASN:value (например, 65001:100)
192.168.1.0/24 65001:100 "Customer A - Premium"
10.0.1.0/24 65001:200 "Customer B - Standard"
172.16.1.0/24 65001:300 "Customer C - Basic"
203.0.113.0/24 65001:400 "Customer D - Enterprise"
``` ```
Пример: ### Загрузка префиксов
```
192.168.1.0/24 65000:100:65000:200
10.0.0.0/8 65000:101:65000:201
```
### BGP настройки (frr.conf)
- **ASN**: 65000
- **Router ID**: 192.168.1.1
- **Порт BGP**: 179
- **Порт vtysh**: 2601
## Управление сервером
### Подключение к vtysh (консоль управления)
```bash ```bash
docker exec -it bgp-server vtysh # Загрузка префиксов из файла
``` python3 /opt/bgp-server/scripts/load_prefixes.py
### Полезные команды vtysh # Мониторинг BGP сессий
python3 /opt/bgp-server/scripts/monitor.py
```bash
# Показать статус BGP
show ip bgp summary
# Показать анонсированные префиксы
show ip bgp
# Показать community
show ip bgp community
# Показать соседей
show ip bgp neighbors
# Показать IPv6 информацию
show ipv6 bgp summary
```
### Просмотр логов
```bash
# Просмотр логов в реальном времени
docker-compose logs -f bgp-server
# Просмотр последних логов
docker-compose logs bgp-server
```
### Остановка сервера
```bash
docker-compose down
```
## Подключение клиентов
### Настройка BGP клиента
Клиенты могут подключаться к BGP серверу по адресу:
- **IP**: IP адрес хоста, где запущен контейнер
- **Порт**: 179
- **ASN**: 65000 (внешний ASN)
### Пример конфигурации клиента (Cisco)
```
router bgp 65001
neighbor 192.168.1.1 remote-as 65000
neighbor 192.168.1.1 send-community
network 192.168.2.0/24
```
### Пример конфигурации клиента (Juniper)
```
protocols {
bgp {
group external {
type external;
peer-as 65000;
neighbor 192.168.1.1 {
send-community;
}
}
}
}
``` ```
## Мониторинг ## Мониторинг
### Проверка статуса контейнера ### Проверка статуса BIRD
```bash ```bash
docker ps --filter "name=bgp-server" sudo birdc show protocols
sudo birdc show routes
sudo birdc show route table all
``` ```
### Проверка сетевых портов ### Просмотр логов
```bash ```bash
netstat -tuln | grep :179 sudo journalctl -u bird -f
netstat -tuln | grep :2601 sudo tail -f /var/log/bird/bird.log
``` ```
### Проверка логов FRRouting
```bash
docker exec bgp-server cat /var/log/frr/frr.log
```
## Troubleshooting
### Проблема: Контейнер не запускается
1. Проверьте, что Docker Desktop запущен
2. Проверьте логи: `docker-compose logs bgp-server`
3. Убедитесь, что порты 179 и 2601 не заняты
### Проблема: BGP сессии не устанавливаются
1. Проверьте настройки firewall
2. Убедитесь, что клиент правильно настроен
3. Проверьте логи BGP: `docker exec -it bgp-server vtysh -c "show ip bgp summary"`
### Проблема: Префиксы не анонсируются
1. Проверьте конфигурацию в `frr.conf`
2. Убедитесь, что префиксы правильно прописаны
3. Проверьте community настройки
## Безопасность ## Безопасность
⚠️ **Важно**: Этот BGP сервер настроен для тестирования и разработки. Для продакшена: ### Firewall настройки
```bash
# Разрешить BGP (порт 179)
sudo ufw allow 179/tcp
1. Измените пароли по умолчанию # Разрешить SSH
2. Настройте firewall правила sudo ufw allow ssh
3. Используйте более строгие настройки безопасности
4. Ограничьте доступ к vtysh
## Поддержка # Включить firewall
sudo ufw enable
```
При возникновении проблем: ### Ограничение доступа
- Настройте ACL в конфигурации BIRD
- Используйте MD5 аутентификацию для BGP сессий
- Ограничьте доступ к birdc только с localhost
1. Проверьте логи контейнера ## Troubleshooting
2. Убедитесь в правильности конфигурации
3. Проверьте сетевые настройки ### Частые проблемы
4. Обратитесь к документации FRRouting: https://frrouting.org/ 1. **BGP сессия не устанавливается**
- Проверьте firewall настройки
- Убедитесь, что ASN настроен правильно
- Проверьте логи BIRD
2. **Префиксы не загружаются**
- Проверьте формат файла prefixes.txt
- Убедитесь, что скрипт load_prefixes.py имеет права на выполнение
- Проверьте синтаксис конфигурации BIRD
3. **Высокая нагрузка на CPU**
- Оптимизируйте конфигурацию BIRD
- Проверьте количество префиксов
- Мониторьте использование памяти
## Полезные команды
```bash
# Перезагрузка конфигурации BIRD
sudo birdc configure
# Проверка синтаксиса конфигурации
sudo birdc -p
# Экспорт маршрутов
sudo birdc show route export all
# Статистика протоколов
sudo birdc show protocols all
```
+367
View File
@@ -0,0 +1,367 @@
# Настройка BGP Сервера
## Предварительные требования
### Системные требования
- Ubuntu 24.04 LTS
- Минимум 2 ГБ RAM
- Минимум 10 ГБ свободного места на диске
- Статический IP адрес
- Root доступ или sudo права
### Сетевые требования
- Открытый порт 179 (BGP)
- Настроенный firewall
- Стабильное интернет-соединение
## Пошаговая установка
### 1. Подготовка системы
```bash
# Обновление системы
sudo apt update && sudo apt upgrade -y
# Установка необходимых пакетов
sudo apt install -y python3 python3-pip git curl wget
```
### 2. Клонирование проекта
```bash
# Клонирование репозитория (если используете git)
git clone <repository-url>
cd bgp-server
# Или копирование файлов вручную
```
### 3. Запуск установки
```bash
# Сделать скрипт исполняемым
chmod +x install.sh
# Запуск установки
sudo ./install.sh
```
### 4. Настройка конфигурации
После установки необходимо настроить конфигурационные файлы:
#### Настройка router ID
Отредактируйте файлы `/etc/bird/bird.conf` и `/etc/bird/bird6.conf`:
```bash
sudo nano /etc/bird/bird.conf
```
Найдите строку:
```
router id 192.168.1.1;
```
Замените на ваш реальный IP адрес:
```
router id YOUR_SERVER_IP;
```
#### Настройка ASN
В том же файле найдите:
```
local as 65001;
```
Замените на ваш ASN:
```
local as YOUR_ASN;
```
### 5. Настройка префиксов
Отредактируйте файл `/opt/bgp-server/data/prefixes.txt`:
```bash
sudo nano /opt/bgp-server/data/prefixes.txt
```
Формат записи:
```
# prefix community description
192.168.1.0/24 65001:100 "Customer A - Premium"
10.0.1.0/24 65001:200 "Customer B - Standard"
```
### 6. Загрузка префиксов
```bash
# Загрузка префиксов из файла
python3 /opt/bgp-server/scripts/load_prefixes.py
# Проверка статуса
python3 /opt/bgp-server/scripts/monitor.py
```
## Конфигурация клиентов
### Настройка BGP клиента
Клиенты должны настроить BGP сессию с вашим сервером:
```
# Пример конфигурации для клиента (Cisco)
router bgp CLIENT_ASN
neighbor YOUR_SERVER_IP remote-as YOUR_ASN
neighbor YOUR_SERVER_IP description "BGP Server"
neighbor YOUR_SERVER_IP send-community
neighbor YOUR_SERVER_IP route-map EXPORT out
!
route-map EXPORT permit 10
set community YOUR_ASN:100
!
```
### Настройка для MikroTik
```
/routing bgp instance
add name=bgp-server as=CLIENT_ASN router-id=CLIENT_ROUTER_ID
/routing bgp peer
add name=bgp-server-peer instance=bgp-server remote-address=YOUR_SERVER_IP remote-as=YOUR_ASN
```
## Мониторинг и управление
### Основные команды
```bash
# Статус BGP сервера
bgp-status
# Загрузка префиксов
bgp-load
# Непрерывный мониторинг
bgp-monitor
# Статус сервисов
bird-status
# Перезапуск сервисов
bird-restart
# Просмотр логов
bird-logs
```
### Проверка BGP сессий
```bash
# Показать все протоколы
sudo birdc show protocols
# Показать маршруты
sudo birdc show routes
# Показать BGP пиры
sudo birdc show protocols all bgp
```
### Просмотр логов
```bash
# Логи BIRD IPv4
sudo journalctl -u bird -f
# Логи BIRD IPv6
sudo journalctl -u bird6 -f
# Логи загрузки префиксов
sudo tail -f /var/log/bird/prefix_loader.log
# Логи мониторинга
sudo tail -f /var/log/bird/monitor.log
```
## Безопасность
### Firewall настройки
```bash
# Проверка статуса firewall
sudo ufw status
# Разрешение дополнительных портов (если нужно)
sudo ufw allow 22/tcp comment "SSH"
sudo ufw allow 179/tcp comment "BGP"
# Включение firewall
sudo ufw enable
```
### Ограничение доступа
```bash
# Ограничение доступа к birdc только с localhost
sudo nano /etc/bird/bird.conf
```
Добавьте в конфигурацию:
```
# Ограничение доступа к birdc
control socket "/var/run/bird.ctl" mode 0600 owner bird group bird;
```
### MD5 аутентификация
Для дополнительной безопасности можно включить MD5 аутентификацию:
```bash
# В конфигурации BIRD
protocol bgp {
# ... другие настройки ...
password "your_secure_password";
}
```
## Troubleshooting
### Частые проблемы
#### 1. BGP сессия не устанавливается
```bash
# Проверьте firewall
sudo ufw status
# Проверьте логи
sudo journalctl -u bird -n 50
# Проверьте конфигурацию
sudo birdc -p /etc/bird/bird.conf
```
#### 2. Префиксы не загружаются
```bash
# Проверьте права доступа
ls -la /opt/bgp-server/scripts/load_prefixes.py
# Проверьте синтаксис файла префиксов
python3 /opt/bgp-server/scripts/load_prefixes.py --file /opt/bgp-server/data/prefixes.txt
# Проверьте логи
sudo tail -f /var/log/bird/prefix_loader.log
```
#### 3. Высокая нагрузка на CPU
```bash
# Проверьте количество маршрутов
sudo birdc show route count
# Проверьте использование памяти
free -h
# Оптимизируйте конфигурацию
sudo nano /etc/bird/bird.conf
```
### Полезные команды для диагностики
```bash
# Проверка сетевых соединений
netstat -tlnp | grep :179
# Проверка процессов BIRD
ps aux | grep bird
# Проверка использования ресурсов
htop
# Проверка дискового пространства
df -h
# Проверка системных логов
dmesg | tail -20
```
## Обновление и обслуживание
### Обновление BIRD
```bash
# Обновление пакетов
sudo apt update
sudo apt upgrade bird2
# Перезапуск сервисов
sudo systemctl restart bird bird6
```
### Резервное копирование
```bash
# Создание резервной копии конфигурации
sudo cp /etc/bird/bird.conf /etc/bird/bird.conf.backup.$(date +%Y%m%d)
sudo cp /etc/bird/bird6.conf /etc/bird/bird6.conf.backup.$(date +%Y%m%d)
# Резервная копия префиксов
sudo cp /opt/bgp-server/data/prefixes.txt /opt/bgp-server/data/prefixes.txt.backup.$(date +%Y%m%d)
```
### Восстановление из резервной копии
```bash
# Восстановление конфигурации
sudo cp /etc/bird/bird.conf.backup.YYYYMMDD /etc/bird/bird.conf
sudo cp /etc/bird/bird6.conf.backup.YYYYMMDD /etc/bird/bird6.conf
# Перезапуск сервисов
sudo systemctl restart bird bird6
```
## Дополнительные возможности
### Автоматическая загрузка префиксов
Система автоматически загружает префиксы каждые 5 минут. Для изменения интервала:
```bash
sudo nano /etc/systemd/system/bgp-prefix-loader.timer
```
Измените строку:
```
OnUnitActiveSec=5min
```
### Настройка уведомлений
Можно настроить отправку уведомлений при проблемах:
```bash
# Установка mailutils
sudo apt install mailutils
# Настройка отправки уведомлений в скриптах
```
### Интеграция с системой мониторинга
Для интеграции с системами мониторинга (Zabbix, Nagios):
```bash
# Создание скрипта для проверки здоровья
sudo nano /opt/bgp-server/scripts/health_check.py
```
## Поддержка
При возникновении проблем:
1. Проверьте логи: `/var/log/bird/`
2. Проверьте статус сервисов: `systemctl status bird bird6`
3. Проверьте конфигурацию: `birdc -p /etc/bird/bird.conf`
4. Обратитесь к документации BIRD: https://bird.network.cz/
+279
View File
@@ -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/
-59
View File
@@ -1,59 +0,0 @@
#!/bin/bash
# Bash script to check BGP server status on Linux
# BGP Server Status Check Script
echo -e "\033[36mChecking BGP Server Status...\033[0m"
# Check if Docker is running
if ! docker version >/dev/null 2>&1; then
echo -e "\033[31m✗ Docker is not running\033[0m"
exit 1
fi
echo -e "\033[32m✓ Docker is running\033[0m"
# Check container status
echo -e "\n\033[33mContainer Status:\033[0m"
container_status=$(docker ps --filter "name=bgp-server" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}")
if [ -n "$container_status" ] && ! echo "$container_status" | grep -q "NAMES"; then
echo -e "\033[32m$container_status\033[0m"
else
echo -e "\033[31m✗ BGP container is not running\033[0m"
echo -e "\033[33mTo start the server, run: ./start-bgp-server.sh\033[0m"
exit 1
fi
# Check network ports
echo -e "\n\033[33mNetwork Ports:\033[0m"
if netstat -tuln 2>/dev/null | grep -q ":179 "; then
echo -e "\033[32m✓ BGP port 179 is listening\033[0m"
else
echo -e "\033[31m✗ BGP port 179 is not listening\033[0m"
fi
if netstat -tuln 2>/dev/null | grep -q ":2601 "; then
echo -e "\033[32m✓ vtysh port 2601 is listening\033[0m"
else
echo -e "\033[31m✗ vtysh port 2601 is not listening\033[0m"
fi
# Check BGP status inside container
echo -e "\n\033[33mBGP Status:\033[0m"
bgp_summary=$(docker exec bgp-server vtysh -c "show ip bgp summary" 2>/dev/null)
if [ -n "$bgp_summary" ]; then
echo -e "\033[32m✓ BGP daemon is running\033[0m"
echo -e "\033[36mBGP Summary:\033[0m"
echo -e "\033[37m$bgp_summary\033[0m"
else
echo -e "\033[31m✗ BGP daemon is not responding\033[0m"
fi
# Check recent logs
echo -e "\n\033[33mRecent Logs:\033[0m"
recent_logs=$(docker-compose logs --tail=10 bgp-server 2>/dev/null)
if [ -n "$recent_logs" ]; then
echo -e "\033[37m$recent_logs\033[0m"
else
echo -e "\033[90mNo recent logs available\033[0m"
fi
echo -e "\n\033[32mStatus check completed!\033[0m"
+104
View File
@@ -0,0 +1,104 @@
# BIRD Configuration for BGP Server
# 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;
}
# Таблица для 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;
# Настройки для всех пиров
hold time 90;
keepalive time 30;
startup hold time 240;
# Принимаем соединения от любых IP
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
import filter {
# Принимаем маршруты с community
if bgp_community.matches(65001:*) then {
accept;
}
reject;
};
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;
}
+103
View File
@@ -0,0 +1,103 @@
# BIRD IPv6 Configuration for BGP Server
# Ubuntu 24.04
# Logging configuration
log "/var/log/bird/bird6.log" all;
log stderr all;
# Router ID (замените на ваш IPv4 адрес)
router id 192.168.1.1;
# 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;
# Пример статических маршрутов 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;
# Настройки для всех пиров
hold time 90;
keepalive time 30;
startup hold time 240;
# Принимаем соединения от любых IPv6 адресов
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
import filter {
# Принимаем маршруты с community
if bgp_community.matches(65001:*) then {
accept;
}
reject;
};
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;
}
+97
View File
@@ -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;
}
+66
View File
@@ -0,0 +1,66 @@
# BIRD Configuration for BGP Server
# Ubuntu 24.04 - Fixed Version
# Logging configuration
log "/var/log/bird/bird.log" all;
log stderr all;
# Router ID (замените на ваш IP адрес)
router id 77.232.38.173;
# Protocol configuration
protocol device {
scan time 10;
}
protocol direct {
disabled;
}
protocol kernel {
disabled;
}
# Статическая таблица маршрутов
protocol static {
# Маршруты будут загружаться из файла prefixes.txt
# через скрипт load_prefixes.py
# Пример статических маршрутов
# 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 any_peer {
# Локальные настройки
local as 65001;
# Настройки для всех пиров
hold time 90;
keepalive time 30;
startup hold time 240;
# Принимаем соединения от любых IP
listen bgp port 179;
# НЕ импортируем маршруты от пиров
import none;
# Экспортируем только статические маршруты
export where source = RTS_STATIC;
# MD5 аутентификация (опционально)
# password "your_bgp_password";
# Настройки для больших таблиц маршрутизации
table limit 100000;
}
# Настройки для мониторинга
protocol pipe {
table master;
peer table bgp_table;
import all;
export none;
}
+42
View File
@@ -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; # Экспортируем все маршруты пирам
}
+36
View File
@@ -0,0 +1,36 @@
# Минимальная тестовая конфигурация BIRD
# Ubuntu 24.04
# Logging
log stderr all;
# Router ID
router id 77.232.38.173;
# Device protocol
protocol device {
scan time 10;
}
# Direct protocol (disabled)
protocol direct {
disabled;
}
# Kernel protocol (disabled)
protocol kernel {
disabled;
}
# Static routes
protocol static {
# Пустая таблица статических маршрутов
}
# BGP protocol
protocol bgp any_peer {
local as 65001;
listen bgp port 179;
import none;
export where source = RTS_STATIC;
}
+31
View File
@@ -0,0 +1,31 @@
# BGP Prefixes with Community Configuration
# Format: prefix community description
# Community format: ASN:value (e.g., 65001:100)
# Customer A - Premium Service
192.168.1.0/24 65001:100 "Customer A - Premium"
192.168.2.0/24 65001:100 "Customer A - Premium"
10.0.1.0/24 65001:100 "Customer A - Premium"
# Customer B - Standard Service
10.0.2.0/24 65001:200 "Customer B - Standard"
172.16.1.0/24 65001:200 "Customer B - Standard"
172.16.2.0/24 65001:200 "Customer B - Standard"
# Customer C - Basic Service
203.0.113.0/24 65001:300 "Customer C - Basic"
203.0.113.16/28 65001:300 "Customer C - Basic"
198.51.100.0/24 65001:300 "Customer C - Basic"
# Customer D - Enterprise Service
192.0.2.0/24 65001:400 "Customer D - Enterprise"
192.0.3.0/24 65001:400 "Customer D - Enterprise"
10.1.0.0/16 65001:400 "Customer D - Enterprise"
# Customer E - High Priority
172.20.0.0/16 65001:500 "Customer E - High Priority"
10.10.0.0/16 65001:500 "Customer E - High Priority"
# Customer F - Low Priority
192.168.100.0/24 65001:600 "Customer F - Low Priority"
10.100.0.0/16 65001:600 "Customer F - Low Priority"
-31
View File
@@ -1,31 +0,0 @@
version: '3.8'
services:
bgp-server:
image: quay.io/frrouting/frr:latest
container_name: bgp-server
hostname: bgp-server
privileged: true
network_mode: host
volumes:
- ./frr.conf:/etc/frr/frr.conf:ro
- ./prefixes.txt:/etc/frr/prefixes.txt:ro
- frr-logs:/var/log/frr
- frr-run:/var/run/frr
environment:
- FRR_USER=frr
- FRR_VTYSH_PASSWORD=zebra
ports:
- "179:179" # BGP port
- "2601:2601" # vtysh port
restart: unless-stopped
command: ["/usr/lib/frr/frrinit.sh", "start"]
cap_add:
- NET_ADMIN
- SYS_ADMIN
security_opt:
- seccomp:unconfined
volumes:
frr-logs:
frr-run:
+401
View File
@@ -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 "$@"
+137
View File
@@ -0,0 +1,137 @@
#!/bin/bash
# Скрипт для исправления конфигурации BIRD
# Ubuntu 24.04
set -e
echo "=========================================="
echo "Исправление конфигурации BIRD"
echo "Ubuntu 24.04"
echo "=========================================="
# Получаем IP адрес сервера
SERVER_IP=$(curl -s ifconfig.me 2>/dev/null || echo "192.168.1.1")
echo "[INFO] Используется IP адрес: $SERVER_IP"
# Останавливаем BIRD если запущен
echo "[INFO] Остановка BIRD..."
systemctl stop bird 2>/dev/null || true
# Создаем резервную копию текущей конфигурации
if [ -f /etc/bird/bird.conf ]; then
cp /etc/bird/bird.conf /etc/bird/bird.conf.backup.$(date +%Y%m%d_%H%M%S)
echo "[INFO] Создана резервная копия: /etc/bird/bird.conf.backup"
fi
# Создаем простую рабочую конфигурацию
echo "[INFO] Создание простой конфигурации BIRD..."
cat > /etc/bird/bird.conf << EOF
# Простая конфигурация BIRD для BGP сервера
# Ubuntu 24.04
# Logging
log stderr all;
log "/var/log/bird/bird.log" all;
# Router ID
router id $SERVER_IP;
# Device protocol
protocol device {
scan time 10;
}
# Direct protocol (disabled)
protocol direct {
disabled;
}
# Kernel protocol (disabled)
protocol kernel {
disabled;
}
# Static routes
protocol static {
# Статические маршруты будут загружаться через скрипт
}
# BGP protocol - принимаем любых пиров
protocol bgp any_peer {
local as 65001;
listen bgp port 179;
import none; # Не принимаем маршруты от пиров
export where source = RTS_STATIC; # Экспортируем только статические маршруты
}
EOF
# Проверяем синтаксис конфигурации (пробуем запустить в тестовом режиме)
echo "[INFO] Проверка синтаксиса конфигурации..."
if timeout 5s bird -c /etc/bird/bird.conf -f 2>/dev/null; then
echo "[SUCCESS] Конфигурация синтаксически корректна"
else
echo "[INFO] Попытка создания минимальной конфигурации..."
# Создаем еще более простую конфигурацию
cat > /etc/bird/bird.conf << EOF
# Минимальная конфигурация BIRD
log stderr all;
router id $SERVER_IP;
protocol device {
scan time 10;
}
protocol direct {
disabled;
}
protocol kernel {
disabled;
}
protocol static {
}
protocol bgp any_peer {
local as 65001;
listen bgp port 179;
import none;
export where source = RTS_STATIC;
}
EOF
echo "[INFO] Минимальная конфигурация создана"
fi
# Создаем директорию для логов если не существует
mkdir -p /var/log/bird
chown bird:bird /var/log/bird 2>/dev/null || true
# Запускаем BIRD
echo "[INFO] Запуск BIRD..."
systemctl start bird
# Проверяем статус
if systemctl is-active --quiet bird; then
echo "[SUCCESS] BIRD успешно запущен"
# Показываем статус
echo "[INFO] Статус BIRD:"
systemctl status bird --no-pager -l
# Показываем информацию о протоколах
echo "[INFO] Информация о протоколах:"
birdc show protocols 2>/dev/null || echo "birdc недоступен"
else
echo "[ERROR] Не удалось запустить BIRD"
echo "[INFO] Логи BIRD:"
journalctl -u bird --no-pager -l -n 20
exit 1
fi
echo "[SUCCESS] Конфигурация BIRD исправлена и сервис запущен"
echo "[INFO] BIRD слушает на порту 179 и принимает соединения от любых пиров"
echo "[INFO] Сервер НЕ будет принимать префиксы от пиров, только экспортировать свои"
+224
View File
@@ -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 "$@"
-69
View File
@@ -1,69 +0,0 @@
# FRRouting configuration file
# BGP Server Configuration
# Enable password for vtysh
password zebra
enable password zebra
# Router ID
router-id 192.168.1.1
# BGP configuration
router bgp 65000
bgp router-id 192.168.1.1
# Network configuration
network 192.168.1.0/24
network 10.0.0.0/8
network 172.16.0.0/12
network 203.0.113.0/24
network 198.51.100.0/24
network 192.0.2.0/24
network 8.8.8.0/24
network 1.1.1.0/24
network 9.9.9.0/24
# IPv6 networks
network 2001:db8::/32
network 2001:db8:1::/48
network 2001:db8:2::/48
# Community configuration
neighbor 0.0.0.0/0 remote-as external
neighbor 0.0.0.0/0 send-community
neighbor 0.0.0.0/0 send-community extended
# IPv6 neighbors
neighbor ::/0 remote-as external
neighbor ::/0 send-community
neighbor ::/0 send-community extended
# Route redistribution
redistribute connected
redistribute static
# Static routes with communities
ip route 192.168.1.0/24 null0 community 65000:100:65000:200
ip route 10.0.0.0/8 null0 community 65000:101:65000:201
ip route 172.16.0.0/12 null0 community 65000:102:65000:202
ip route 203.0.113.0/24 null0 community 65000:110:65000:210
ip route 198.51.100.0/24 null0 community 65000:111:65000:211
ip route 192.0.2.0/24 null0 community 65000:112:65000:212
ip route 8.8.8.0/24 null0 community 65000:120:65000:220
ip route 1.1.1.0/24 null0 community 65000:121:65000:221
ip route 9.9.9.0/24 null0 community 65000:122:65000:222
# IPv6 static routes
ipv6 route 2001:db8::/32 null0 community 65000:300:65000:400
ipv6 route 2001:db8:1::/48 null0 community 65000:301:65000:401
ipv6 route 2001:db8:2::/48 null0 community 65000:302:65000:402
# Interface configuration
interface eth0
ip address 192.168.1.1/24
ipv6 address 2001:db8::1/64
no shutdown
# Logging
log file /var/log/frr/frr.log
log timestamp precision 6
-106
View File
@@ -1,106 +0,0 @@
#!/bin/bash
# Bash script to install dependencies on Linux
# Dependencies Installation Script
echo -e "\033[36mInstalling BGP Server Dependencies...\033[0m"
# Detect OS
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$NAME
VER=$VERSION_ID
else
echo -e "\033[31mCannot detect OS version\033[0m"
exit 1
fi
echo -e "\033[33mDetected OS: $OS $VER\033[0m"
# Function to install Docker
install_docker() {
echo -e "\033[33mInstalling Docker...\033[0m"
# Remove old versions
sudo apt-get remove docker docker-engine docker.io containerd runc 2>/dev/null || true
# Update package index
sudo apt-get update
# Install prerequisites
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# Add Docker's official GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Set up stable repository
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# Add user to docker group
sudo usermod -aG docker $USER
# Start and enable Docker
sudo systemctl start docker
sudo systemctl enable docker
echo -e "\033[32m✓ Docker installed successfully\033[0m"
echo -e "\033[33mNote: You may need to log out and back in for group changes to take effect\033[0m"
}
# Function to install Docker Compose
install_docker_compose() {
echo -e "\033[33mInstalling Docker Compose...\033[0m"
# Download Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# Make it executable
sudo chmod +x /usr/local/bin/docker-compose
# Create symbolic link
sudo ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
echo -e "\033[32m✓ Docker Compose installed successfully\033[0m"
}
# Check if Docker is installed
if ! command -v docker &> /dev/null; then
echo -e "\033[31mDocker is not installed\033[0m"
install_docker
else
echo -e "\033[32m✓ Docker is already installed\033[0m"
fi
# Check if Docker Compose is installed
if ! command -v docker-compose &> /dev/null; then
echo -e "\033[31mDocker Compose is not installed\033[0m"
install_docker_compose
else
echo -e "\033[32m✓ Docker Compose is already installed\033[0m"
fi
# Make scripts executable
echo -e "\033[33mMaking scripts executable...\033[0m"
chmod +x *.sh
# Test Docker installation
echo -e "\033[33mTesting Docker installation...\033[0m"
if sudo docker run hello-world >/dev/null 2>&1; then
echo -e "\033[32m✓ Docker is working correctly\033[0m"
else
echo -e "\033[31m✗ Docker test failed\033[0m"
echo -e "\033[33mYou may need to log out and back in, or restart the system\033[0m"
fi
echo -e "\n\033[32mDependencies installation completed!\033[0m"
echo -e "\033[33mTo start the BGP server, run: ./start-bgp-server.sh\033[0m"
+571
View File
@@ -0,0 +1,571 @@
#!/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
}
# Получение 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
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
# Получение 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/
cp scripts/monitor.py /opt/bgp-server/scripts/
# Копирование файла с префиксами
cp data/prefixes.txt /opt/bgp-server/data/
# Установка прав на выполнение для скриптов
chmod +x /opt/bgp-server/scripts/*.py
# Установка правильных прав доступа к конфигурации
chown bird:bird /etc/bird/bird*.conf
chmod 644 /etc/bird/bird*.conf
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 сервисов..."
# Включение автозапуска для bird (IPv4)
systemctl enable bird
# Проверка существования 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
# Проверка статуса bird
if systemctl is-active --quiet bird; then
print_success "BIRD (IPv4) запущен"
else
print_error "Ошибка запуска BIRD (IPv4)"
systemctl status bird
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_error "Ошибка запуска BIRD (IPv6)"
systemctl status bird6
fi
else
print_warning "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)"
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 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_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 таймера для загрузки префиксов..."
# Создание сервиса
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 ""
# Проверка 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
print_success "BGP порт 179 прослушивается"
else
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:"
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 "$@"
+198
View File
@@ -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 "$@"
-23
View File
@@ -1,23 +0,0 @@
# BGP Prefixes with Communities
# Format: prefix community1:community2:community3
# Communities format: ASN:value (e.g., 65000:100)
# Public IP ranges
192.168.1.0/24 65000:100:65000:200
10.0.0.0/8 65000:101:65000:201
172.16.0.0/12 65000:102:65000:202
# Specific subnets
203.0.113.0/24 65000:110:65000:210
198.51.100.0/24 65000:111:65000:211
192.0.2.0/24 65000:112:65000:212
# IPv6 prefixes
2001:db8::/32 65000:300:65000:400
2001:db8:1::/48 65000:301:65000:401
2001:db8:2::/48 65000:302:65000:402
# Additional prefixes for testing
8.8.8.0/24 65000:120:65000:220
1.1.1.0/24 65000:121:65000:221
9.9.9.0/24 65000:122:65000:222
-63
View File
@@ -1,63 +0,0 @@
#!/bin/bash
# Quick run script for BGP container
# Simple one-command BGP server launcher
echo -e "\033[32m🚀 Quick BGP Server Launcher\033[0m"
# Check if required files exist
if [ ! -f "frr.conf" ]; then
echo -e "\033[31mError: frr.conf not found in current directory\033[0m"
exit 1
fi
if [ ! -f "prefixes.txt" ]; then
echo -e "\033[31mError: prefixes.txt not found in current directory\033[0m"
exit 1
fi
# Stop existing container if running
docker stop bgp-server 2>/dev/null || true
docker rm bgp-server 2>/dev/null || true
# Pull latest image
echo -e "\033[33m📥 Pulling FRRouting image...\033[0m"
docker pull quay.io/frrouting/frr:latest
# Run container
echo -e "\033[33m🚀 Starting BGP server...\033[0m"
docker run -d \
--name bgp-server \
--hostname bgp-server \
--privileged \
--network host \
-v "$(pwd)/frr.conf:/etc/frr/frr.conf:ro" \
-v "$(pwd)/prefixes.txt:/etc/frr/prefixes.txt:ro" \
-e FRR_USER=frr \
-e FRR_VTYSH_PASSWORD=zebra \
--cap-add=NET_ADMIN \
--cap-add=SYS_ADMIN \
--security-opt seccomp=unconfined \
--restart unless-stopped \
quay.io/frrouting/frr:latest \
/usr/lib/frr/frrinit.sh start
# Wait for startup
sleep 5
# Show status
echo -e "\033[36m📊 Container Status:\033[0m"
docker ps --filter "name=bgp-server" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# Show BGP status
echo -e "\n\033[36m🌐 BGP Status:\033[0m"
if docker exec bgp-server vtysh -c "show ip bgp summary" 2>/dev/null; then
echo -e "\n\033[32m✅ BGP Server is running successfully!\033[0m"
else
echo -e "\n\033[33m⚠️ BGP daemon is starting up...\033[0m"
fi
echo -e "\n\033[33m🔧 Useful commands:\033[0m"
echo -e " Connect to vtysh: docker exec -it bgp-server vtysh"
echo -e " View logs: docker logs bgp-server"
echo -e " Stop server: docker stop bgp-server"
echo -e " Check status: docker ps | grep bgp-server"
-21
View File
@@ -1,21 +0,0 @@
#!/bin/bash
# Quick stop script for BGP container
# Simple one-command BGP server stopper
echo -e "\033[33m🛑 Quick BGP Server Stopper\033[0m"
# Check if container is running
if docker ps -q -f name=bgp-server | grep -q .; then
echo -e "\033[33m⏹️ Stopping BGP server...\033[0m"
docker stop bgp-server
docker rm bgp-server
echo -e "\033[32m✅ BGP Server stopped successfully!\033[0m"
else
echo -e "\033[31m❌ BGP Server is not running\033[0m"
fi
# Show remaining containers
echo -e "\n\033[36m📊 Remaining containers:\033[0m"
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
echo -e "\n\033[33m🚀 To start again: ./quick-run.sh\033[0m"
+16
View File
@@ -0,0 +1,16 @@
# Python dependencies for BGP Server
# These are mostly built-in modules, but listed for completeness
# Core modules (built-in)
# ipaddress - for IP address validation
# subprocess - for executing system commands
# logging - for logging functionality
# json - for JSON output
# time - for timing functions
# datetime - for date/time operations
# os - for operating system interface
# sys - for system-specific parameters
# Optional: for enhanced functionality
# psutil>=5.8.0 - for better system monitoring (optional)
# requests>=2.25.0 - for HTTP API calls (optional)
-148
View File
@@ -1,148 +0,0 @@
#!/bin/bash
# Ready-to-use Docker container script for BGP server
# BGP Container Runner Script
CONTAINER_NAME="bgp-server"
IMAGE_NAME="quay.io/frrouting/frr:latest"
BGP_PORT="179"
VTYSH_PORT="2601"
CONFIG_DIR="$(pwd)"
echo -e "\033[36m=== BGP Server Container Runner ===\033[0m"
# Function to check if Docker is running
check_docker() {
if ! docker version >/dev/null 2>&1; then
echo -e "\033[31mError: Docker is not running. Please start Docker first.\033[0m"
exit 1
fi
echo -e "\033[32m✓ Docker is running\033[0m"
}
# Function to stop existing container
stop_container() {
if docker ps -q -f name=$CONTAINER_NAME | grep -q .; then
echo -e "\033[33mStopping existing container...\033[0m"
docker stop $CONTAINER_NAME
docker rm $CONTAINER_NAME
fi
}
# Function to pull image
pull_image() {
echo -e "\033[33mPulling FRRouting image...\033[0m"
docker pull $IMAGE_NAME
}
# Function to create and run container
run_container() {
echo -e "\033[33mStarting BGP container...\033[0m"
docker run -d \
--name $CONTAINER_NAME \
--hostname $CONTAINER_NAME \
--privileged \
--network host \
-v "$CONFIG_DIR/frr.conf:/etc/frr/frr.conf:ro" \
-v "$CONFIG_DIR/prefixes.txt:/etc/frr/prefixes.txt:ro" \
-e FRR_USER=frr \
-e FRR_VTYSH_PASSWORD=zebra \
--cap-add=NET_ADMIN \
--cap-add=SYS_ADMIN \
--security-opt seccomp=unconfined \
--restart unless-stopped \
$IMAGE_NAME \
/usr/lib/frr/frrinit.sh start
}
# Function to check container status
check_status() {
echo -e "\033[36mContainer Status:\033[0m"
docker ps --filter "name=$CONTAINER_NAME" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
echo -e "\n\033[36mNetwork Ports:\033[0m"
if netstat -tuln 2>/dev/null | grep -q ":179 "; then
echo -e "\033[32m✓ BGP port 179 is listening\033[0m"
else
echo -e "\033[31m✗ BGP port 179 is not listening\033[0m"
fi
if netstat -tuln 2>/dev/null | grep -q ":2601 "; then
echo -e "\033[32m✓ vtysh port 2601 is listening\033[0m"
else
echo -e "\033[31m✗ vtysh port 2601 is not listening\033[0m"
fi
}
# Function to show logs
show_logs() {
echo -e "\n\033[36mContainer Logs:\033[0m"
docker logs $CONTAINER_NAME
}
# Function to show usage
show_usage() {
echo -e "\033[33mUsage:\033[0m"
echo -e " $0 [start|stop|restart|status|logs|help]"
echo -e ""
echo -e "\033[33mCommands:\033[0m"
echo -e " start - Start BGP container"
echo -e " stop - Stop BGP container"
echo -e " restart - Restart BGP container"
echo -e " status - Show container status"
echo -e " logs - Show container logs"
echo -e " help - Show this help"
echo -e ""
echo -e "\033[33mExamples:\033[0m"
echo -e " $0 start"
echo -e " $0 status"
echo -e " $0 logs"
}
# Main script logic
case "${1:-start}" in
start)
check_docker
stop_container
pull_image
run_container
sleep 3
check_status
show_logs
echo -e "\n\033[32mBGP Server is running!\033[0m"
echo -e "\033[33mTo connect to vtysh: docker exec -it $CONTAINER_NAME vtysh\033[0m"
echo -e "\033[33mTo view logs: $0 logs\033[0m"
echo -e "\033[33mTo stop: $0 stop\033[0m"
;;
stop)
echo -e "\033[33mStopping BGP container...\033[0m"
docker stop $CONTAINER_NAME 2>/dev/null || true
docker rm $CONTAINER_NAME 2>/dev/null || true
echo -e "\033[32mBGP container stopped\033[0m"
;;
restart)
echo -e "\033[33mRestarting BGP container...\033[0m"
$0 stop
sleep 2
$0 start
;;
status)
check_docker
check_status
;;
logs)
if docker ps -q -f name=$CONTAINER_NAME | grep -q .; then
show_logs
else
echo -e "\033[31mContainer is not running\033[0m"
fi
;;
help|--help|-h)
show_usage
;;
*)
echo -e "\033[31mUnknown command: $1\033[0m"
show_usage
exit 1
;;
esac
+264
View File
@@ -0,0 +1,264 @@
#!/usr/bin/env python3
"""
BGP Prefix Loader Script
Загружает префиксы из файла prefixes.txt в BIRD с настройкой community
"""
import os
import sys
import subprocess
import ipaddress
import logging
from datetime import datetime
from typing import List, Tuple, Optional
# Настройка логирования
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('/var/log/bird/prefix_loader.log'),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
class BGPPrefixLoader:
def __init__(self, prefixes_file: str = '/opt/bgp-server/data/prefixes.txt'):
self.prefixes_file = prefixes_file
self.birdc_path = '/usr/bin/birdc'
self.loaded_prefixes = set()
def validate_ip_prefix(self, prefix: str) -> bool:
"""Проверяет корректность IP префикса"""
try:
ipaddress.ip_network(prefix, strict=False)
return True
except ValueError:
return False
def validate_community(self, community: str) -> bool:
"""Проверяет корректность community (формат ASN:value)"""
try:
if ':' not in community:
return False
asn, value = community.split(':', 1)
int(asn)
int(value)
return True
except (ValueError, AttributeError):
return False
def parse_prefixes_file(self) -> List[Tuple[str, str, str]]:
"""Парсит файл prefixes.txt и возвращает список префиксов с community"""
prefixes = []
if not os.path.exists(self.prefixes_file):
logger.error(f"Файл {self.prefixes_file} не найден")
return prefixes
try:
with open(self.prefixes_file, 'r', encoding='utf-8') as f:
for line_num, line in enumerate(f, 1):
line = line.strip()
# Пропускаем пустые строки и комментарии
if not line or line.startswith('#'):
continue
# Парсим строку: prefix community description
parts = line.split(None, 2)
if len(parts) < 2:
logger.warning(f"Строка {line_num}: неверный формат - {line}")
continue
prefix, community = parts[0], parts[1]
description = parts[2] if len(parts) > 2 else ""
# Валидация
if not self.validate_ip_prefix(prefix):
logger.warning(f"Строка {line_num}: неверный префикс - {prefix}")
continue
if not self.validate_community(community):
logger.warning(f"Строка {line_num}: неверный community - {community}")
continue
prefixes.append((prefix, community, description))
logger.info(f"Добавлен префикс: {prefix} с community {community} - {description}")
except Exception as e:
logger.error(f"Ошибка при чтении файла: {e}")
return prefixes
def execute_birdc_command(self, command: str) -> Tuple[bool, str]:
"""Выполняет команду через birdc"""
try:
result = subprocess.run(
[self.birdc_path] + command.split(),
capture_output=True,
text=True,
timeout=30
)
if result.returncode == 0:
return True, result.stdout
else:
return False, result.stderr
except subprocess.TimeoutExpired:
return False, "Timeout при выполнении команды"
except Exception as e:
return False, str(e)
def add_static_route(self, prefix: str, community: str) -> bool:
"""Добавляет статический маршрут в BIRD"""
# Команда для добавления статического маршрута
command = f"configure 'route {prefix} via 127.0.0.1;'"
success, output = self.execute_birdc_command(command)
if success:
logger.info(f"Добавлен маршрут: {prefix}")
self.loaded_prefixes.add(prefix)
else:
logger.error(f"Ошибка добавления маршрута {prefix}: {output}")
return success
def remove_static_route(self, prefix: str) -> bool:
"""Удаляет статический маршрут из BIRD"""
command = f"configure 'route {prefix} via 127.0.0.1;'"
success, output = self.execute_birdc_command(command)
if success:
logger.info(f"Удален маршрут: {prefix}")
self.loaded_prefixes.discard(prefix)
else:
logger.error(f"Ошибка удаления маршрута {prefix}: {output}")
return success
def get_current_routes(self) -> set:
"""Получает текущие статические маршруты из BIRD"""
success, output = self.execute_birdc_command("show route table bgp_table")
if not success:
logger.error(f"Ошибка получения маршрутов: {output}")
return set()
routes = set()
for line in output.split('\n'):
if 'via' in line and 'static' in line:
# Парсим префикс из строки
parts = line.split()
if len(parts) > 0:
prefix = parts[0]
routes.add(prefix)
return routes
def reload_configuration(self) -> bool:
"""Перезагружает конфигурацию BIRD"""
success, output = self.execute_birdc_command("configure")
if success:
logger.info("Конфигурация BIRD перезагружена")
else:
logger.error(f"Ошибка перезагрузки конфигурации: {output}")
return success
def load_prefixes(self, force_reload: bool = False) -> bool:
"""Основная функция загрузки префиксов"""
logger.info("Начинаем загрузку префиксов...")
# Получаем текущие маршруты
current_routes = self.get_current_routes()
logger.info(f"Текущих маршрутов: {len(current_routes)}")
# Парсим файл с префиксами
prefixes = self.parse_prefixes_file()
logger.info(f"Найдено префиксов в файле: {len(prefixes)}")
if not prefixes:
logger.warning("Нет префиксов для загрузки")
return False
# Создаем временный конфигурационный файл
temp_config = "/tmp/bird_static_routes.conf"
try:
with open(temp_config, 'w') as f:
f.write("# Автоматически сгенерированные статические маршруты\n")
f.write("# Время создания: {}\n\n".format(datetime.now()))
for prefix, community, description in prefixes:
f.write(f"route {prefix} via 127.0.0.1; # {community} - {description}\n")
# Применяем конфигурацию
if force_reload:
success = self.reload_configuration()
else:
success = True
if success:
logger.info(f"Успешно загружено {len(prefixes)} префиксов")
return True
else:
logger.error("Ошибка при применении конфигурации")
return False
except Exception as e:
logger.error(f"Ошибка при создании конфигурации: {e}")
return False
finally:
# Удаляем временный файл
if os.path.exists(temp_config):
os.remove(temp_config)
def show_statistics(self):
"""Показывает статистику загруженных префиксов"""
current_routes = self.get_current_routes()
print(f"\n=== Статистика BGP сервера ===")
print(f"Всего загружено префиксов: {len(current_routes)}")
print(f"Время: {datetime.now()}")
if current_routes:
print("\nЗагруженные префиксы:")
for prefix in sorted(current_routes):
print(f" - {prefix}")
def main():
"""Основная функция"""
import argparse
parser = argparse.ArgumentParser(description='BGP Prefix Loader')
parser.add_argument('--file', '-f',
default='/opt/bgp-server/data/prefixes.txt',
help='Путь к файлу с префиксами')
parser.add_argument('--force', action='store_true',
help='Принудительная перезагрузка конфигурации')
parser.add_argument('--stats', action='store_true',
help='Показать статистику')
args = parser.parse_args()
loader = BGPPrefixLoader(args.file)
if args.stats:
loader.show_statistics()
else:
success = loader.load_prefixes(args.force)
if success:
loader.show_statistics()
sys.exit(0)
else:
sys.exit(1)
if __name__ == "__main__":
main()
+378
View File
@@ -0,0 +1,378 @@
#!/usr/bin/env python3
"""
BGP Monitor Script
Мониторинг BGP сессий, статистики и состояния сервера
"""
import os
import sys
import subprocess
import json
import time
import logging
from datetime import datetime
from typing import Dict, List, Optional
# Настройка логирования
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('/var/log/bird/monitor.log'),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
class BGPMonitor:
def __init__(self):
self.birdc_path = '/usr/bin/birdc'
self.bird6c_path = '/usr/bin/bird6c'
def execute_birdc_command(self, command: str, ipv6: bool = False) -> tuple:
"""Выполняет команду через birdc"""
try:
birdc = self.bird6c_path if ipv6 else self.birdc_path
result = subprocess.run(
[birdc] + command.split(),
capture_output=True,
text=True,
timeout=30
)
if result.returncode == 0:
return True, result.stdout
else:
return False, result.stderr
except subprocess.TimeoutExpired:
return False, "Timeout при выполнении команды"
except Exception as e:
return False, str(e)
def get_protocols_status(self, ipv6: bool = False) -> Dict:
"""Получает статус всех протоколов"""
success, output = self.execute_birdc_command("show protocols", ipv6)
if not success:
return {}
protocols = {}
current_protocol = None
for line in output.split('\n'):
line = line.strip()
if not line:
continue
# Находим имя протокола
if line.startswith('name') and 'state' in line:
parts = line.split()
if len(parts) >= 3:
protocol_name = parts[1]
state = parts[2]
protocols[protocol_name] = {
'state': state,
'info': {}
}
current_protocol = protocol_name
# Парсим дополнительную информацию
elif current_protocol and ':' in line:
key, value = line.split(':', 1)
key = key.strip()
value = value.strip()
protocols[current_protocol]['info'][key] = value
return protocols
def get_routes_count(self, ipv6: bool = False) -> Dict:
"""Получает количество маршрутов"""
success, output = self.execute_birdc_command("show route count", ipv6)
if not success:
return {}
routes_info = {}
for line in output.split('\n'):
line = line.strip()
if ':' in line:
key, value = line.split(':', 1)
key = key.strip()
value = value.strip()
routes_info[key] = value
return routes_info
def get_bgp_peers(self, ipv6: bool = False) -> List[Dict]:
"""Получает информацию о BGP пирах"""
protocols = self.get_protocols_status(ipv6)
bgp_peers = []
for name, info in protocols.items():
if name.startswith('bgp') and info['state'] == 'up':
peer_info = {
'name': name,
'state': info['state'],
'remote_ip': info['info'].get('Neighbor address', 'Unknown'),
'remote_as': info['info'].get('Neighbor AS', 'Unknown'),
'uptime': info['info'].get('Uptime', 'Unknown'),
'routes_received': info['info'].get('Routes received', '0'),
'routes_exported': info['info'].get('Routes exported', '0')
}
bgp_peers.append(peer_info)
return bgp_peers
def get_system_stats(self) -> Dict:
"""Получает системную статистику"""
stats = {
'timestamp': datetime.now().isoformat(),
'uptime': self.get_uptime(),
'memory_usage': self.get_memory_usage(),
'cpu_usage': self.get_cpu_usage(),
'disk_usage': self.get_disk_usage()
}
return stats
def get_uptime(self) -> str:
"""Получает время работы системы"""
try:
with open('/proc/uptime', 'r') as f:
uptime_seconds = float(f.read().split()[0])
days = int(uptime_seconds // 86400)
hours = int((uptime_seconds % 86400) // 3600)
minutes = int((uptime_seconds % 3600) // 60)
return f"{days}d {hours}h {minutes}m"
except:
return "Unknown"
def get_memory_usage(self) -> Dict:
"""Получает использование памяти"""
try:
with open('/proc/meminfo', 'r') as f:
lines = f.readlines()
mem_info = {}
for line in lines:
if ':' in line:
key, value = line.split(':', 1)
key = key.strip()
value = int(value.split()[0])
mem_info[key] = value
total = mem_info.get('MemTotal', 0)
available = mem_info.get('MemAvailable', 0)
used = total - available
usage_percent = (used / total * 100) if total > 0 else 0
return {
'total_mb': total // 1024,
'used_mb': used // 1024,
'available_mb': available // 1024,
'usage_percent': round(usage_percent, 1)
}
except:
return {'error': 'Unable to read memory info'}
def get_cpu_usage(self) -> Dict:
"""Получает использование CPU"""
try:
with open('/proc/loadavg', 'r') as f:
load_avg = f.read().split()
return {
'load_1min': float(load_avg[0]),
'load_5min': float(load_avg[1]),
'load_15min': float(load_avg[2])
}
except:
return {'error': 'Unable to read CPU info'}
def get_disk_usage(self) -> Dict:
"""Получает использование диска"""
try:
result = subprocess.run(
['df', '-h', '/'],
capture_output=True,
text=True
)
if result.returncode == 0:
lines = result.stdout.split('\n')
if len(lines) >= 2:
parts = lines[1].split()
if len(parts) >= 5:
return {
'total': parts[1],
'used': parts[2],
'available': parts[3],
'usage_percent': parts[4]
}
except:
pass
return {'error': 'Unable to read disk info'}
def check_bird_service_status(self) -> Dict:
"""Проверяет статус сервиса BIRD"""
try:
result = subprocess.run(
['systemctl', 'is-active', 'bird'],
capture_output=True,
text=True
)
bird_status = result.stdout.strip()
result = subprocess.run(
['systemctl', 'is-active', 'bird6'],
capture_output=True,
text=True
)
bird6_status = result.stdout.strip()
return {
'bird': bird_status,
'bird6': bird6_status,
'timestamp': datetime.now().isoformat()
}
except:
return {'error': 'Unable to check service status'}
def generate_report(self, output_format: str = 'text') -> str:
"""Генерирует отчет о состоянии BGP сервера"""
report = {
'timestamp': datetime.now().isoformat(),
'system': self.get_system_stats(),
'services': self.check_bird_service_status(),
'ipv4': {
'protocols': self.get_protocols_status(False),
'routes': self.get_routes_count(False),
'bgp_peers': self.get_bgp_peers(False)
},
'ipv6': {
'protocols': self.get_protocols_status(True),
'routes': self.get_routes_count(True),
'bgp_peers': self.get_bgp_peers(True)
}
}
if output_format == 'json':
return json.dumps(report, indent=2)
else:
return self.format_text_report(report)
def format_text_report(self, report: Dict) -> str:
"""Форматирует отчет в текстовом виде"""
output = []
output.append("=" * 60)
output.append("BGP SERVER STATUS REPORT")
output.append("=" * 60)
output.append(f"Time: {report['timestamp']}")
output.append("")
# Системная информация
output.append("SYSTEM INFORMATION:")
output.append("-" * 20)
sys_info = report['system']
output.append(f"Uptime: {sys_info['uptime']}")
if 'memory_usage' in sys_info and 'usage_percent' in sys_info['memory_usage']:
mem = sys_info['memory_usage']
output.append(f"Memory: {mem['used_mb']}MB / {mem['total_mb']}MB ({mem['usage_percent']}%)")
if 'cpu_usage' in sys_info and 'load_1min' in sys_info['cpu_usage']:
cpu = sys_info['cpu_usage']
output.append(f"Load Average: {cpu['load_1min']:.2f} (1min), {cpu['load_5min']:.2f} (5min), {cpu['load_15min']:.2f} (15min)")
output.append("")
# Статус сервисов
output.append("SERVICE STATUS:")
output.append("-" * 15)
services = report['services']
output.append(f"BIRD (IPv4): {services.get('bird', 'Unknown')}")
output.append(f"BIRD (IPv6): {services.get('bird6', 'Unknown')}")
output.append("")
# BGP пиры IPv4
output.append("BGP PEERS (IPv4):")
output.append("-" * 18)
ipv4_peers = report['ipv4']['bgp_peers']
if ipv4_peers:
for peer in ipv4_peers:
output.append(f" {peer['name']}: {peer['remote_ip']} (AS{peer['remote_as']}) - {peer['state']}")
output.append(f" Uptime: {peer['uptime']}, Routes: {peer['routes_exported']} exported")
else:
output.append(" No active BGP peers")
output.append("")
# BGP пиры IPv6
output.append("BGP PEERS (IPv6):")
output.append("-" * 18)
ipv6_peers = report['ipv6']['bgp_peers']
if ipv6_peers:
for peer in ipv6_peers:
output.append(f" {peer['name']}: {peer['remote_ip']} (AS{peer['remote_as']}) - {peer['state']}")
output.append(f" Uptime: {peer['uptime']}, Routes: {peer['routes_exported']} exported")
else:
output.append(" No active BGP peers")
output.append("")
# Статистика маршрутов
output.append("ROUTE STATISTICS:")
output.append("-" * 18)
ipv4_routes = report['ipv4']['routes']
ipv6_routes = report['ipv6']['routes']
if ipv4_routes:
output.append("IPv4 Routes:")
for key, value in ipv4_routes.items():
output.append(f" {key}: {value}")
if ipv6_routes:
output.append("IPv6 Routes:")
for key, value in ipv6_routes.items():
output.append(f" {key}: {value}")
output.append("=" * 60)
return "\n".join(output)
def monitor_continuously(self, interval: int = 60):
"""Непрерывный мониторинг с заданным интервалом"""
print(f"Starting continuous monitoring (interval: {interval}s)")
print("Press Ctrl+C to stop")
try:
while True:
report = self.generate_report('text')
print(report)
time.sleep(interval)
except KeyboardInterrupt:
print("\nMonitoring stopped")
def main():
"""Основная функция"""
import argparse
parser = argparse.ArgumentParser(description='BGP Monitor')
parser.add_argument('--format', '-f', choices=['text', 'json'], default='text',
help='Output format (text or json)')
parser.add_argument('--continuous', '-c', action='store_true',
help='Continuous monitoring')
parser.add_argument('--interval', '-i', type=int, default=60,
help='Monitoring interval in seconds (default: 60)')
args = parser.parse_args()
monitor = BGPMonitor()
if args.continuous:
monitor.monitor_continuously(args.interval)
else:
report = monitor.generate_report(args.format)
print(report)
if __name__ == "__main__":
main()
+100
View File
@@ -0,0 +1,100 @@
#!/bin/bash
# Простой скрипт для исправления конфигурации BIRD
# Ubuntu 24.04
set -e
echo "=========================================="
echo "Простое исправление конфигурации BIRD"
echo "Ubuntu 24.04"
echo "=========================================="
# Получаем IP адрес сервера
SERVER_IP=$(curl -s ifconfig.me 2>/dev/null || echo "192.168.1.1")
echo "[INFO] Используется IP адрес: $SERVER_IP"
# Останавливаем BIRD если запущен
echo "[INFO] Остановка BIRD..."
systemctl stop bird 2>/dev/null || true
# Создаем резервную копию текущей конфигурации
if [ -f /etc/bird/bird.conf ]; then
cp /etc/bird/bird.conf /etc/bird/bird.conf.backup.$(date +%Y%m%d_%H%M%S)
echo "[INFO] Создана резервная копия: /etc/bird/bird.conf.backup"
fi
# Создаем простую рабочую конфигурацию
echo "[INFO] Создание простой конфигурации BIRD..."
cat > /etc/bird/bird.conf << EOF
# Простая конфигурация BIRD для BGP сервера
# Ubuntu 24.04
# Logging
log stderr all;
log "/var/log/bird/bird.log" all;
# Router ID
router id $SERVER_IP;
# Device protocol
protocol device {
scan time 10;
}
# Direct protocol (disabled)
protocol direct {
disabled;
}
# Kernel protocol (disabled)
protocol kernel {
disabled;
}
# Static routes
protocol static {
# Статические маршруты будут загружаться через скрипт
}
# BGP protocol - принимаем любых пиров
protocol bgp any_peer {
local as 65001;
listen bgp port 179;
import none; # Не принимаем маршруты от пиров
export where source = RTS_STATIC; # Экспортируем только статические маршруты
}
EOF
echo "[SUCCESS] Конфигурация создана"
# Создаем директорию для логов если не существует
mkdir -p /var/log/bird
chown bird:bird /var/log/bird 2>/dev/null || true
# Запускаем BIRD
echo "[INFO] Запуск BIRD..."
systemctl start bird
# Проверяем статус
if systemctl is-active --quiet bird; then
echo "[SUCCESS] BIRD успешно запущен"
# Показываем статус
echo "[INFO] Статус BIRD:"
systemctl status bird --no-pager -l
# Показываем информацию о протоколах
echo "[INFO] Информация о протоколах:"
birdc show protocols 2>/dev/null || echo "birdc недоступен"
else
echo "[ERROR] Не удалось запустить BIRD"
echo "[INFO] Логи BIRD:"
journalctl -u bird --no-pager -l -n 20
exit 1
fi
echo "[SUCCESS] Конфигурация BIRD исправлена и сервис запущен"
echo "[INFO] BIRD слушает на порту 179 и принимает соединения от любых пиров"
echo "[INFO] Сервер НЕ будет принимать префиксы от пиров, только экспортировать свои"
-45
View File
@@ -1,45 +0,0 @@
#!/bin/bash
# Bash script to start BGP server on Linux
# BGP Server Startup Script
echo -e "\033[32mStarting BGP Server with FRRouting...\033[0m"
# Check if Docker is running
if ! docker version >/dev/null 2>&1; then
echo -e "\033[31mError: Docker is not running. Please start Docker first.\033[0m"
exit 1
fi
echo -e "\033[32m✓ Docker is running\033[0m"
# Check if docker-compose is available
if ! docker-compose --version >/dev/null 2>&1; then
echo -e "\033[31mError: Docker Compose is not available. Please install Docker Compose.\033[0m"
exit 1
fi
echo -e "\033[32m✓ Docker Compose is available\033[0m"
# Stop any existing containers
echo -e "\033[33mStopping any existing BGP containers...\033[0m"
docker-compose down
# Start the BGP server
echo -e "\033[33mStarting BGP server...\033[0m"
docker-compose up -d
# Wait for container to start
sleep 5
# Check container status
echo -e "\033[36mContainer status:\033[0m"
docker ps --filter "name=bgp-server" --format "table {{.Names}}\t{{.Status}}"
# Show logs
echo -e "\n\033[36mBGP Server logs:\033[0m"
docker-compose logs bgp-server
echo -e "\n\033[32mBGP Server is running!\033[0m"
echo -e "\033[37mBGP port: 179\033[0m"
echo -e "\033[37mvtysh port: 2601\033[0m"
echo -e "\n\033[33mTo connect to vtysh: docker exec -it bgp-server vtysh\033[0m"
echo -e "\033[33mTo view logs: docker-compose logs -f bgp-server\033[0m"
echo -e "\033[33mTo stop server: docker-compose down\033[0m"
-28
View File
@@ -1,28 +0,0 @@
#!/bin/bash
# Bash script to stop BGP server on Linux
# BGP Server Stop Script
echo -e "\033[33mStopping BGP Server...\033[0m"
# Stop the BGP server
echo -e "\033[33mStopping BGP containers...\033[0m"
docker-compose down
# Remove volumes (optional - uncomment if you want to clean up completely)
# echo -e "\033[33mRemoving volumes...\033[0m"
# docker-compose down -v
# Check if containers are stopped
running_containers=$(docker ps --filter "name=bgp-server" --format "{{.Names}}")
if [ -n "$running_containers" ]; then
echo -e "\033[31mWarning: Some BGP containers are still running:\033[0m"
echo -e "\033[31m$running_containers\033[0m"
else
echo -e "\033[32mBGP Server stopped successfully!\033[0m"
fi
# Show stopped containers
echo -e "\n\033[36mContainer status:\033[0m"
docker ps -a --filter "name=bgp-server" --format "table {{.Names}}\t{{.Status}}"
echo -e "\n\033[33mTo start the server again, run: ./start-bgp-server.sh\033[0m"
-39
View File
@@ -1,39 +0,0 @@
#!/bin/bash
# Bash script to update BGP prefixes on Linux
# BGP Prefixes Update Script
PREFIXES_FILE=${1:-"prefixes.txt"}
echo -e "\033[36mUpdating BGP Prefixes...\033[0m"
# Check if container is running
container_status=$(docker ps --filter "name=bgp-server" --format "{{.Names}}")
if [ -z "$container_status" ]; then
echo -e "\033[31mError: BGP container is not running. Please start it first.\033[0m"
echo -e "\033[33mRun: ./start-bgp-server.sh\033[0m"
exit 1
fi
# Check if prefixes file exists
if [ ! -f "$PREFIXES_FILE" ]; then
echo -e "\033[31mError: Prefixes file '$PREFIXES_FILE' not found.\033[0m"
exit 1
fi
# Copy new prefixes file to container
echo -e "\033[33mCopying new prefixes file to container...\033[0m"
docker cp "$PREFIXES_FILE" bgp-server:/etc/frr/prefixes.txt
# Reload BGP configuration
echo -e "\033[33mReloading BGP configuration...\033[0m"
docker exec bgp-server vtysh -c "configure terminal" -c "router bgp 65000" -c "clear ip bgp *" -c "end"
# Wait a moment for BGP to stabilize
sleep 3
# Show updated BGP table
echo -e "\n\033[32mUpdated BGP table:\033[0m"
docker exec bgp-server vtysh -c "show ip bgp"
echo -e "\n\033[32mPrefixes updated successfully!\033[0m"
echo -e "\033[33mTo view current prefixes: docker exec -it bgp-server vtysh -c 'show ip bgp'\033[0m"