update
This commit is contained in:
@@ -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
|
||||
```
|
||||
Reference in New Issue
Block a user