338 lines
9.9 KiB
Bash
338 lines
9.9 KiB
Bash
#!/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 "$@" |