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