update
This commit is contained in:
+338
@@ -0,0 +1,338 @@
|
||||
#!/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 "$@"
|
||||
Reference in New Issue
Block a user