update
This commit is contained in:
@@ -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 сервера. 🚀
|
||||
@@ -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/
|
||||
+14
-16
@@ -21,12 +21,25 @@ 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;
|
||||
listen bgp;
|
||||
|
||||
# Настройки для всех пиров
|
||||
hold time 90;
|
||||
@@ -34,7 +47,6 @@ protocol bgp {
|
||||
startup hold time 240;
|
||||
|
||||
# Принимаем соединения от любых IP
|
||||
listen bgp;
|
||||
listen bgp port 179;
|
||||
|
||||
# Настройки для пиров
|
||||
@@ -70,20 +82,6 @@ protocol bgp {
|
||||
};
|
||||
}
|
||||
|
||||
# Статическая таблица маршрутов
|
||||
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 маршрутов
|
||||
table bgp_table;
|
||||
|
||||
# Фильтры для community
|
||||
filter community_filter {
|
||||
if bgp_community.matches(65001:*) then {
|
||||
|
||||
+14
-16
@@ -21,11 +21,24 @@ 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;
|
||||
listen bgp;
|
||||
|
||||
# Настройки для всех пиров
|
||||
hold time 90;
|
||||
@@ -33,7 +46,6 @@ protocol bgp {
|
||||
startup hold time 240;
|
||||
|
||||
# Принимаем соединения от любых IPv6 адресов
|
||||
listen bgp;
|
||||
listen bgp port 179;
|
||||
|
||||
# Настройки для пиров
|
||||
@@ -69,20 +81,6 @@ protocol bgp {
|
||||
};
|
||||
}
|
||||
|
||||
# Статическая таблица маршрутов 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
|
||||
table bgp_table;
|
||||
|
||||
# Фильтры для community
|
||||
filter community_filter {
|
||||
if bgp_community.matches(65001:*) then {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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; # Экспортируем все маршруты пирам
|
||||
}
|
||||
@@ -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 "$@"
|
||||
+224
@@ -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 "$@"
|
||||
+251
-18
@@ -37,6 +37,24 @@ check_root() {
|
||||
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
|
||||
@@ -110,9 +128,153 @@ copy_config_files() {
|
||||
cp /etc/bird/bird6.conf /etc/bird/bird6.conf.backup.$(date +%Y%m%d_%H%M%S)
|
||||
fi
|
||||
|
||||
# Копирование новых конфигураций
|
||||
cp config/bird.conf /etc/bird/bird.conf
|
||||
cp config/bird6.conf /etc/bird/bird6.conf
|
||||
# Получение 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/
|
||||
@@ -124,7 +286,11 @@ copy_config_files() {
|
||||
# Установка прав на выполнение для скриптов
|
||||
chmod +x /opt/bgp-server/scripts/*.py
|
||||
|
||||
print_success "Файлы конфигурации скопированы"
|
||||
# Установка правильных прав доступа к конфигурации
|
||||
chown bird:bird /etc/bird/bird*.conf
|
||||
chmod 644 /etc/bird/bird*.conf
|
||||
|
||||
print_success "Файлы конфигурации созданы и скопированы"
|
||||
}
|
||||
|
||||
# Настройка firewall
|
||||
@@ -152,15 +318,21 @@ configure_firewall() {
|
||||
configure_services() {
|
||||
print_info "Настройка systemd сервисов..."
|
||||
|
||||
# Включение автозапуска
|
||||
# Включение автозапуска для bird (IPv4)
|
||||
systemctl enable bird
|
||||
systemctl enable bird6
|
||||
|
||||
# Проверка существования 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
|
||||
systemctl start bird6
|
||||
|
||||
# Проверка статуса
|
||||
# Проверка статуса bird
|
||||
if systemctl is-active --quiet bird; then
|
||||
print_success "BIRD (IPv4) запущен"
|
||||
else
|
||||
@@ -168,11 +340,18 @@ configure_services() {
|
||||
systemctl status bird
|
||||
fi
|
||||
|
||||
if systemctl is-active --quiet bird6; then
|
||||
print_success "BIRD (IPv6) запущен"
|
||||
# Запуск 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_error "Ошибка запуска BIRD (IPv6)"
|
||||
systemctl status bird6
|
||||
print_warning "BIRD6 не запущен (сервис не найден)"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -185,18 +364,57 @@ check_configuration() {
|
||||
print_success "Конфигурация BIRD (IPv4) корректна"
|
||||
else
|
||||
print_error "Ошибка в конфигурации BIRD (IPv4)"
|
||||
exit 1
|
||||
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 bird6 -p /etc/bird/bird6.conf; then
|
||||
print_success "Конфигурация BIRD (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_error "Ошибка в конфигурации BIRD (IPv6)"
|
||||
exit 1
|
||||
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 таймера для загрузки префиксов..."
|
||||
@@ -270,7 +488,13 @@ final_check() {
|
||||
print_info "Статус сервисов:"
|
||||
systemctl status bird --no-pager -l
|
||||
echo ""
|
||||
systemctl status bird6 --no-pager -l
|
||||
|
||||
# Проверка 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
|
||||
@@ -279,6 +503,15 @@ final_check() {
|
||||
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:"
|
||||
|
||||
@@ -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 "$@"
|
||||
Reference in New Issue
Block a user