Files

533 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Инструкция по запуску 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"
```