+/ip address add address=10.200.2.2/30 interface=gre-MSK-VPSVILLE-IHOR
+/routing ospf interface-template add interfaces=gre-MSK-VPSVILLE-IHOR cost=10 area=backbone
+```
+
+### Тестирование failover
+
+```shell
+# На MSK-VPSVILLE отключить GRE туннель gre-SWE-HIPHOST
+/interface gre disable [ find where name=gre-SWE-HIPHOST ]
+
+# Проверить что маршрут исчез из OSPF
+/routing ospf route print
+
+# На HOME проверить что маршрут изменился
+/ip route print where dst-address=0.0.0.0/0
+
+# Включить туннель обратно
+/interface gre enable [ find where name=gre-SWE-HIPHOST ]
+
+# На MSK-IHOR отключить GRE туннель gre-SWE-HIPHOST
+/interface gre disable [ find where name=gre-SWE-HIPHOST ]
+
+# Проверить что маршрут исчез из OSPF
+/routing ospf route print
+
+# Включить туннель обратно
+/interface gre enable [ find where name=gre-SWE-HIPHOST ]
+```
+
+### Проверка работы cost:
+
+```shell
+# На HOME проверить OSPF маршруты с cost
+/routing ospf route print
+
+# Должно показать что-то вроде:
+# dst-address=0.0.0.0/0 gateway=10.100.2.2 cost=10 # Основной
+# dst-address=0.0.0.0/0 gateway=10.100.5.2 cost=10 # Основной
+# dst-address=0.0.0.0/0 gateway=10.100.1.2 cost=100 # Резервный
+# dst-address=0.0.0.0/0 gateway=10.100.5.2 cost=100 # Резервный
+```
+
+---
+
+## Настройка BFD для OSPF
+
+BFD (Bidirectional Forwarding Detection) обеспечивает быстрое обнаружение недоступности каналов и ускоряет failover OSPF.
+
+### Конфигурация BFD на HOME (RouterOS 7.14+):
+
+```shell
+# 1. Настроить BFD параметры для GRE интерфейсов
+/routing bfd
+add interface=gre-SWE-HIPHOST-MTS interval=100ms multiplier=3
+add interface=gre-SWE-HIPHOST-RTK interval=100ms multiplier=3
+add interface=gre-MSK-VPSVILLE-MTS interval=100ms multiplier=3
+add interface=gre-MSK-VPSVILLE-RTK interval=100ms multiplier=3
+add interface=gre-MSK-IHOR-MTS interval=100ms multiplier=3
+add interface=gre-MSK-IHOR-RTK interval=100ms multiplier=3
+
+# 2. Включить BFD для OSPF
+/routing ospf interface-template
+set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=yes
+set [ find where interfaces=gre-SWE-HIPHOST-RTK ] bfd=yes
+set [ find where interfaces=gre-MSK-VPSVILLE-MTS ] bfd=yes
+set [ find where interfaces=gre-MSK-VPSVILLE-RTK ] bfd=yes
+set [ find where interfaces=gre-MSK-IHOR-MTS ] bfd=yes
+set [ find where interfaces=gre-MSK-IHOR-RTK ] bfd=yes
+```
+
+### Конфигурация BFD на SWE-HIPHOST (RouterOS 7.14+):
+
+```shell
+# 1. Настроить BFD параметры для GRE интерфейсов
+/routing bfd
+add interface=gre-SWE-HIPHOST-MTS interval=100ms multiplier=3
+add interface=gre-SWE-HIPHOST-RTK interval=100ms multiplier=3
+add interface=gre-SWE-HIPHOST interval=100ms multiplier=3
+add interface=gre-MSK-VPSVILLE-IHOR interval=100ms multiplier=3
+
+# 2. Включить BFD для OSPF
+/routing ospf interface-template
+set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=yes
+set [ find where interfaces=gre-SWE-HIPHOST-RTK ] bfd=yes
+set [ find where interfaces=gre-SWE-HIPHOST ] bfd=yes
+set [ find where interfaces=gre-MSK-VPSVILLE-IHOR ] bfd=yes
+```
+
+### Конфигурация BFD на MSK-VPSVILLE (RouterOS 7.14+):
+
+```shell
+# 1. Настроить BFD параметры для GRE интерфейсов
+/routing bfd
+add interface=gre-MSK-VPSVILLE-MTS interval=100ms multiplier=3
+add interface=gre-MSK-VPSVILLE-RTK interval=100ms multiplier=3
+add interface=gre-SWE-HIPHOST interval=100ms multiplier=3
+add interface=gre-MSK-VPSVILLE-IHOR interval=100ms multiplier=3
+
+# 2. Включить BFD для OSPF
+/routing ospf interface-template
+set [ find where interfaces=gre-MSK-VPSVILLE-MTS ] bfd=yes
+set [ find where interfaces=gre-MSK-VPSVILLE-RTK ] bfd=yes
+set [ find where interfaces=gre-SWE-HIPHOST ] bfd=yes
+set [ find where interfaces=gre-MSK-VPSVILLE-IHOR ] bfd=yes
+```
+
+### Конфигурация BFD на MSK-IHOR (RouterOS 7.14+):
+
+```shell
+# 1. Настроить BFD параметры для GRE интерфейсов
+/routing bfd
+add interface=gre-MSK-IHOR-MTS interval=100ms multiplier=3
+add interface=gre-MSK-IHOR-RTK interval=100ms multiplier=3
+add interface=gre-SWE-HIPHOST interval=100ms multiplier=3
+add interface=gre-MSK-VPSVILLE-IHOR interval=100ms multiplier=3
+
+# 2. Включить BFD для OSPF
+/routing ospf interface-template
+set [ find where interfaces=gre-MSK-IHOR-MTS ] bfd=yes
+set [ find where interfaces=gre-MSK-IHOR-RTK ] bfd=yes
+set [ find where interfaces=gre-SWE-HIPHOST ] bfd=yes
+set [ find where interfaces=gre-MSK-VPSVILLE-IHOR ] bfd=yes
+```
+
+### Параметры BFD:
+
+| Параметр | Значение | Описание |
+|----------|----------|----------|
+| **interval** | 100ms | Интервал отправки BFD пакетов (быстрое обнаружение) |
+| **multiplier** | 3 | Количество пропущенных пакетов для объявления недоступности |
+| **Время обнаружения** | 300ms | interval × multiplier = 100ms × 3 = 300ms |
+
+### Полная конфигурация BFD для всех серверов:
+
+| Сервер | GRE интерфейсы с BFD | BFD параметры | OSPF интеграция |
+|--------|---------------------|---------------|-----------------|
+| **HOME** | gre-SWE-HIPHOST-MTS, gre-SWE-HIPHOST-RTK, gre-MSK-VPSVILLE-MTS, gre-MSK-VPSVILLE-RTK, gre-MSK-IHOR-MTS, gre-MSK-IHOR-RTK | interval=100ms, multiplier=3 | Все интерфейсы в OSPF с bfd=yes |
+| **MSK-VPSVILLE** | gre-MSK-VPSVILLE-MTS, gre-MSK-VPSVILLE-RTK, gre-SWE-HIPHOST, gre-MSK-VPSVILLE-IHOR | interval=100ms, multiplier=3 | Все интерфейсы в OSPF с bfd=yes |
+| **MSK-IHOR** | gre-MSK-IHOR-MTS, gre-MSK-IHOR-RTK, gre-SWE-HIPHOST, gre-MSK-VPSVILLE-IHOR | interval=100ms, multiplier=3 | Все интерфейсы в OSPF с bfd=yes |
+| **SWE-HIPHOST** | gre-SWE-HIPHOST-MTS, gre-SWE-HIPHOST-RTK, gre-SWE-HIPHOST, gre-MSK-VPSVILLE-IHOR | interval=100ms, multiplier=3 | Все интерфейсы в OSPF с bfd=yes |
+
+### Альтернативные настройки BFD:
+
+| Тип обнаружения | Interval | Multiplier | Время обнаружения | Применение |
+|----------------|----------|------------|-------------------|------------|
+| Быстрое | 50ms | 3 | 150ms | Критичные каналы |
+| Стандартное | 200ms | 3 | 600ms | Обычные каналы |
+| Медленное | 500ms | 3 | 1.5s | Экономия ресурсов |
+
+### Проверка BFD (RouterOS 7.14+):
+
+```shell
+# Проверить статус BFD сессий
+/routing bfd print
+
+# Проверить детали BFD сессий
+/routing bfd print detail
+
+# Проверить BFD на интерфейсах
+/interface gre print
+
+# Проверить OSPF с BFD
+/routing ospf interface-template print where bfd=yes
+
+# Проверить BFD логи
+/log print where topics~"bfd"
+
+# Проверить BFD статистику
+/routing bfd print stats
+```
+
+### Преимущества BFD:
+
+1. **Быстрое обнаружение**: 300ms вместо нескольких секунд OSPF
+2. **Надежность**: Независимое от OSPF обнаружение недоступности
+3. **Гибкость**: Настраиваемые параметры для разных каналов
+4. **Совместимость**: Работает с любыми протоколами маршрутизации
+
+---
+
+## Диагностика проблем с BFD
+
+### Проблема: BFD session в статусе "init" и "down"
+
+Если BFD сессия не устанавливается, это может быть связано с несколькими причинами:
+
+#### 1. Проверка базовой связности
+
+```shell
+# Проверить что GRE туннель работает
+/interface gre print
+
+# Проверить ping через GRE туннель
+ping 10.100.5.2 count=5
+
+# Проверить что OSPF соседи установлены
+/routing ospf neighbor print
+```
+
+#### 2. Проверка BFD конфигурации
+
+```shell
+# Проверить BFD сессии
+/routing bfd print
+
+# Проверить детали BFD
+/routing bfd print detail
+
+# Проверить что BFD включен в OSPF
+/routing ospf interface-template print where bfd=yes
+```
+
+#### 3. Возможные решения
+
+##### Решение 1: Проверить параметры BFD
+
+```shell
+# Убедиться что параметры одинаковые на обеих сторонах
+/routing bfd print
+
+# Если параметры разные, исправить:
+/routing bfd set [ find where interface=gre-SWE-HIPHOST-MTS ] interval=100ms multiplier=3
+```
+
+##### Решение 2: Перезапустить BFD сессию
+
+```shell
+# Удалить и пересоздать BFD сессию
+/routing bfd remove [ find where interface=gre-SWE-HIPHOST-MTS ]
+/routing bfd add interface=gre-SWE-HIPHOST-MTS interval=100ms multiplier=3
+```
+
+##### Решение 3: Проверить firewall
+
+```shell
+# Проверить что BFD пакеты не блокируются
+/ip firewall filter print where protocol=udp
+
+# BFD использует UDP порт 3784, убедиться что он не заблокирован
+```
+
+##### Решение 4: Использовать более медленные параметры
+
+```shell
+# Попробовать более медленные параметры для стабильности
+/routing bfd set [ find where interface=gre-SWE-HIPHOST-MTS ] interval=200ms multiplier=3
+```
+
+#### 4. Пошаговая диагностика
+
+```shell
+# Шаг 1: Проверить GRE туннель
+/interface gre print
+
+# Шаг 2: Проверить OSPF соседей
+/routing ospf neighbor print
+
+# Шаг 3: Проверить BFD сессии
+/routing bfd print
+
+# Шаг 4: Проверить BFD детали
+/routing bfd print detail
+
+# Шаг 5: Проверить логи
+/log print where topics~"bfd"
+```
+
+#### 5. Альтернатива: Отключить BFD временно
+
+```shell
+# Если BFD не работает, можно временно отключить
+/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=no
+
+# OSPF будет работать без BFD, но медленнее
+```
+
+#### 6. Специфичные проблемы и решения
+
+##### Проблема: BFD не работает на GRE туннелях
+
+Некоторые версии RouterOS могут иметь проблемы с BFD на GRE туннелях. В этом случае:
+
+```shell
+# Проверить версию RouterOS
+/system resource print
+
+# Если версия < 7.14, BFD может не работать на GRE
+# В этом случае лучше отключить BFD
+/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=no
+```
+
+##### Проблема: BFD конфликтует с OSPF
+
+```shell
+# Проверить OSPF соседей
+/routing ospf neighbor print
+
+# Если OSPF работает, но BFD нет - отключить BFD
+/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=no
+```
+
+##### Проблема: Неправильные параметры BFD
+
+```shell
+# Проверить текущие параметры
+/routing bfd print detail
+
+# Установить стандартные параметры
+/routing bfd set [ find where interface=gre-SWE-HIPHOST-MTS ] interval=200ms multiplier=3
+```
+
+#### 7. Рекомендуемая последовательность настройки BFD
+
+```shell
+# Шаг 1: Убедиться что OSPF работает
+/routing ospf neighbor print
+
+# Шаг 2: Настроить BFD с медленными параметрами
+/routing bfd add interface=gre-SWE-HIPHOST-MTS interval=200ms multiplier=3
+
+# Шаг 3: Включить BFD в OSPF
+/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=yes
+
+# Шаг 4: Проверить статус
+/routing bfd print
+
+# Шаг 5: Если работает, ускорить параметры
+/routing bfd set [ find where interface=gre-SWE-HIPHOST-MTS ] interval=100ms multiplier=3
+```
+
+#### 8. Мониторинг BFD
+
+```shell
+# Добавить логирование BFD
+/system logging
+add topics=bfd
+
+# Проверить логи BFD
+/log print where topics~"bfd"
+
+# Мониторинг BFD сессий
+:put "BFD Status:"
+/routing bfd print
+```
+
+#### 9. Быстрая диагностика для вашего случая
+
+Выполните эти команды на обеих сторонах (gateway и сервер):
+
+```shell
+# На gateway (HOME):
+# 1. Проверить GRE туннель
+/interface gre print where name~"SWE-HIPHOST"
+
+# 2. Проверить ping до сервера
+ping 10.100.5.2 count=5
+
+# 3. Проверить OSPF соседей
+/routing ospf neighbor print
+
+# 4. Проверить BFD сессии
+/routing bfd print
+
+# 5. Проверить детали BFD
+/routing bfd print detail
+
+# На сервере (SWE-HIPHOST):
+# 1. Проверить GRE туннель
+/interface gre print where name~"SWE-HIPHOST"
+
+# 2. Проверить ping до gateway
+ping 10.100.5.1 count=5
+
+# 3. Проверить OSPF соседей
+/routing ospf neighbor print
+
+# 4. Проверить BFD сессии
+/routing bfd print
+
+# 5. Проверить детали BFD
+/routing bfd print detail
+```
+
+#### 10. Быстрое решение
+
+Если диагностика показывает проблемы с BFD:
+
+```shell
+# Временно отключить BFD на обеих сторонах
+/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=no
+
+# Удалить BFD сессии
+/routing bfd remove [ find where interface=gre-SWE-HIPHOST-MTS ]
+
+# Проверить что OSPF работает
+/routing ospf neighbor print
+```
+
+#### 11. Проблема: BFD packets Rx = 0
+
+Если на gateway BFD session показывает `packets Rx = 0`, это означает что BFD пакеты не доходят от сервера до gateway.
+
+##### Диагностика проблемы с BFD пакетами
+
+```shell
+# На gateway проверить детали BFD сессии
+/routing bfd print detail
+
+# Должно показать что-то вроде:
+# packets-tx: 1234
+# packets-rx: 0 # ← Проблема здесь
+# state: down
+```
+
+##### Возможные причины и решения:
+
+###### Причина 1: BFD не настроен на сервере
+
+```shell
+# На сервере проверить BFD конфигурацию
+/routing bfd print
+
+# Если BFD не настроен, добавить:
+/routing bfd add interface=gre-SWE-HIPHOST-MTS interval=200ms multiplier=3
+
+# И включить в OSPF:
+/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=yes
+```
+
+###### Причина 2: Firewall блокирует BFD пакеты
+
+```shell
+# На сервере проверить firewall правила
+/ip firewall filter print where protocol=udp
+
+# BFD использует UDP порт 3784, проверить что он не заблокирован
+# Добавить правило для разрешения BFD (если нужно):
+/ip firewall filter add chain=forward protocol=udp dst-port=3784 action=accept comment="BFD"
+```
+
+###### Причина 3: Разные параметры BFD
+
+```shell
+# На обеих сторонах проверить параметры BFD
+/routing bfd print detail
+
+# Убедиться что interval и multiplier одинаковые
+# Если разные - исправить на сервере:
+/routing bfd set [ find where interface=gre-SWE-HIPHOST-MTS ] interval=200ms multiplier=3
+```
+
+###### Причина 4: GRE туннель нестабилен
+
+```shell
+# Проверить стабильность GRE туннеля
+/interface gre print
+
+# Проверить ping через туннель
+ping 10.100.5.2 count=10 interval=100ms
+
+# Если есть потери пакетов, BFD может не работать
+```
+
+##### Быстрое решение для диагностики:
+
+```shell
+# На сервере временно отключить BFD
+/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=no
+/routing bfd remove [ find where interface=gre-SWE-HIPHOST-MTS ]
+
+# На gateway тоже отключить
+/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=no
+/routing bfd remove [ find where interface=gre-SWE-HIPHOST-MTS ]
+
+# Проверить что OSPF работает без BFD
+/routing ospf neighbor print
+```
+
+##### Пошаговая настройка BFD заново:
+
+```shell
+# Шаг 1: Убедиться что OSPF работает
+/routing ospf neighbor print
+
+# Шаг 2: Настроить BFD на сервере с медленными параметрами
+/routing bfd add interface=gre-SWE-HIPHOST-MTS interval=500ms multiplier=3
+
+# Шаг 3: Включить BFD в OSPF на сервере
+/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=yes
+
+# Шаг 4: Настроить BFD на gateway с теми же параметрами
+/routing bfd add interface=gre-SWE-HIPHOST-MTS interval=500ms multiplier=3
+
+# Шаг 5: Включить BFD в OSPF на gateway
+/routing ospf interface-template set [ find where interfaces=gre-SWE-HIPHOST-MTS ] bfd=yes
+
+# Шаг 6: Проверить статус
+/routing bfd print
+```
+
+### Пояснение: DHCP маршруты в OSPF
+
+- **DHCP маршруты** считаются как `connected` в RouterOS
+- **redistribute=connected** анонсирует все connected маршруты, включая DHCP
+- **redistribute=static** анонсирует только статические маршруты
+- **DHCP маршрут 0.0.0.0/0** автоматически попадет в OSPF при `redistribute=connected`
+- **AWS metadata service (169.254.169.254)** тоже может анонсироваться и мешать
+
+### Проблема с AWS metadata service
+
+AWS автоматически добавляет маршрут к 169.254.169.254 (metadata service), который тоже будет анонсироваться через OSPF при `redistribute=connected`. Это может создавать нежелательные маршруты.
+
+### Проверка DHCP маршрута и AWS metadata:
+
+```shell
+# Проверить тип маршрута 0.0.0.0/0
+/ip route print where dst-address=0.0.0.0/0
+
+# Проверить AWS metadata маршрут
+/ip route print where dst-address=169.254.169.254/32
+
+# Должно показать что-то вроде:
+# Flags: D - DYNAMIC; A - ACTIVE; c - CONNECT, s - STATIC
+# Маршрут от DHCP будет помечен как DYNAMIC
+# AWS metadata маршрут тоже будет DYNAMIC
+```
+
+---
\ No newline at end of file
diff --git a/frontend/src/ServerManager.jsx b/frontend/src/ServerManager.jsx
index 517daf5..32e8599 100644
--- a/frontend/src/ServerManager.jsx
+++ b/frontend/src/ServerManager.jsx
@@ -65,6 +65,14 @@ function ServerManager() {
version: 'v4.rsc'
});
+ // Состояние для мониторинга сети
+ const [networkStatus, setNetworkStatus] = useState({});
+ const [monitoringEnabled, setMonitoringEnabled] = useState(false);
+
+ // Состояние для модального окна добавления сервера
+ const [addServerModalOpen, setAddServerModalOpen] = useState(false);
+ const [customProvider, setCustomProvider] = useState('');
+
useEffect(() => {
fetchServers();
}, []);
@@ -106,6 +114,44 @@ function ServerManager() {
setNewServer({ ip: '', dns: '', country: '', provider: '', tunnel: 'GRE' });
};
+ // Функции для модального окна добавления сервера
+ const handleOpenAddServerModal = () => {
+ setAddServerModalOpen(true);
+ };
+
+ const handleCloseAddServerModal = () => {
+ setAddServerModalOpen(false);
+ setNewServer({ ip: '', dns: '', country: '', provider: '', tunnel: 'GRE' });
+ setCustomProvider('');
+ setError('');
+ };
+
+ const handleAddServerFromModal = () => {
+ if (!newServer.ip.trim() || !newServer.dns.trim() || !newServer.country.trim() || !newServer.provider.trim() || !newServer.tunnel.trim()) {
+ setError('Все поля должны быть заполнены.');
+ return;
+ }
+
+ // Проверяем, если выбран "Другой" провайдер, то customProvider должен быть заполнен
+ if (newServer.provider === 'Другой' && !customProvider.trim()) {
+ setError('Пожалуйста, введите название провайдера.');
+ return;
+ }
+
+ setError('');
+
+ // Используем customProvider если выбран "Другой"
+ const finalProvider = newServer.provider === 'Другой' ? customProvider : newServer.provider;
+ const serverToAdd = { ...newServer, provider: finalProvider };
+
+ setServers([...servers, serverToAdd]);
+ setNewServer({ ip: '', dns: '', country: '', provider: '', tunnel: 'GRE' });
+ setCustomProvider('');
+ setAddServerModalOpen(false);
+ setSuccess('Сервер успешно добавлен!');
+ setTimeout(() => setSuccess(''), 3000);
+ };
+
const handleEdit = (server) => {
setEditModalServer({ ...server });
setEditModalOpen(true);
@@ -354,68 +400,20 @@ function ServerManager() {
- Добавить новый сервер
+ Управление серверами
-
+
+
+
@@ -547,6 +545,8 @@ function ServerManager() {
)}
+ Основной шлюз |
+ Статус |
Ссылка |
Действия |
@@ -559,6 +559,14 @@ function ServerManager() {
{countryToFlag(server.country)} {server.country} |
{server.provider} |
{server.tunnel} |
+
+
+ {server.provider}
+
+ |
+
+ Онлайн
+ |
+
+ {/* Add Server Modal */}
+
>
);
}
@@ -934,4 +954,153 @@ function LinkGeneratorModal({ show, server, urlSettings, onUrlSettingsChange, on
);
}
+// Модальное окно для добавления нового сервера
+function AddServerModal({ show, newServer, customProvider, onNewServerChange, onCustomProviderChange, onAddServer, onClose, error }) {
+ const modalRef = useRef(null);
+
+ useEffect(() => {
+ if (window.Tabler && window.Tabler.Modal && modalRef.current) {
+ const modalInstance = window.Tabler.Modal.getOrCreateInstance(modalRef.current);
+ if (show) {
+ modalInstance.show();
+ } else {
+ modalInstance.hide();
+ }
+ const handler = () => onClose && onClose();
+ modalRef.current.addEventListener('hide.bs.modal', handler);
+ return () => {
+ if (modalRef.current) {
+ modalRef.current.removeEventListener('hide.bs.modal', handler);
+ }
+ };
+ }
+ }, [show, onClose]);
+
+ const handleChange = (field, value) => {
+ onNewServerChange({ ...newServer, [field]: value });
+ };
+
+ const handleSubmit = (e) => {
+ e.preventDefault();
+ onAddServer();
+ };
+
+ return (
+
+
+
+
+
+
+ Добавить новый сервер
+
+
+
+
+ {error && (
+
+ {error}
+
+ )}
+
+
+
+
+
+
+
+
+
+ );
+}
+
export default ServerManager;
\ No newline at end of file
|