update
This commit is contained in:
@@ -0,0 +1,123 @@
|
|||||||
|
# Быстрый старт BGP сервера на Linux
|
||||||
|
|
||||||
|
## Минимальная установка
|
||||||
|
|
||||||
|
### Вариант 1: С Docker Compose
|
||||||
|
```bash
|
||||||
|
# 1. Клонируйте или скачайте проект
|
||||||
|
git clone <repository-url>
|
||||||
|
cd bgp-server
|
||||||
|
|
||||||
|
# 2. Установите зависимости
|
||||||
|
./install-dependencies.sh
|
||||||
|
|
||||||
|
# 3. Запустите BGP сервер
|
||||||
|
./start-bgp-server.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Вариант 2: Только Docker (рекомендуется)
|
||||||
|
```bash
|
||||||
|
# 1. Клонируйте или скачайте проект
|
||||||
|
git clone <repository-url>
|
||||||
|
cd bgp-server
|
||||||
|
|
||||||
|
# 2. Сделайте скрипты исполняемыми
|
||||||
|
chmod +x *.sh
|
||||||
|
|
||||||
|
# 3. Быстрый запуск одной командой
|
||||||
|
./quick-run.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Проверка работы
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Проверить статус
|
||||||
|
./check-bgp-status.sh
|
||||||
|
|
||||||
|
# Подключиться к консоли управления
|
||||||
|
docker exec -it bgp-server vtysh
|
||||||
|
|
||||||
|
# Посмотреть логи
|
||||||
|
docker-compose logs -f bgp-server
|
||||||
|
```
|
||||||
|
|
||||||
|
## Управление
|
||||||
|
|
||||||
|
### С Docker Compose
|
||||||
|
```bash
|
||||||
|
# Остановить сервер
|
||||||
|
./stop-bgp-server.sh
|
||||||
|
|
||||||
|
# Обновить префиксы
|
||||||
|
./update-prefixes.sh
|
||||||
|
|
||||||
|
# Перезапустить сервер
|
||||||
|
./stop-bgp-server.sh && ./start-bgp-server.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Только Docker
|
||||||
|
```bash
|
||||||
|
# Остановить сервер
|
||||||
|
./quick-stop.sh
|
||||||
|
|
||||||
|
# Полное управление контейнером
|
||||||
|
./run-bgp-container.sh start
|
||||||
|
./run-bgp-container.sh stop
|
||||||
|
./run-bgp-container.sh restart
|
||||||
|
./run-bgp-container.sh status
|
||||||
|
./run-bgp-container.sh logs
|
||||||
|
```
|
||||||
|
|
||||||
|
## Основные команды vtysh
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Войти в консоль
|
||||||
|
docker exec -it bgp-server vtysh
|
||||||
|
|
||||||
|
# Показать статус BGP
|
||||||
|
show ip bgp summary
|
||||||
|
|
||||||
|
# Показать анонсированные префиксы
|
||||||
|
show ip bgp
|
||||||
|
|
||||||
|
# Показать соседей
|
||||||
|
show ip bgp neighbors
|
||||||
|
|
||||||
|
# Показать community
|
||||||
|
show ip bgp community
|
||||||
|
```
|
||||||
|
|
||||||
|
## Настройки по умолчанию
|
||||||
|
|
||||||
|
- **ASN**: 65000
|
||||||
|
- **Router ID**: 192.168.1.1
|
||||||
|
- **BGP порт**: 179
|
||||||
|
- **vtysh порт**: 2601
|
||||||
|
- **Пароль vtysh**: zebra
|
||||||
|
|
||||||
|
## Подключение клиентов
|
||||||
|
|
||||||
|
Клиенты могут подключаться к BGP серверу по IP адресу сервера на порту 179.
|
||||||
|
|
||||||
|
Пример конфигурации клиента:
|
||||||
|
```
|
||||||
|
router bgp 65001
|
||||||
|
neighbor <SERVER_IP> remote-as 65000
|
||||||
|
neighbor <SERVER_IP> send-community
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Проверить, что Docker работает
|
||||||
|
docker version
|
||||||
|
|
||||||
|
# Проверить, что контейнер запущен
|
||||||
|
docker ps
|
||||||
|
|
||||||
|
# Проверить логи
|
||||||
|
docker-compose logs bgp-server
|
||||||
|
|
||||||
|
# Проверить сетевые порты
|
||||||
|
netstat -tuln | grep :179
|
||||||
|
```
|
||||||
@@ -4,9 +4,9 @@
|
|||||||
|
|
||||||
## Требования
|
## Требования
|
||||||
|
|
||||||
- Docker Desktop для Windows
|
- Docker Engine
|
||||||
- Docker Compose
|
- Docker Compose
|
||||||
- PowerShell
|
- Bash shell
|
||||||
|
|
||||||
## Структура проекта
|
## Структура проекта
|
||||||
|
|
||||||
@@ -15,24 +15,36 @@ bgp-server/
|
|||||||
├── docker-compose.yml # Конфигурация Docker контейнера
|
├── docker-compose.yml # Конфигурация Docker контейнера
|
||||||
├── frr.conf # Конфигурация FRRouting
|
├── frr.conf # Конфигурация FRRouting
|
||||||
├── prefixes.txt # Файл с префиксами и community
|
├── prefixes.txt # Файл с префиксами и community
|
||||||
├── start-bgp-server.ps1 # Скрипт запуска для PowerShell
|
├── start-bgp-server.sh # Скрипт запуска для Linux
|
||||||
|
├── stop-bgp-server.sh # Скрипт остановки для Linux
|
||||||
|
├── check-bgp-status.sh # Скрипт проверки статуса для Linux
|
||||||
|
├── update-prefixes.sh # Скрипт обновления префиксов для Linux
|
||||||
|
├── install-dependencies.sh # Скрипт установки зависимостей
|
||||||
└── README.md # Эта инструкция
|
└── README.md # Эта инструкция
|
||||||
```
|
```
|
||||||
|
|
||||||
## Быстрый запуск
|
## Быстрый запуск
|
||||||
|
|
||||||
1. **Запустите Docker Desktop**
|
1. **Установите зависимости (если не установлены):**
|
||||||
|
```bash
|
||||||
|
./install-dependencies.sh
|
||||||
|
```
|
||||||
|
|
||||||
2. **Запустите BGP сервер:**
|
2. **Сделайте скрипты исполняемыми:**
|
||||||
```powershell
|
```bash
|
||||||
.\start-bgp-server.ps1
|
chmod +x *.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Запустите BGP сервер:**
|
||||||
|
```bash
|
||||||
|
./start-bgp-server.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
## Ручной запуск
|
## Ручной запуск
|
||||||
|
|
||||||
Если вы предпочитаете запускать вручную:
|
Если вы предпочитаете запускать вручную:
|
||||||
|
|
||||||
```powershell
|
```bash
|
||||||
# Остановить существующие контейнеры
|
# Остановить существующие контейнеры
|
||||||
docker-compose down
|
docker-compose down
|
||||||
|
|
||||||
@@ -72,7 +84,7 @@ prefix community1:community2:community3
|
|||||||
|
|
||||||
### Подключение к vtysh (консоль управления)
|
### Подключение к vtysh (консоль управления)
|
||||||
|
|
||||||
```powershell
|
```bash
|
||||||
docker exec -it bgp-server vtysh
|
docker exec -it bgp-server vtysh
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -97,7 +109,7 @@ show ipv6 bgp summary
|
|||||||
|
|
||||||
### Просмотр логов
|
### Просмотр логов
|
||||||
|
|
||||||
```powershell
|
```bash
|
||||||
# Просмотр логов в реальном времени
|
# Просмотр логов в реальном времени
|
||||||
docker-compose logs -f bgp-server
|
docker-compose logs -f bgp-server
|
||||||
|
|
||||||
@@ -107,7 +119,7 @@ docker-compose logs bgp-server
|
|||||||
|
|
||||||
### Остановка сервера
|
### Остановка сервера
|
||||||
|
|
||||||
```powershell
|
```bash
|
||||||
docker-compose down
|
docker-compose down
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -149,20 +161,20 @@ protocols {
|
|||||||
|
|
||||||
### Проверка статуса контейнера
|
### Проверка статуса контейнера
|
||||||
|
|
||||||
```powershell
|
```bash
|
||||||
docker ps --filter "name=bgp-server"
|
docker ps --filter "name=bgp-server"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Проверка сетевых портов
|
### Проверка сетевых портов
|
||||||
|
|
||||||
```powershell
|
```bash
|
||||||
netstat -an | findstr :179
|
netstat -tuln | grep :179
|
||||||
netstat -an | findstr :2601
|
netstat -tuln | grep :2601
|
||||||
```
|
```
|
||||||
|
|
||||||
### Проверка логов FRRouting
|
### Проверка логов FRRouting
|
||||||
|
|
||||||
```powershell
|
```bash
|
||||||
docker exec bgp-server cat /var/log/frr/frr.log
|
docker exec bgp-server cat /var/log/frr/frr.log
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -1,67 +0,0 @@
|
|||||||
# PowerShell script to check BGP server status
|
|
||||||
# BGP Server Status Check Script
|
|
||||||
|
|
||||||
Write-Host "Checking BGP Server Status..." -ForegroundColor Cyan
|
|
||||||
|
|
||||||
# Check if Docker is running
|
|
||||||
try {
|
|
||||||
docker version | Out-Null
|
|
||||||
Write-Host "✓ Docker is running" -ForegroundColor Green
|
|
||||||
} catch {
|
|
||||||
Write-Host "✗ Docker is not running" -ForegroundColor Red
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check container status
|
|
||||||
Write-Host "`nContainer Status:" -ForegroundColor Yellow
|
|
||||||
$containerStatus = docker ps --filter "name=bgp-server" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
|
|
||||||
if ($containerStatus -and $containerStatus -notmatch "NAMES") {
|
|
||||||
Write-Host $containerStatus -ForegroundColor Green
|
|
||||||
} else {
|
|
||||||
Write-Host "✗ BGP container is not running" -ForegroundColor Red
|
|
||||||
Write-Host "To start the server, run: .\start-bgp-server.ps1" -ForegroundColor Yellow
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check network ports
|
|
||||||
Write-Host "`nNetwork Ports:" -ForegroundColor Yellow
|
|
||||||
$bgpPort = netstat -an | findstr ":179"
|
|
||||||
$vtyshPort = netstat -an | findstr ":2601"
|
|
||||||
|
|
||||||
if ($bgpPort) {
|
|
||||||
Write-Host "✓ BGP port 179 is listening" -ForegroundColor Green
|
|
||||||
} else {
|
|
||||||
Write-Host "✗ BGP port 179 is not listening" -ForegroundColor Red
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($vtyshPort) {
|
|
||||||
Write-Host "✓ vtysh port 2601 is listening" -ForegroundColor Green
|
|
||||||
} else {
|
|
||||||
Write-Host "✗ vtysh port 2601 is not listening" -ForegroundColor Red
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check BGP status inside container
|
|
||||||
Write-Host "`nBGP Status:" -ForegroundColor Yellow
|
|
||||||
try {
|
|
||||||
$bgpSummary = docker exec bgp-server vtysh -c "show ip bgp summary" 2>$null
|
|
||||||
if ($bgpSummary) {
|
|
||||||
Write-Host "✓ BGP daemon is running" -ForegroundColor Green
|
|
||||||
Write-Host "BGP Summary:" -ForegroundColor Cyan
|
|
||||||
Write-Host $bgpSummary -ForegroundColor White
|
|
||||||
} else {
|
|
||||||
Write-Host "✗ BGP daemon is not responding" -ForegroundColor Red
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
Write-Host "✗ Cannot connect to BGP daemon" -ForegroundColor Red
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check recent logs
|
|
||||||
Write-Host "`nRecent Logs:" -ForegroundColor Yellow
|
|
||||||
$recentLogs = docker-compose logs --tail=10 bgp-server 2>$null
|
|
||||||
if ($recentLogs) {
|
|
||||||
Write-Host $recentLogs -ForegroundColor White
|
|
||||||
} else {
|
|
||||||
Write-Host "No recent logs available" -ForegroundColor Gray
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Host "`nStatus check completed!" -ForegroundColor Green
|
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Bash script to check BGP server status on Linux
|
||||||
|
# BGP Server Status Check Script
|
||||||
|
|
||||||
|
echo -e "\033[36mChecking BGP Server Status...\033[0m"
|
||||||
|
|
||||||
|
# Check if Docker is running
|
||||||
|
if ! docker version >/dev/null 2>&1; then
|
||||||
|
echo -e "\033[31m✗ Docker is not running\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo -e "\033[32m✓ Docker is running\033[0m"
|
||||||
|
|
||||||
|
# Check container status
|
||||||
|
echo -e "\n\033[33mContainer Status:\033[0m"
|
||||||
|
container_status=$(docker ps --filter "name=bgp-server" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}")
|
||||||
|
if [ -n "$container_status" ] && ! echo "$container_status" | grep -q "NAMES"; then
|
||||||
|
echo -e "\033[32m$container_status\033[0m"
|
||||||
|
else
|
||||||
|
echo -e "\033[31m✗ BGP container is not running\033[0m"
|
||||||
|
echo -e "\033[33mTo start the server, run: ./start-bgp-server.sh\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check network ports
|
||||||
|
echo -e "\n\033[33mNetwork Ports:\033[0m"
|
||||||
|
if netstat -tuln 2>/dev/null | grep -q ":179 "; then
|
||||||
|
echo -e "\033[32m✓ BGP port 179 is listening\033[0m"
|
||||||
|
else
|
||||||
|
echo -e "\033[31m✗ BGP port 179 is not listening\033[0m"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if netstat -tuln 2>/dev/null | grep -q ":2601 "; then
|
||||||
|
echo -e "\033[32m✓ vtysh port 2601 is listening\033[0m"
|
||||||
|
else
|
||||||
|
echo -e "\033[31m✗ vtysh port 2601 is not listening\033[0m"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check BGP status inside container
|
||||||
|
echo -e "\n\033[33mBGP Status:\033[0m"
|
||||||
|
bgp_summary=$(docker exec bgp-server vtysh -c "show ip bgp summary" 2>/dev/null)
|
||||||
|
if [ -n "$bgp_summary" ]; then
|
||||||
|
echo -e "\033[32m✓ BGP daemon is running\033[0m"
|
||||||
|
echo -e "\033[36mBGP Summary:\033[0m"
|
||||||
|
echo -e "\033[37m$bgp_summary\033[0m"
|
||||||
|
else
|
||||||
|
echo -e "\033[31m✗ BGP daemon is not responding\033[0m"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check recent logs
|
||||||
|
echo -e "\n\033[33mRecent Logs:\033[0m"
|
||||||
|
recent_logs=$(docker-compose logs --tail=10 bgp-server 2>/dev/null)
|
||||||
|
if [ -n "$recent_logs" ]; then
|
||||||
|
echo -e "\033[37m$recent_logs\033[0m"
|
||||||
|
else
|
||||||
|
echo -e "\033[90mNo recent logs available\033[0m"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "\n\033[32mStatus check completed!\033[0m"
|
||||||
@@ -0,0 +1,106 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Bash script to install dependencies on Linux
|
||||||
|
# Dependencies Installation Script
|
||||||
|
|
||||||
|
echo -e "\033[36mInstalling BGP Server Dependencies...\033[0m"
|
||||||
|
|
||||||
|
# Detect OS
|
||||||
|
if [ -f /etc/os-release ]; then
|
||||||
|
. /etc/os-release
|
||||||
|
OS=$NAME
|
||||||
|
VER=$VERSION_ID
|
||||||
|
else
|
||||||
|
echo -e "\033[31mCannot detect OS version\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "\033[33mDetected OS: $OS $VER\033[0m"
|
||||||
|
|
||||||
|
# Function to install Docker
|
||||||
|
install_docker() {
|
||||||
|
echo -e "\033[33mInstalling Docker...\033[0m"
|
||||||
|
|
||||||
|
# Remove old versions
|
||||||
|
sudo apt-get remove docker docker-engine docker.io containerd runc 2>/dev/null || true
|
||||||
|
|
||||||
|
# Update package index
|
||||||
|
sudo apt-get update
|
||||||
|
|
||||||
|
# Install prerequisites
|
||||||
|
sudo apt-get install -y \
|
||||||
|
apt-transport-https \
|
||||||
|
ca-certificates \
|
||||||
|
curl \
|
||||||
|
gnupg \
|
||||||
|
lsb-release
|
||||||
|
|
||||||
|
# Add Docker's official GPG key
|
||||||
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
||||||
|
|
||||||
|
# Set up stable repository
|
||||||
|
echo \
|
||||||
|
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
|
||||||
|
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||||
|
|
||||||
|
# Install Docker Engine
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
|
||||||
|
|
||||||
|
# Add user to docker group
|
||||||
|
sudo usermod -aG docker $USER
|
||||||
|
|
||||||
|
# Start and enable Docker
|
||||||
|
sudo systemctl start docker
|
||||||
|
sudo systemctl enable docker
|
||||||
|
|
||||||
|
echo -e "\033[32m✓ Docker installed successfully\033[0m"
|
||||||
|
echo -e "\033[33mNote: You may need to log out and back in for group changes to take effect\033[0m"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to install Docker Compose
|
||||||
|
install_docker_compose() {
|
||||||
|
echo -e "\033[33mInstalling Docker Compose...\033[0m"
|
||||||
|
|
||||||
|
# Download Docker Compose
|
||||||
|
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
||||||
|
|
||||||
|
# Make it executable
|
||||||
|
sudo chmod +x /usr/local/bin/docker-compose
|
||||||
|
|
||||||
|
# Create symbolic link
|
||||||
|
sudo ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
|
||||||
|
|
||||||
|
echo -e "\033[32m✓ Docker Compose installed successfully\033[0m"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if Docker is installed
|
||||||
|
if ! command -v docker &> /dev/null; then
|
||||||
|
echo -e "\033[31mDocker is not installed\033[0m"
|
||||||
|
install_docker
|
||||||
|
else
|
||||||
|
echo -e "\033[32m✓ Docker is already installed\033[0m"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if Docker Compose is installed
|
||||||
|
if ! command -v docker-compose &> /dev/null; then
|
||||||
|
echo -e "\033[31mDocker Compose is not installed\033[0m"
|
||||||
|
install_docker_compose
|
||||||
|
else
|
||||||
|
echo -e "\033[32m✓ Docker Compose is already installed\033[0m"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Make scripts executable
|
||||||
|
echo -e "\033[33mMaking scripts executable...\033[0m"
|
||||||
|
chmod +x *.sh
|
||||||
|
|
||||||
|
# Test Docker installation
|
||||||
|
echo -e "\033[33mTesting Docker installation...\033[0m"
|
||||||
|
if sudo docker run hello-world >/dev/null 2>&1; then
|
||||||
|
echo -e "\033[32m✓ Docker is working correctly\033[0m"
|
||||||
|
else
|
||||||
|
echo -e "\033[31m✗ Docker test failed\033[0m"
|
||||||
|
echo -e "\033[33mYou may need to log out and back in, or restart the system\033[0m"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "\n\033[32mDependencies installation completed!\033[0m"
|
||||||
|
echo -e "\033[33mTo start the BGP server, run: ./start-bgp-server.sh\033[0m"
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Quick run script for BGP container
|
||||||
|
# Simple one-command BGP server launcher
|
||||||
|
|
||||||
|
echo -e "\033[32m🚀 Quick BGP Server Launcher\033[0m"
|
||||||
|
|
||||||
|
# Check if required files exist
|
||||||
|
if [ ! -f "frr.conf" ]; then
|
||||||
|
echo -e "\033[31mError: frr.conf not found in current directory\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "prefixes.txt" ]; then
|
||||||
|
echo -e "\033[31mError: prefixes.txt not found in current directory\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Stop existing container if running
|
||||||
|
docker stop bgp-server 2>/dev/null || true
|
||||||
|
docker rm bgp-server 2>/dev/null || true
|
||||||
|
|
||||||
|
# Pull latest image
|
||||||
|
echo -e "\033[33m📥 Pulling FRRouting image...\033[0m"
|
||||||
|
docker pull quay.io/frrouting/frr:latest
|
||||||
|
|
||||||
|
# Run container
|
||||||
|
echo -e "\033[33m🚀 Starting BGP server...\033[0m"
|
||||||
|
docker run -d \
|
||||||
|
--name bgp-server \
|
||||||
|
--hostname bgp-server \
|
||||||
|
--privileged \
|
||||||
|
--network host \
|
||||||
|
-v "$(pwd)/frr.conf:/etc/frr/frr.conf:ro" \
|
||||||
|
-v "$(pwd)/prefixes.txt:/etc/frr/prefixes.txt:ro" \
|
||||||
|
-e FRR_USER=frr \
|
||||||
|
-e FRR_VTYSH_PASSWORD=zebra \
|
||||||
|
--cap-add=NET_ADMIN \
|
||||||
|
--cap-add=SYS_ADMIN \
|
||||||
|
--security-opt seccomp=unconfined \
|
||||||
|
--restart unless-stopped \
|
||||||
|
quay.io/frrouting/frr:latest \
|
||||||
|
/usr/lib/frr/frrinit.sh start
|
||||||
|
|
||||||
|
# Wait for startup
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
# Show status
|
||||||
|
echo -e "\033[36m📊 Container Status:\033[0m"
|
||||||
|
docker ps --filter "name=bgp-server" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
|
||||||
|
|
||||||
|
# Show BGP status
|
||||||
|
echo -e "\n\033[36m🌐 BGP Status:\033[0m"
|
||||||
|
if docker exec bgp-server vtysh -c "show ip bgp summary" 2>/dev/null; then
|
||||||
|
echo -e "\n\033[32m✅ BGP Server is running successfully!\033[0m"
|
||||||
|
else
|
||||||
|
echo -e "\n\033[33m⚠️ BGP daemon is starting up...\033[0m"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "\n\033[33m🔧 Useful commands:\033[0m"
|
||||||
|
echo -e " Connect to vtysh: docker exec -it bgp-server vtysh"
|
||||||
|
echo -e " View logs: docker logs bgp-server"
|
||||||
|
echo -e " Stop server: docker stop bgp-server"
|
||||||
|
echo -e " Check status: docker ps | grep bgp-server"
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Quick stop script for BGP container
|
||||||
|
# Simple one-command BGP server stopper
|
||||||
|
|
||||||
|
echo -e "\033[33m🛑 Quick BGP Server Stopper\033[0m"
|
||||||
|
|
||||||
|
# Check if container is running
|
||||||
|
if docker ps -q -f name=bgp-server | grep -q .; then
|
||||||
|
echo -e "\033[33m⏹️ Stopping BGP server...\033[0m"
|
||||||
|
docker stop bgp-server
|
||||||
|
docker rm bgp-server
|
||||||
|
echo -e "\033[32m✅ BGP Server stopped successfully!\033[0m"
|
||||||
|
else
|
||||||
|
echo -e "\033[31m❌ BGP Server is not running\033[0m"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Show remaining containers
|
||||||
|
echo -e "\n\033[36m📊 Remaining containers:\033[0m"
|
||||||
|
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
|
||||||
|
|
||||||
|
echo -e "\n\033[33m🚀 To start again: ./quick-run.sh\033[0m"
|
||||||
@@ -0,0 +1,148 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Ready-to-use Docker container script for BGP server
|
||||||
|
# BGP Container Runner Script
|
||||||
|
|
||||||
|
CONTAINER_NAME="bgp-server"
|
||||||
|
IMAGE_NAME="quay.io/frrouting/frr:latest"
|
||||||
|
BGP_PORT="179"
|
||||||
|
VTYSH_PORT="2601"
|
||||||
|
CONFIG_DIR="$(pwd)"
|
||||||
|
|
||||||
|
echo -e "\033[36m=== BGP Server Container Runner ===\033[0m"
|
||||||
|
|
||||||
|
# Function to check if Docker is running
|
||||||
|
check_docker() {
|
||||||
|
if ! docker version >/dev/null 2>&1; then
|
||||||
|
echo -e "\033[31mError: Docker is not running. Please start Docker first.\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo -e "\033[32m✓ Docker is running\033[0m"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to stop existing container
|
||||||
|
stop_container() {
|
||||||
|
if docker ps -q -f name=$CONTAINER_NAME | grep -q .; then
|
||||||
|
echo -e "\033[33mStopping existing container...\033[0m"
|
||||||
|
docker stop $CONTAINER_NAME
|
||||||
|
docker rm $CONTAINER_NAME
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to pull image
|
||||||
|
pull_image() {
|
||||||
|
echo -e "\033[33mPulling FRRouting image...\033[0m"
|
||||||
|
docker pull $IMAGE_NAME
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to create and run container
|
||||||
|
run_container() {
|
||||||
|
echo -e "\033[33mStarting BGP container...\033[0m"
|
||||||
|
|
||||||
|
docker run -d \
|
||||||
|
--name $CONTAINER_NAME \
|
||||||
|
--hostname $CONTAINER_NAME \
|
||||||
|
--privileged \
|
||||||
|
--network host \
|
||||||
|
-v "$CONFIG_DIR/frr.conf:/etc/frr/frr.conf:ro" \
|
||||||
|
-v "$CONFIG_DIR/prefixes.txt:/etc/frr/prefixes.txt:ro" \
|
||||||
|
-e FRR_USER=frr \
|
||||||
|
-e FRR_VTYSH_PASSWORD=zebra \
|
||||||
|
--cap-add=NET_ADMIN \
|
||||||
|
--cap-add=SYS_ADMIN \
|
||||||
|
--security-opt seccomp=unconfined \
|
||||||
|
--restart unless-stopped \
|
||||||
|
$IMAGE_NAME \
|
||||||
|
/usr/lib/frr/frrinit.sh start
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to check container status
|
||||||
|
check_status() {
|
||||||
|
echo -e "\033[36mContainer Status:\033[0m"
|
||||||
|
docker ps --filter "name=$CONTAINER_NAME" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
|
||||||
|
|
||||||
|
echo -e "\n\033[36mNetwork Ports:\033[0m"
|
||||||
|
if netstat -tuln 2>/dev/null | grep -q ":179 "; then
|
||||||
|
echo -e "\033[32m✓ BGP port 179 is listening\033[0m"
|
||||||
|
else
|
||||||
|
echo -e "\033[31m✗ BGP port 179 is not listening\033[0m"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if netstat -tuln 2>/dev/null | grep -q ":2601 "; then
|
||||||
|
echo -e "\033[32m✓ vtysh port 2601 is listening\033[0m"
|
||||||
|
else
|
||||||
|
echo -e "\033[31m✗ vtysh port 2601 is not listening\033[0m"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to show logs
|
||||||
|
show_logs() {
|
||||||
|
echo -e "\n\033[36mContainer Logs:\033[0m"
|
||||||
|
docker logs $CONTAINER_NAME
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to show usage
|
||||||
|
show_usage() {
|
||||||
|
echo -e "\033[33mUsage:\033[0m"
|
||||||
|
echo -e " $0 [start|stop|restart|status|logs|help]"
|
||||||
|
echo -e ""
|
||||||
|
echo -e "\033[33mCommands:\033[0m"
|
||||||
|
echo -e " start - Start BGP container"
|
||||||
|
echo -e " stop - Stop BGP container"
|
||||||
|
echo -e " restart - Restart BGP container"
|
||||||
|
echo -e " status - Show container status"
|
||||||
|
echo -e " logs - Show container logs"
|
||||||
|
echo -e " help - Show this help"
|
||||||
|
echo -e ""
|
||||||
|
echo -e "\033[33mExamples:\033[0m"
|
||||||
|
echo -e " $0 start"
|
||||||
|
echo -e " $0 status"
|
||||||
|
echo -e " $0 logs"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main script logic
|
||||||
|
case "${1:-start}" in
|
||||||
|
start)
|
||||||
|
check_docker
|
||||||
|
stop_container
|
||||||
|
pull_image
|
||||||
|
run_container
|
||||||
|
sleep 3
|
||||||
|
check_status
|
||||||
|
show_logs
|
||||||
|
echo -e "\n\033[32mBGP Server is running!\033[0m"
|
||||||
|
echo -e "\033[33mTo connect to vtysh: docker exec -it $CONTAINER_NAME vtysh\033[0m"
|
||||||
|
echo -e "\033[33mTo view logs: $0 logs\033[0m"
|
||||||
|
echo -e "\033[33mTo stop: $0 stop\033[0m"
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
echo -e "\033[33mStopping BGP container...\033[0m"
|
||||||
|
docker stop $CONTAINER_NAME 2>/dev/null || true
|
||||||
|
docker rm $CONTAINER_NAME 2>/dev/null || true
|
||||||
|
echo -e "\033[32mBGP container stopped\033[0m"
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
echo -e "\033[33mRestarting BGP container...\033[0m"
|
||||||
|
$0 stop
|
||||||
|
sleep 2
|
||||||
|
$0 start
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
check_docker
|
||||||
|
check_status
|
||||||
|
;;
|
||||||
|
logs)
|
||||||
|
if docker ps -q -f name=$CONTAINER_NAME | grep -q .; then
|
||||||
|
show_logs
|
||||||
|
else
|
||||||
|
echo -e "\033[31mContainer is not running\033[0m"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
help|--help|-h)
|
||||||
|
show_usage
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -e "\033[31mUnknown command: $1\033[0m"
|
||||||
|
show_usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
# PowerShell script to start BGP server
|
|
||||||
# BGP Server Startup Script
|
|
||||||
|
|
||||||
Write-Host "Starting BGP Server with FRRouting..." -ForegroundColor Green
|
|
||||||
|
|
||||||
# Check if Docker is running
|
|
||||||
try {
|
|
||||||
docker version | Out-Null
|
|
||||||
Write-Host "Docker is running" -ForegroundColor Green
|
|
||||||
} catch {
|
|
||||||
Write-Host "Error: Docker is not running. Please start Docker Desktop first." -ForegroundColor Red
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check if docker-compose is available
|
|
||||||
try {
|
|
||||||
docker-compose --version | Out-Null
|
|
||||||
Write-Host "Docker Compose is available" -ForegroundColor Green
|
|
||||||
} catch {
|
|
||||||
Write-Host "Error: Docker Compose is not available. Please install Docker Compose." -ForegroundColor Red
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Stop any existing containers
|
|
||||||
Write-Host "Stopping any existing BGP containers..." -ForegroundColor Yellow
|
|
||||||
docker-compose down
|
|
||||||
|
|
||||||
# Start the BGP server
|
|
||||||
Write-Host "Starting BGP server..." -ForegroundColor Yellow
|
|
||||||
docker-compose up -d
|
|
||||||
|
|
||||||
# Wait for container to start
|
|
||||||
Start-Sleep -Seconds 5
|
|
||||||
|
|
||||||
# Check container status
|
|
||||||
$containerStatus = docker ps --filter "name=bgp-server" --format "table {{.Names}}\t{{.Status}}"
|
|
||||||
Write-Host "Container status:" -ForegroundColor Cyan
|
|
||||||
Write-Host $containerStatus
|
|
||||||
|
|
||||||
# Show logs
|
|
||||||
Write-Host "`nBGP Server logs:" -ForegroundColor Cyan
|
|
||||||
docker-compose logs bgp-server
|
|
||||||
|
|
||||||
Write-Host "`nBGP Server is running!" -ForegroundColor Green
|
|
||||||
Write-Host "BGP port: 179" -ForegroundColor White
|
|
||||||
Write-Host "vtysh port: 2601" -ForegroundColor White
|
|
||||||
Write-Host "`nTo connect to vtysh: docker exec -it bgp-server vtysh" -ForegroundColor Yellow
|
|
||||||
Write-Host "To view logs: docker-compose logs -f bgp-server" -ForegroundColor Yellow
|
|
||||||
Write-Host "To stop server: docker-compose down" -ForegroundColor Yellow
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Bash script to start BGP server on Linux
|
||||||
|
# BGP Server Startup Script
|
||||||
|
|
||||||
|
echo -e "\033[32mStarting BGP Server with FRRouting...\033[0m"
|
||||||
|
|
||||||
|
# Check if Docker is running
|
||||||
|
if ! docker version >/dev/null 2>&1; then
|
||||||
|
echo -e "\033[31mError: Docker is not running. Please start Docker first.\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo -e "\033[32m✓ Docker is running\033[0m"
|
||||||
|
|
||||||
|
# Check if docker-compose is available
|
||||||
|
if ! docker-compose --version >/dev/null 2>&1; then
|
||||||
|
echo -e "\033[31mError: Docker Compose is not available. Please install Docker Compose.\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo -e "\033[32m✓ Docker Compose is available\033[0m"
|
||||||
|
|
||||||
|
# Stop any existing containers
|
||||||
|
echo -e "\033[33mStopping any existing BGP containers...\033[0m"
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
# Start the BGP server
|
||||||
|
echo -e "\033[33mStarting BGP server...\033[0m"
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# Wait for container to start
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
# Check container status
|
||||||
|
echo -e "\033[36mContainer status:\033[0m"
|
||||||
|
docker ps --filter "name=bgp-server" --format "table {{.Names}}\t{{.Status}}"
|
||||||
|
|
||||||
|
# Show logs
|
||||||
|
echo -e "\n\033[36mBGP Server logs:\033[0m"
|
||||||
|
docker-compose logs bgp-server
|
||||||
|
|
||||||
|
echo -e "\n\033[32mBGP Server is running!\033[0m"
|
||||||
|
echo -e "\033[37mBGP port: 179\033[0m"
|
||||||
|
echo -e "\033[37mvtysh port: 2601\033[0m"
|
||||||
|
echo -e "\n\033[33mTo connect to vtysh: docker exec -it bgp-server vtysh\033[0m"
|
||||||
|
echo -e "\033[33mTo view logs: docker-compose logs -f bgp-server\033[0m"
|
||||||
|
echo -e "\033[33mTo stop server: docker-compose down\033[0m"
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
# PowerShell script to stop BGP server
|
|
||||||
# BGP Server Stop Script
|
|
||||||
|
|
||||||
Write-Host "Stopping BGP Server..." -ForegroundColor Yellow
|
|
||||||
|
|
||||||
# Stop the BGP server
|
|
||||||
Write-Host "Stopping BGP containers..." -ForegroundColor Yellow
|
|
||||||
docker-compose down
|
|
||||||
|
|
||||||
# Remove volumes (optional - uncomment if you want to clean up completely)
|
|
||||||
# Write-Host "Removing volumes..." -ForegroundColor Yellow
|
|
||||||
# docker-compose down -v
|
|
||||||
|
|
||||||
# Check if containers are stopped
|
|
||||||
$runningContainers = docker ps --filter "name=bgp-server" --format "{{.Names}}"
|
|
||||||
if ($runningContainers) {
|
|
||||||
Write-Host "Warning: Some BGP containers are still running:" -ForegroundColor Red
|
|
||||||
Write-Host $runningContainers -ForegroundColor Red
|
|
||||||
} else {
|
|
||||||
Write-Host "BGP Server stopped successfully!" -ForegroundColor Green
|
|
||||||
}
|
|
||||||
|
|
||||||
# Show stopped containers
|
|
||||||
$stoppedContainers = docker ps -a --filter "name=bgp-server" --format "table {{.Names}}\t{{.Status}}"
|
|
||||||
Write-Host "`nContainer status:" -ForegroundColor Cyan
|
|
||||||
Write-Host $stoppedContainers
|
|
||||||
|
|
||||||
Write-Host "`nTo start the server again, run: .\start-bgp-server.ps1" -ForegroundColor Yellow
|
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Bash script to stop BGP server on Linux
|
||||||
|
# BGP Server Stop Script
|
||||||
|
|
||||||
|
echo -e "\033[33mStopping BGP Server...\033[0m"
|
||||||
|
|
||||||
|
# Stop the BGP server
|
||||||
|
echo -e "\033[33mStopping BGP containers...\033[0m"
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
# Remove volumes (optional - uncomment if you want to clean up completely)
|
||||||
|
# echo -e "\033[33mRemoving volumes...\033[0m"
|
||||||
|
# docker-compose down -v
|
||||||
|
|
||||||
|
# Check if containers are stopped
|
||||||
|
running_containers=$(docker ps --filter "name=bgp-server" --format "{{.Names}}")
|
||||||
|
if [ -n "$running_containers" ]; then
|
||||||
|
echo -e "\033[31mWarning: Some BGP containers are still running:\033[0m"
|
||||||
|
echo -e "\033[31m$running_containers\033[0m"
|
||||||
|
else
|
||||||
|
echo -e "\033[32mBGP Server stopped successfully!\033[0m"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Show stopped containers
|
||||||
|
echo -e "\n\033[36mContainer status:\033[0m"
|
||||||
|
docker ps -a --filter "name=bgp-server" --format "table {{.Names}}\t{{.Status}}"
|
||||||
|
|
||||||
|
echo -e "\n\033[33mTo start the server again, run: ./start-bgp-server.sh\033[0m"
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
# PowerShell script to update BGP prefixes
|
|
||||||
# BGP Prefixes Update Script
|
|
||||||
|
|
||||||
param(
|
|
||||||
[string]$PrefixesFile = "prefixes.txt"
|
|
||||||
)
|
|
||||||
|
|
||||||
Write-Host "Updating BGP Prefixes..." -ForegroundColor Cyan
|
|
||||||
|
|
||||||
# Check if container is running
|
|
||||||
$containerStatus = docker ps --filter "name=bgp-server" --format "{{.Names}}"
|
|
||||||
if (-not $containerStatus) {
|
|
||||||
Write-Host "Error: BGP container is not running. Please start it first." -ForegroundColor Red
|
|
||||||
Write-Host "Run: .\start-bgp-server.ps1" -ForegroundColor Yellow
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check if prefixes file exists
|
|
||||||
if (-not (Test-Path $PrefixesFile)) {
|
|
||||||
Write-Host "Error: Prefixes file '$PrefixesFile' not found." -ForegroundColor Red
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Copy new prefixes file to container
|
|
||||||
Write-Host "Copying new prefixes file to container..." -ForegroundColor Yellow
|
|
||||||
docker cp $PrefixesFile bgp-server:/etc/frr/prefixes.txt
|
|
||||||
|
|
||||||
# Reload BGP configuration
|
|
||||||
Write-Host "Reloading BGP configuration..." -ForegroundColor Yellow
|
|
||||||
docker exec bgp-server vtysh -c "configure terminal" -c "router bgp 65000" -c "clear ip bgp *" -c "end"
|
|
||||||
|
|
||||||
# Wait a moment for BGP to stabilize
|
|
||||||
Start-Sleep -Seconds 3
|
|
||||||
|
|
||||||
# Show updated BGP table
|
|
||||||
Write-Host "`nUpdated BGP table:" -ForegroundColor Green
|
|
||||||
docker exec bgp-server vtysh -c "show ip bgp"
|
|
||||||
|
|
||||||
Write-Host "`nPrefixes updated successfully!" -ForegroundColor Green
|
|
||||||
Write-Host "To view current prefixes: docker exec -it bgp-server vtysh -c 'show ip bgp'" -ForegroundColor Yellow
|
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Bash script to update BGP prefixes on Linux
|
||||||
|
# BGP Prefixes Update Script
|
||||||
|
|
||||||
|
PREFIXES_FILE=${1:-"prefixes.txt"}
|
||||||
|
|
||||||
|
echo -e "\033[36mUpdating BGP Prefixes...\033[0m"
|
||||||
|
|
||||||
|
# Check if container is running
|
||||||
|
container_status=$(docker ps --filter "name=bgp-server" --format "{{.Names}}")
|
||||||
|
if [ -z "$container_status" ]; then
|
||||||
|
echo -e "\033[31mError: BGP container is not running. Please start it first.\033[0m"
|
||||||
|
echo -e "\033[33mRun: ./start-bgp-server.sh\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if prefixes file exists
|
||||||
|
if [ ! -f "$PREFIXES_FILE" ]; then
|
||||||
|
echo -e "\033[31mError: Prefixes file '$PREFIXES_FILE' not found.\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Copy new prefixes file to container
|
||||||
|
echo -e "\033[33mCopying new prefixes file to container...\033[0m"
|
||||||
|
docker cp "$PREFIXES_FILE" bgp-server:/etc/frr/prefixes.txt
|
||||||
|
|
||||||
|
# Reload BGP configuration
|
||||||
|
echo -e "\033[33mReloading BGP configuration...\033[0m"
|
||||||
|
docker exec bgp-server vtysh -c "configure terminal" -c "router bgp 65000" -c "clear ip bgp *" -c "end"
|
||||||
|
|
||||||
|
# Wait a moment for BGP to stabilize
|
||||||
|
sleep 3
|
||||||
|
|
||||||
|
# Show updated BGP table
|
||||||
|
echo -e "\n\033[32mUpdated BGP table:\033[0m"
|
||||||
|
docker exec bgp-server vtysh -c "show ip bgp"
|
||||||
|
|
||||||
|
echo -e "\n\033[32mPrefixes updated successfully!\033[0m"
|
||||||
|
echo -e "\033[33mTo view current prefixes: docker exec -it bgp-server vtysh -c 'show ip bgp'\033[0m"
|
||||||
Reference in New Issue
Block a user