#!/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 "$@"