This commit is contained in:
2025-07-11 19:06:56 +07:00
parent 8f53e99188
commit 9d07df53d0
23 changed files with 1947 additions and 934 deletions
+117 -179
View File
@@ -1,217 +1,155 @@
# BGP Server с FRRouting
# BGP Server Setup
Этот проект предоставляет готовое решение для запуска BGP сервера с использованием контейнера FRRouting, который анонсирует префиксы всем подключенным клиентам с разделением по community.
## Обзор
BGP сервер на Ubuntu 24.04 с возможностью подключения любых пиров и загрузки префиксов из файла с community.
## Требования
- Docker Engine
- Docker Compose
- Bash shell
## Архитектура
- **BGP Server**: BIRD (Bird Internet Routing Daemon)
- **OS**: Ubuntu 24.04
- **Функции**:
- Прием BGP соединений от любых пиров
- Загрузка префиксов из файла prefixes.txt
- Настройка community для каждого префикса
- Сервер НЕ получает префиксы, только раздает их клиентам
## Структура проекта
```
bgp-server/
├── docker-compose.yml # Конфигурация Docker контейнера
├── frr.conf # Конфигурация FRRouting
├── prefixes.txt # Файл с префиксами и community
├── start-bgp-server.sh # Скрипт запуска для Linux
├── stop-bgp-server.sh # Скрипт остановки для Linux
├── check-bgp-status.sh # Скрипт проверки статуса для Linux
├── update-prefixes.sh # Скрипт обновления префиксов для Linux
├── install-dependencies.sh # Скрипт установки зависимостей
── README.md # Эта инструкция
├── README.md
├── install.sh # Скрипт установки
├── config/
│ ├── bird.conf # Основная конфигурация BIRD
│ └── bird6.conf # Конфигурация для IPv6 (опционально)
├── scripts/
│ ├── load_prefixes.py # Скрипт загрузки префиксов
│ └── monitor.py # Мониторинг BGP сессий
── 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
# Остановить существующие контейнеры
docker-compose down
sudo apt update && sudo apt upgrade -y
```
# Запустить BGP сервер
docker-compose up -d
### 2. Установка BIRD
```bash
sudo apt install bird2 -y
```
# Проверить статус
docker ps
### 3. Настройка конфигурации
```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
docker exec -it bgp-server vtysh
```
# Загрузка префиксов из файла
python3 /opt/bgp-server/scripts/load_prefixes.py
### Полезные команды vtysh
```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;
}
}
}
}
# Мониторинг BGP сессий
python3 /opt/bgp-server/scripts/monitor.py
```
## Мониторинг
### Проверка статуса контейнера
### Проверка статуса BIRD
```bash
docker ps --filter "name=bgp-server"
sudo birdc show protocols
sudo birdc show routes
sudo birdc show route table all
```
### Проверка сетевых портов
### Просмотр логов
```bash
netstat -tuln | grep :179
netstat -tuln | grep :2601
sudo journalctl -u bird -f
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. Измените пароли по умолчанию
2. Настройте firewall правила
3. Используйте более строгие настройки безопасности
4. Ограничьте доступ к vtysh
# Разрешить SSH
sudo ufw allow ssh
## Поддержка
# Включить firewall
sudo ufw enable
```
При возникновении проблем:
### Ограничение доступа
- Настройте ACL в конфигурации BIRD
- Используйте MD5 аутентификацию для BGP сессий
- Ограничьте доступ к birdc только с localhost
1. Проверьте логи контейнера
2. Убедитесь в правильности конфигурации
3. Проверьте сетевые настройки
4. Обратитесь к документации FRRouting: https://frrouting.org/
## Troubleshooting
### Частые проблемы
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
```