Files
bgp-server/install.sh
T
2025-07-11 19:06:56 +07:00

338 lines
9.9 KiB
Bash
Raw 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.
#!/bin/bash
# BGP Server Installation Script for Ubuntu 24.04
# Устанавливает BIRD и настраивает BGP сервер
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
}
# Проверка версии Ubuntu
check_ubuntu_version() {
if [[ ! -f /etc/os-release ]]; then
print_error "Не удалось определить версию ОС"
exit 1
fi
source /etc/os-release
if [[ "$ID" != "ubuntu" ]]; then
print_error "Этот скрипт предназначен только для Ubuntu"
exit 1
fi
if [[ "$VERSION_ID" != "24.04" ]]; then
print_warning "Скрипт тестировался на Ubuntu 24.04. Текущая версия: $VERSION_ID"
fi
print_success "Обнаружена Ubuntu $VERSION_ID"
}
# Обновление системы
update_system() {
print_info "Обновление системы..."
apt update
apt upgrade -y
print_success "Система обновлена"
}
# Установка BIRD
install_bird() {
print_info "Установка BIRD..."
# Установка BIRD2
apt install -y bird2
# Проверка установки
if command -v bird &> /dev/null; then
print_success "BIRD установлен успешно"
else
print_error "Ошибка установки BIRD"
exit 1
fi
}
# Создание директорий
create_directories() {
print_info "Создание директорий..."
mkdir -p /var/log/bird
mkdir -p /opt/bgp-server/data
mkdir -p /opt/bgp-server/scripts
mkdir -p /opt/bgp-server/logs
# Установка прав доступа
chown -R bird:bird /var/log/bird
chmod 755 /opt/bgp-server/scripts
print_success "Директории созданы"
}
# Копирование файлов конфигурации
copy_config_files() {
print_info "Копирование файлов конфигурации..."
# Резервная копия оригинальных конфигураций
if [[ -f /etc/bird/bird.conf ]]; then
cp /etc/bird/bird.conf /etc/bird/bird.conf.backup.$(date +%Y%m%d_%H%M%S)
fi
if [[ -f /etc/bird/bird6.conf ]]; then
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
# Копирование скриптов
cp scripts/load_prefixes.py /opt/bgp-server/scripts/
cp scripts/monitor.py /opt/bgp-server/scripts/
# Копирование файла с префиксами
cp data/prefixes.txt /opt/bgp-server/data/
# Установка прав на выполнение для скриптов
chmod +x /opt/bgp-server/scripts/*.py
print_success "Файлы конфигурации скопированы"
}
# Настройка firewall
configure_firewall() {
print_info "Настройка firewall..."
# Установка ufw если не установлен
if ! command -v ufw &> /dev/null; then
apt install -y ufw
fi
# Разрешение BGP порта
ufw allow 179/tcp comment "BGP"
# Разрешение SSH
ufw allow ssh comment "SSH"
# Включение firewall
ufw --force enable
print_success "Firewall настроен"
}
# Настройка systemd сервисов
configure_services() {
print_info "Настройка systemd сервисов..."
# Включение автозапуска
systemctl enable bird
systemctl enable bird6
# Запуск сервисов
systemctl start bird
systemctl start bird6
# Проверка статуса
if systemctl is-active --quiet bird; then
print_success "BIRD (IPv4) запущен"
else
print_error "Ошибка запуска BIRD (IPv4)"
systemctl status bird
fi
if systemctl is-active --quiet bird6; then
print_success "BIRD (IPv6) запущен"
else
print_error "Ошибка запуска BIRD (IPv6)"
systemctl status bird6
fi
}
# Проверка конфигурации
check_configuration() {
print_info "Проверка конфигурации BIRD..."
# Проверка синтаксиса IPv4 конфигурации
if bird -p /etc/bird/bird.conf; then
print_success "Конфигурация BIRD (IPv4) корректна"
else
print_error "Ошибка в конфигурации BIRD (IPv4)"
exit 1
fi
# Проверка синтаксиса IPv6 конфигурации
if bird6 -p /etc/bird/bird6.conf; then
print_success "Конфигурация BIRD (IPv6) корректна"
else
print_error "Ошибка в конфигурации BIRD (IPv6)"
exit 1
fi
}
# Создание systemd таймера для автоматической загрузки префиксов
create_systemd_timer() {
print_info "Создание systemd таймера для загрузки префиксов..."
# Создание сервиса
cat > /etc/systemd/system/bgp-prefix-loader.service << EOF
[Unit]
Description=BGP Prefix Loader
After=bird.service bird6.service
[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /opt/bgp-server/scripts/load_prefixes.py
User=root
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
# Создание таймера
cat > /etc/systemd/system/bgp-prefix-loader.timer << EOF
[Unit]
Description=Run BGP Prefix Loader every 5 minutes
Requires=bgp-prefix-loader.service
[Timer]
OnBootSec=1min
OnUnitActiveSec=5min
Unit=bgp-prefix-loader.service
[Install]
WantedBy=timers.target
EOF
# Перезагрузка systemd и включение таймера
systemctl daemon-reload
systemctl enable bgp-prefix-loader.timer
systemctl start bgp-prefix-loader.timer
print_success "Systemd таймер создан"
}
# Создание alias для удобства
create_aliases() {
print_info "Создание alias команд..."
# Добавление в .bashrc root пользователя
cat >> /root/.bashrc << EOF
# BGP Server Aliases
alias bgp-status='python3 /opt/bgp-server/scripts/monitor.py'
alias bgp-load='python3 /opt/bgp-server/scripts/load_prefixes.py'
alias bgp-monitor='python3 /opt/bgp-server/scripts/monitor.py -c'
alias bird-status='systemctl status bird bird6'
alias bird-restart='systemctl restart bird bird6'
alias bird-logs='journalctl -u bird -f'
alias bird6-logs='journalctl -u bird6 -f'
EOF
print_success "Alias команды добавлены"
}
# Финальная проверка
final_check() {
print_info "Выполнение финальной проверки..."
# Проверка статуса сервисов
echo ""
print_info "Статус сервисов:"
systemctl status bird --no-pager -l
echo ""
systemctl status bird6 --no-pager -l
# Проверка прослушивания порта
if netstat -tlnp | grep :179; then
print_success "BGP порт 179 прослушивается"
else
print_warning "BGP порт 179 не прослушивается"
fi
# Проверка firewall
echo ""
print_info "Статус firewall:"
ufw status
print_success "Установка завершена успешно!"
}
# Основная функция
main() {
echo "=========================================="
echo "BGP Server Installation Script"
echo "Ubuntu 24.04"
echo "=========================================="
check_root
check_ubuntu_version
update_system
install_bird
create_directories
copy_config_files
configure_firewall
configure_services
check_configuration
create_systemd_timer
create_aliases
final_check
echo ""
echo "=========================================="
echo "УСТАНОВКА ЗАВЕРШЕНА"
echo "=========================================="
echo ""
echo "Полезные команды:"
echo " bgp-status - Показать статус BGP сервера"
echo " bgp-load - Загрузить префиксы из файла"
echo " bgp-monitor - Непрерывный мониторинг"
echo " bird-status - Статус сервисов BIRD"
echo " bird-restart - Перезапуск сервисов BIRD"
echo " bird-logs - Просмотр логов BIRD"
echo ""
echo "Файлы конфигурации:"
echo " /etc/bird/bird.conf - Конфигурация BIRD IPv4"
echo " /etc/bird/bird6.conf - Конфигурация BIRD IPv6"
echo " /opt/bgp-server/data/prefixes.txt - Файл с префиксами"
echo ""
echo "Логи:"
echo " /var/log/bird/bird.log - Логи BIRD IPv4"
echo " /var/log/bird/bird6.log - Логи BIRD IPv6"
echo ""
echo "Для применения изменений выполните:"
echo " source /root/.bashrc"
echo ""
}
# Запуск основной функции
main "$@"