533 lines
16 KiB
Markdown
533 lines
16 KiB
Markdown
# Инструкция по запуску BGP Server из Docker Registry
|
||
|
||
## Быстрый старт
|
||
|
||
### 1. Создание файлов с префиксами
|
||
|
||
Создайте папку `data` и файл с префиксами:
|
||
|
||
```powershell
|
||
# Создание папки для данных
|
||
mkdir data
|
||
|
||
# Создание файла с префиксами
|
||
@"
|
||
# Основные префиксы
|
||
192.168.1.0/24
|
||
192.168.2.0/24
|
||
10.0.0.0/8
|
||
172.16.0.0/12
|
||
|
||
# Дополнительные префиксы
|
||
203.0.113.0/24
|
||
198.51.100.0/24
|
||
"@ | Out-File -FilePath "data/prefixes.txt" -Encoding UTF8
|
||
|
||
# Проверка создания файла
|
||
Get-Content data/prefixes.txt
|
||
```
|
||
|
||
### 2. Запуск контейнера из registry
|
||
|
||
```powershell
|
||
# Запуск BGP сервера из registry с переменными окружения
|
||
docker run -d `
|
||
--name bgp-server `
|
||
--restart unless-stopped `
|
||
-p 179:179 `
|
||
-v ${PWD}/data:/app/data:ro `
|
||
-v ${PWD}/logs:/app/logs `
|
||
-e BGP_LOCAL_AS=65000 `
|
||
-e BGP_ROUTER_ID=192.168.1.100 `
|
||
-e BGP_NEIGHBOR_IP=192.168.1.1 `
|
||
-e BGP_NEIGHBOR_AS=65001 `
|
||
-e BGP_HOLD_TIME=90 `
|
||
-e BGP_KEEPALIVE=30 `
|
||
git.shts.su/infra/bgp-server:latest
|
||
|
||
# Простой запуск с настройками по умолчанию
|
||
docker run -d `
|
||
--name bgp-server `
|
||
--restart unless-stopped `
|
||
-p 179:179 `
|
||
-v ${PWD}/data:/app/data:ro `
|
||
-v ${PWD}/logs:/app/logs `
|
||
git.shts.su/infra/bgp-server:latest
|
||
|
||
# Пример с кастомными настройками
|
||
docker run -d `
|
||
--name bgp-server-custom `
|
||
--restart unless-stopped `
|
||
-p 179:179 `
|
||
-v ${PWD}/data:/app/data:ro `
|
||
-v ${PWD}/logs:/app/logs `
|
||
-e BGP_LOCAL_AS=65000 `
|
||
-e BGP_ROUTER_ID=10.0.0.100 `
|
||
-e BGP_NEIGHBOR_IP=10.0.0.1 `
|
||
-e BGP_NEIGHBOR_AS=65001 `
|
||
-e BGP_HOLD_TIME=180 `
|
||
-e BGP_LOG_LEVEL=DEBUG `
|
||
-e BGP_MD5_PASSWORD="your-secure-password" `
|
||
git.shts.su/infra/bgp-server:latest
|
||
```
|
||
|
||
### 3. Проверка работы
|
||
|
||
```powershell
|
||
# Просмотр логов
|
||
docker logs -f bgp-server
|
||
|
||
# Проверка статуса контейнера
|
||
docker ps
|
||
|
||
# Проверка BGP сессии
|
||
docker exec bgp-server exabgpcli show neighbor
|
||
```
|
||
|
||
## Подробная настройка
|
||
|
||
### Структура файлов
|
||
|
||
```
|
||
your-project/
|
||
├── data/
|
||
│ ├── prefixes.txt # Основные префиксы
|
||
│ └── additional_prefixes.txt # Дополнительные префиксы
|
||
├── logs/ # Логи (создается автоматически)
|
||
└── DOCKER_RUN.md # Эта инструкция
|
||
```
|
||
|
||
### Формат файла с префиксами
|
||
|
||
**data/prefixes.txt:**
|
||
```
|
||
# Основные префиксы
|
||
192.168.1.0/24
|
||
192.168.2.0/24
|
||
10.0.0.0/8
|
||
172.16.0.0/12
|
||
|
||
# Комментарии начинаются с #
|
||
# Пустые строки игнорируются
|
||
|
||
# Можно добавлять дополнительные префиксы
|
||
203.0.113.0/24
|
||
198.51.100.0/24
|
||
```
|
||
|
||
**data/additional_prefixes.txt:**
|
||
```
|
||
# Дополнительные префиксы
|
||
172.20.0.0/16
|
||
172.21.0.0/16
|
||
```
|
||
|
||
### Полная команда запуска с настройками
|
||
|
||
```powershell
|
||
docker run -d `
|
||
--name bgp-server `
|
||
--restart unless-stopped `
|
||
-p 179:179 `
|
||
-v ${PWD}/data:/app/data:ro `
|
||
-v ${PWD}/logs:/app/logs `
|
||
-e BGP_LOCAL_AS=65000 `
|
||
-e BGP_ROUTER_ID=192.168.1.100 `
|
||
-e BGP_NEIGHBOR_IP=192.168.1.1 `
|
||
-e BGP_NEIGHBOR_AS=65001 `
|
||
-e BGP_HOLD_TIME=90 `
|
||
-e BGP_KEEPALIVE=30 `
|
||
git.shts.su/infra/bgp-server:latest
|
||
```
|
||
|
||
### Переменные окружения
|
||
|
||
| Переменная | Описание | По умолчанию |
|
||
|------------|----------|--------------|
|
||
| `BGP_LOCAL_AS` | AS номер сервера | 65000 |
|
||
| `BGP_ROUTER_ID` | Router ID сервера | 192.168.1.100 |
|
||
| `BGP_NEIGHBOR_IP` | IP адрес BGP пира | 192.168.1.1 |
|
||
| `BGP_NEIGHBOR_AS` | AS номер пира | 65001 |
|
||
| `BGP_HOLD_TIME` | Hold time в секундах | 90 |
|
||
| `BGP_KEEPALIVE` | Keepalive в секундах | 30 |
|
||
| `BGP_MD5_PASSWORD` | MD5 пароль для аутентификации | (не используется) |
|
||
| `BGP_LOG_LEVEL` | Уровень логирования (DEBUG, INFO, WARNING, ERROR) | INFO |
|
||
|
||
### Просмотр сгенерированной конфигурации
|
||
|
||
```powershell
|
||
# Просмотр текущей конфигурации ExaBGP
|
||
docker exec bgp-server cat /app/exabgp.conf
|
||
|
||
# Просмотр переменных окружения
|
||
docker exec bgp-server env | findstr BGP_
|
||
```
|
||
|
||
## Управление контейнером
|
||
|
||
### Основные команды
|
||
|
||
```powershell
|
||
# Запуск контейнера
|
||
docker start bgp-server
|
||
|
||
# Остановка контейнера
|
||
docker stop bgp-server
|
||
|
||
# Перезапуск контейнера
|
||
docker restart bgp-server
|
||
|
||
# Удаление контейнера
|
||
docker rm -f bgp-server
|
||
|
||
# Просмотр логов
|
||
docker logs bgp-server
|
||
|
||
# Логи в реальном времени
|
||
docker logs -f bgp-server
|
||
```
|
||
|
||
### Обновление контейнера
|
||
|
||
```powershell
|
||
# Безопасное обновление (рекомендуется)
|
||
docker stop bgp-server
|
||
docker rm bgp-server
|
||
docker pull git.shts.su/infra/bgp-server:latest
|
||
docker run -d `
|
||
--name bgp-server `
|
||
--restart unless-stopped `
|
||
-p 179:179 `
|
||
-v ${PWD}/data:/app/data:ro `
|
||
-v ${PWD}/logs:/app/logs `
|
||
git.shts.su/infra/bgp-server:latest
|
||
|
||
# Быстрое обновление (если настройки не изменились)
|
||
docker pull git.shts.su/infra/bgp-server:latest
|
||
docker restart bgp-server
|
||
|
||
# Использование скрипта обновления
|
||
.\scripts\update-container.ps1
|
||
|
||
# Принудительное обновление без подтверждения
|
||
.\scripts\update-container.ps1 -Force
|
||
```
|
||
|
||
### Обновление префиксов
|
||
|
||
```powershell
|
||
# 1. Отредактируйте файл prefixes.txt
|
||
notepad data/prefixes.txt
|
||
|
||
# 2. Перезапустите контейнер
|
||
docker restart bgp-server
|
||
|
||
# 3. Проверьте логи
|
||
docker logs bgp-server
|
||
```
|
||
|
||
### Проверка работы
|
||
|
||
```powershell
|
||
# Статус контейнера
|
||
docker ps
|
||
|
||
# Проверка BGP сессии
|
||
docker exec bgp-server exabgpcli show neighbor
|
||
|
||
# Проверка загруженных префиксов
|
||
docker exec bgp-server cat /app/logs/prefixes.log
|
||
|
||
# Проверка содержимого файлов
|
||
docker exec bgp-server cat /app/data/prefixes.txt
|
||
|
||
# Использование ресурсов
|
||
docker stats bgp-server
|
||
```
|
||
|
||
## Настройка RouterOS (клиент)
|
||
|
||
### Определение версии RouterOS
|
||
|
||
Сначала определите, какой синтаксис поддерживает ваша версия RouterOS:
|
||
|
||
```routeros
|
||
# Проверка версии RouterOS
|
||
/system resource print
|
||
|
||
# Проверка доступных команд BGP
|
||
/routing/bgp/print
|
||
/routing bgp print
|
||
```
|
||
|
||
**Если команда `/routing/bgp/print` работает** - используйте новый синтаксис (RouterOS 7.14+)
|
||
**Если команда `/routing bgp print` работает** - используйте старый синтаксис
|
||
|
||
### Адаптация конфигурации под ваши настройки
|
||
|
||
Замените следующие параметры в командах на ваши значения:
|
||
|
||
| Параметр | Описание | Ваше значение |
|
||
|----------|----------|---------------|
|
||
| `as=65001` | Ваш AS номер | Ваш AS номер |
|
||
| `router-id=192.168.0.254` | Ваш Router ID | IP адрес вашего роутера |
|
||
| `local.address=192.168.0.254` | Ваш локальный IP | IP адрес вашего роутера |
|
||
| `remote.address=192.168.100.99` | IP BGP сервера | IP адрес Docker контейнера |
|
||
| `remote.as=65000` | AS BGP сервера | AS номер BGP сервера (по умолчанию 65000) |
|
||
|
||
### Команды для RouterOS 7.14+
|
||
|
||
**Используйте рабочую конфигурацию с template и connection (см. ниже)**
|
||
|
||
### Настройка RouterOS 7.14 (рабочая конфигурация)
|
||
|
||
**Использование template и connection:**
|
||
|
||
```routeros
|
||
# Создать шаблон BGP с вашим AS и router-id
|
||
/routing bgp template
|
||
add as=65001 disabled=no name=bgp-server output.network=bgp-networks .no-client-to-client-reflection=yes router-id=192.168.0.254 routing-table=main
|
||
|
||
# Фильтр на запрет экспорта маршрутов (подстраховка)
|
||
/routing filter rule
|
||
add chain=discard disabled=no rule="reject;"
|
||
|
||
# Фильтр на импорт маршрутов с изменением next-hop
|
||
/routing filter rule
|
||
add chain=bgp-server-in disabled=no rule="set gw 192.168.100.99; accept;"
|
||
|
||
# Настройка BGP пира
|
||
/routing bgp connection
|
||
add connect=yes disabled=no input.filter=bgp-server-in listen=yes local.address=192.168.0.254 .role=ebgp multihop=yes name=bgp-server.network output.filter-chain=discard remote.address=192.168.100.99/32 .as=65000 .port=179 routing-table=main templates=bgp-server
|
||
|
||
# Проверка статуса
|
||
/routing bgp connection print
|
||
/routing bgp route print
|
||
```
|
||
|
||
### Объяснение параметров конфигурации
|
||
|
||
**BGP Template:**
|
||
- `as=65001` - ваш AS номер
|
||
- `router-id=192.168.0.254` - ваш Router ID (IP адрес роутера)
|
||
- `output.network=bgp-networks` - сеть для экспорта (создается автоматически)
|
||
- `.no-client-to-client-reflection=yes` - отключение отражения между клиентами
|
||
|
||
**Routing Filter Rules:**
|
||
- `chain=discard` - цепочка для отклонения экспортируемых маршрутов
|
||
- `chain=bgp-server-in` - цепочка для обработки входящих маршрутов
|
||
- `set gw 192.168.100.99` - установка next-hop на IP BGP сервера
|
||
|
||
**BGP Connection:**
|
||
- `connect=yes` - активное подключение
|
||
- `listen=yes` - ожидание входящих подключений
|
||
- `local.address=192.168.0.254` - ваш локальный IP
|
||
- `remote.address=192.168.100.99/32` - IP BGP сервера
|
||
- `remote.as=65000` - AS номер BGP сервера
|
||
- `templates=bgp-server` - использование созданного шаблона
|
||
|
||
### Команды для удаления конфигурации
|
||
|
||
Если нужно удалить конфигурацию и начать заново:
|
||
|
||
```routeros
|
||
# Удаление BGP connection
|
||
/routing bgp connection remove bgp-server.network
|
||
|
||
# Удаление фильтров
|
||
/routing filter rule remove [find chain=bgp-server-in]
|
||
/routing filter rule remove [find chain=discard]
|
||
|
||
# Удаление BGP template
|
||
/routing bgp template remove bgp-server
|
||
|
||
# Проверка удаления
|
||
/routing bgp connection print
|
||
/routing filter rule print
|
||
/routing bgp template print
|
||
```
|
||
|
||
## Устранение неполадок
|
||
|
||
### Проблема: Контейнер не запускается
|
||
|
||
```powershell
|
||
# Проверьте логи
|
||
docker logs bgp-server
|
||
|
||
# Проверьте, не занят ли порт 179
|
||
netstat -an | findstr :179
|
||
|
||
# Проверьте права доступа к папкам
|
||
ls -la data/
|
||
ls -la logs/
|
||
```
|
||
|
||
### Проблема: BGP сессия не устанавливается
|
||
|
||
```powershell
|
||
# Проверьте сетевое подключение
|
||
docker exec bgp-server ping 192.168.1.1
|
||
|
||
# Проверьте конфигурацию
|
||
docker exec bgp-server cat /app/exabgp.conf
|
||
|
||
# Проверьте логи BGP
|
||
docker logs bgp-server | findstr "BGP"
|
||
```
|
||
|
||
### Проблема: Префиксы не анонсируются
|
||
|
||
```powershell
|
||
# Проверьте файлы с префиксами
|
||
docker exec bgp-server cat /app/data/prefixes.txt
|
||
|
||
# Проверьте логи процесса загрузки
|
||
docker exec bgp-server cat /app/logs/prefixes.log
|
||
|
||
# Проверьте статус процесса
|
||
docker exec bgp-server ps aux | findstr load_prefixes
|
||
```
|
||
|
||
### Проблема: Ошибки ExaBGP конфигурации
|
||
|
||
```powershell
|
||
# Проверьте конфигурацию ExaBGP
|
||
docker exec bgp-server cat /app/exabgp.conf
|
||
|
||
# Валидация конфигурации
|
||
docker exec bgp-server exabgp --validate /app/exabgp.conf
|
||
|
||
# Проверьте named pipes
|
||
docker exec bgp-server ls -la /run/exabgp/
|
||
docker exec bgp-server ls -la /var/run/exabgp/
|
||
|
||
# Проверьте логи ExaBGP
|
||
docker exec bgp-server cat /app/logs/exabgp.log
|
||
|
||
# Проверьте переменные окружения
|
||
docker exec bgp-server env | findstr BGP_
|
||
```
|
||
|
||
### Проблема: Файл prefixes.txt не найден
|
||
|
||
```powershell
|
||
# Проверьте монтирование volume
|
||
docker exec bgp-server ls -la /app/data/
|
||
|
||
# Создайте файл вручную
|
||
docker exec bgp-server bash -c "echo '192.168.1.0/24' > /app/data/prefixes.txt"
|
||
|
||
# Перезапустите контейнер
|
||
docker restart bgp-server
|
||
```
|
||
|
||
### Проблема: BGP сессия не устанавливается в RouterOS
|
||
|
||
```routeros
|
||
# Проверьте доступные команды BGP
|
||
/routing/bgp/print
|
||
|
||
# Проверьте экземпляры BGP
|
||
/routing/bgp/instance/print
|
||
|
||
# Проверьте пиры
|
||
/routing/bgp/peer/print
|
||
|
||
# Проверьте маршруты
|
||
/routing/bgp/route/print
|
||
|
||
# Проверьте логи BGP
|
||
/log print where topics~"bgp"
|
||
```
|
||
|
||
### Проблема: Неправильный синтаксис команд RouterOS
|
||
|
||
Если команды `/routing/bgp/` не работают, попробуйте старый синтаксис:
|
||
|
||
```routeros
|
||
# Старый синтаксис RouterOS
|
||
/routing bgp instance add name=bgp-server as=65001 router-id=192.168.1.1
|
||
/routing bgp peer add name=bgp-server remote-address=192.168.1.100 remote-as=65000 instance=bgp-server
|
||
/routing bgp instance set bgp-server disabled=no
|
||
```
|
||
|
||
### Диагностика версии RouterOS
|
||
|
||
```routeros
|
||
# Проверка версии RouterOS
|
||
/system resource print
|
||
|
||
# Проверка доступных команд BGP
|
||
/routing/bgp/print
|
||
/routing bgp print
|
||
|
||
# Проверка доступных подкоманд
|
||
/routing/bgp/instance/print
|
||
/routing bgp instance print
|
||
|
||
# Если команды не найдены, используйте старый синтаксис
|
||
```
|
||
|
||
## Примеры использования
|
||
|
||
### Пример 1: Простой запуск
|
||
|
||
```powershell
|
||
# Создание файла с префиксами
|
||
"192.168.1.0/24`n10.0.0.0/8" | Out-File -FilePath "data/prefixes.txt" -Encoding UTF8
|
||
|
||
# Запуск контейнера
|
||
docker run -d --name bgp-server -p 179:179 -v ${PWD}/data:/app/data:ro git.shts.su/infra/bgp-server:latest
|
||
```
|
||
|
||
### Пример 2: Запуск с кастомными настройками
|
||
|
||
```powershell
|
||
docker run -d `
|
||
--name bgp-server `
|
||
-p 179:179 `
|
||
-v ${PWD}/data:/app/data:ro `
|
||
-v ${PWD}/logs:/app/logs `
|
||
-e BGP_LOCAL_AS=65000 `
|
||
-e BGP_ROUTER_ID=10.0.0.100 `
|
||
-e BGP_NEIGHBOR_IP=10.0.0.1 `
|
||
-e BGP_NEIGHBOR_AS=65001 `
|
||
git.shts.su/infra/bgp-server:latest
|
||
```
|
||
|
||
### Пример 3: Запуск с несколькими файлами префиксов
|
||
|
||
```powershell
|
||
# Создание нескольких файлов
|
||
"192.168.1.0/24`n192.168.2.0/24" | Out-File -FilePath "data/prefixes.txt" -Encoding UTF8
|
||
"10.0.0.0/8`n172.16.0.0/12" | Out-File -FilePath "data/additional_prefixes.txt" -Encoding UTF8
|
||
|
||
# Запуск контейнера
|
||
docker run -d --name bgp-server -p 179:179 -v ${PWD}/data:/app/data:ro git.shts.su/infra/bgp-server:latest
|
||
```
|
||
|
||
## Безопасность
|
||
|
||
### Рекомендации
|
||
|
||
1. **Ограничение доступа**: Настройте firewall для ограничения доступа к порту 179
|
||
2. **Аутентификация**: Используйте MD5 аутентификацию в BGP
|
||
3. **Логирование**: Включите детальное логирование для аудита
|
||
4. **Обновления**: Регулярно обновляйте Docker образы
|
||
|
||
### Настройка MD5 аутентификации
|
||
|
||
Добавьте переменную окружения:
|
||
```powershell
|
||
-e BGP_MD5_PASSWORD="your-secure-password"
|
||
```
|
||
|
||
В RouterOS:
|
||
```routeros
|
||
# Для RouterOS 7.14+ (новый синтаксис)
|
||
/routing/bgp/peer set bgp-server password="your-secure-password"
|
||
|
||
# Для старых версий RouterOS
|
||
/routing bgp peer set bgp-server password="your-secure-password"
|
||
``` |