This commit is contained in:
2025-07-11 19:24:43 +07:00
parent 9d07df53d0
commit 825255c64a
10 changed files with 1813 additions and 50 deletions
+293
View File
@@ -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 сервера. 🚀
+279
View File
@@ -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
View File
@@ -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
View File
@@ -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 {
+97
View File
@@ -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;
}
+42
View File
@@ -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; # Экспортируем все маршруты пирам
}
+401
View File
@@ -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
View File
@@ -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
View File
@@ -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:"
+198
View File
@@ -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 "$@"