# Dummy интерфейсы в VyOS

> Dummy интерфейсы в VyOS - виртуальные loopback-адаптеры для тестирования маршрутизации, blackhole-маршрутов и сервисных IP

Source: https://opennix.org/docs/vyos/interfaces/vyos-dummy/



Dummy интерфейсы в VyOS - это виртуальные интерфейсы, которые всегда находятся в состоянии "up" и не привязаны к физическому оборудованию. Они используются для различных технических задач, включая тестирование, маршрутизацию, и в качестве стабильных endpoint'ов.

## Обзор

Dummy интерфейсы используются для:

- **Тестирование**: Симуляция интерфейсов без физического оборудования
- **Stable endpoint**: Всегда доступный IP для routing protocols
- **Router ID**: Стабильный идентификатор для OSPF/BGP (альтернатива loopback)
- **Blackhole routing**: Отбрасывание трафика через dummy
- **Source address**: Стабильный source IP для исходящих соединений
- **Development**: Разработка и отладка сетевых конфигураций

### Dummy vs Loopback

| Характеристика | Dummy | Loopback |
|----------------|-------|----------|
| Состояние | Всегда up | Всегда up |
| Использование | Тестирование, routing, blackhole | Router ID, management |
| Количество | Множественные (dum0, dum1, ...) | Один (lo) |
| Стандартизация | Linux-специфичный | Универсальный (RFC 1122) |
| Рекомендация | Для временных задач | Для production router ID |

**Когда использовать Dummy**:
- Тестирование конфигураций
- Временные endpoint'ы
- Blackhole routing
- Множественные виртуальные интерфейсы

**Когда использовать Loopback**:
- Router ID для OSPF/BGP
- Management address
- Production stable endpoint

## Базовая конфигурация

### Создание Dummy интерфейса

```bash
# Создание dummy интерфейса с IP адресом
set interfaces dummy dum0 address 192.168.255.1/32

commit
save
```

### Множественные Dummy интерфейсы

```bash
# Первый dummy
set interfaces dummy dum0 address 192.168.255.1/32

# Второй dummy
set interfaces dummy dum1 address 192.168.255.2/32

# Третий dummy с описанием
set interfaces dummy dum2 address 192.168.255.3/32
set interfaces dummy dum2 description 'Test interface for BGP'

commit
save
```

### Множественные IP адреса на Dummy

```bash
# Dummy с несколькими адресами
set interfaces dummy dum0 address 192.168.255.1/32
set interfaces dummy dum0 address 10.255.255.1/32
set interfaces dummy dum0 address 172.16.255.1/32

commit
save
```

### IPv6 на Dummy

```bash
# IPv4 + IPv6
set interfaces dummy dum0 address 192.168.255.1/32
set interfaces dummy dum0 address 2001:db8::1/128

commit
save
```

## Расширенная конфигурация

### Dummy для Router ID (OSPF/BGP)

```bash
# Dummy интерфейс для Router ID
set interfaces dummy dum0 address 10.255.255.1/32
set interfaces dummy dum0 description 'Router ID for OSPF/BGP'

# OSPF использует этот адрес как Router ID
set protocols ospf parameters router-id 10.255.255.1
set protocols ospf area 0 network 10.255.255.1/32

# BGP также использует
set protocols bgp local-as 65000
set protocols bgp parameters router-id 10.255.255.1

# Анонсировать в OSPF (опционально)
set protocols ospf area 0 network 10.255.255.1/32

commit
save
```

### Blackhole routing с Dummy

Dummy интерфейсы можно использовать для blackhole routing - отбрасывания нежелательного трафика.

```bash
# Создание dummy для blackhole
set interfaces dummy dum0 address 192.0.2.1/32
set interfaces dummy dum0 description 'Blackhole interface'

# Маршруты к dummy (трафик будет отброшен)
set protocols static route 10.0.0.0/8 interface dum0
set protocols static route 172.16.0.0/12 interface dum0
set protocols static route 192.168.0.0/16 interface dum0

commit
save
```

Теперь весь трафик к этим подсетям будет отброшен (полезно для защиты от DDoS или маршрутизации bogon prefixes).

### Source address для исходящих соединений

```bash
# Dummy для stable source address
set interfaces dummy dum0 address 203.0.113.100/32
set interfaces dummy dum0 description 'Stable source for outgoing connections'

# BGP использует dummy как source
set protocols bgp neighbor 198.51.100.1 remote-as 65001
set protocols bgp neighbor 198.51.100.1 update-source dum0

# Статический маршрут для достижимости dummy адреса
set protocols ospf area 0 network 203.0.113.100/32

commit
save
```

### Dummy для тестирования NAT

```bash
# Dummy имитирует внутреннюю сеть
set interfaces dummy dum0 address 192.168.10.1/24
set interfaces dummy dum0 description 'Test internal network'

# NAT для dummy интерфейса
set nat source rule 100 outbound-interface name eth0
set nat source rule 100 source address 192.168.10.0/24
set nat source rule 100 translation address masquerade

commit
save
```

### Dummy для policy-based routing

```bash
# Dummy для PBR тестирования
set interfaces dummy dum0 address 192.168.100.1/24

# Policy route для трафика к dummy
set policy route TEST-ROUTE rule 10 destination address 192.168.100.0/24
set policy route TEST-ROUTE rule 10 set table 100

# Применение к интерфейсу
set interfaces ethernet eth1 policy route TEST-ROUTE

commit
save
```

## Примеры конфигураций

### Пример 1: Router ID для OSPF/BGP

```bash
# Dummy интерфейс для stable Router ID
set interfaces dummy dum0 address 10.255.255.1/32
set interfaces dummy dum0 description 'Router ID'

# OSPF конфигурация
set protocols ospf parameters router-id 10.255.255.1
set protocols ospf area 0 network 10.0.0.0/24
set protocols ospf area 0 network 10.255.255.1/32

# BGP конфигурация
set protocols bgp local-as 65000
set protocols bgp parameters router-id 10.255.255.1
set protocols bgp neighbor 10.0.0.2 remote-as 65001
set protocols bgp neighbor 10.0.0.2 update-source dum0

commit
save
```

### Пример 2: Blackhole routing для bogon prefixes

```bash
# Dummy для blackhole
set interfaces dummy dum0 address 192.0.2.1/32
set interfaces dummy dum0 description 'Blackhole for bogon prefixes'

# RFC 1918 private addresses (если они не должны routing'иться в интернет)
set protocols static route 10.0.0.0/8 blackhole distance 254
set protocols static route 172.16.0.0/12 blackhole distance 254
set protocols static route 192.168.0.0/16 blackhole distance 254

# Другие bogon prefixes
set protocols static route 0.0.0.0/8 blackhole distance 254
set protocols static route 127.0.0.0/8 blackhole distance 254
set protocols static route 169.254.0.0/16 blackhole distance 254
set protocols static route 224.0.0.0/4 blackhole distance 254
set protocols static route 240.0.0.0/4 blackhole distance 254

commit
save
```

**Примечание**: `blackhole` более эффективен чем маршрут через dummy, но dummy может использоваться для специфичных случаев.

### Пример 3: Тестовая среда с множественными Dummy

```bash
# Имитация множественных сетей для тестирования
set interfaces dummy dum0 address 192.168.10.1/24
set interfaces dummy dum0 description 'Test network VLAN 10'

set interfaces dummy dum1 address 192.168.20.1/24
set interfaces dummy dum1 description 'Test network VLAN 20'

set interfaces dummy dum2 address 192.168.30.1/24
set interfaces dummy dum2 description 'Test network VLAN 30'

# OSPF анонсирует все тестовые сети
set protocols ospf area 0 network 192.168.10.0/24
set protocols ospf area 0 network 192.168.20.0/24
set protocols ospf area 0 network 192.168.30.0/24

commit
save
```

### Пример 4: Stable source для BGP peering

```bash
# Dummy для BGP peering
set interfaces dummy dum0 address 10.255.0.1/32
set interfaces dummy dum0 description 'BGP peering endpoint'

# Анонсировать dummy в IGP (OSPF)
set protocols ospf area 0 network 10.255.0.1/32

# BGP neighbors используют dummy как update-source
set protocols bgp local-as 65000
set protocols bgp parameters router-id 10.255.0.1

set protocols bgp neighbor 10.255.0.2 remote-as 65000
set protocols bgp neighbor 10.255.0.2 update-source dum0

set protocols bgp neighbor 10.255.0.3 remote-as 65000
set protocols bgp neighbor 10.255.0.3 update-source dum0

commit
save
```

Теперь BGP peering использует стабильный IP, который не зависит от состояния физических интерфейсов.

### Пример 5: Dummy для VRF тестирования

```bash
# VRF с dummy интерфейсом
set vrf name TEST-VRF table 100

# Dummy в VRF
set interfaces dummy dum0 vrf TEST-VRF
set interfaces dummy dum0 address 192.168.100.1/24
set interfaces dummy dum0 description 'Test interface in VRF'

# Статический маршрут в VRF
set protocols vrf TEST-VRF static route 192.168.200.0/24 next-hop 192.168.100.254

commit
save
```

### Пример 6: Anycast address на Dummy

```bash
# Anycast адрес для сервиса (например, DNS)
set interfaces dummy dum0 address 10.10.10.10/32
set interfaces dummy dum0 description 'Anycast DNS service'

# Анонсировать в OSPF
set protocols ospf area 0 network 10.10.10.10/32

# Или в BGP
set protocols bgp address-family ipv4-unicast network 10.10.10.10/32

commit
save
```

Теперь все роутеры с одинаковой конфигурацией анонсируют 10.10.10.10, и клиенты будут направлены к ближайшему роутеру.

## Мониторинг и диагностика

### Просмотр Dummy интерфейсов

```bash
# Показать все dummy интерфейсы
show interfaces dummy

# Детальная информация
show interfaces dummy dum0

# Статистика (обычно нулевая для dummy)
show interfaces dummy dum0 statistics
```

### Проверка состояния

```bash
# Dummy должен быть всегда up
show interfaces dummy dum0

# Вывод:
# dum0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500
#     inet 192.168.255.1/32
```

### Проверка маршрутизации

```bash
# Проверка, что dummy адрес в таблице маршрутизации
show ip route

# Ping dummy адреса (с самого роутера)
ping 192.168.255.1

# Traceroute (для проверки routing)
traceroute 192.168.255.1
```

### Проверка в routing protocols

```bash
# OSPF - dummy в базе данных
show ip ospf database

# BGP - dummy анонсируется
show ip bgp
show ip bgp 192.168.255.1/32

# Neighbors используют dummy
show ip bgp neighbors
```

### Логирование

```bash
# Логи интерфейсов
show log | match dum0

# Kernel messages
dmesg | grep dum
```

## Устранение неполадок

### Проблема: Dummy интерфейс не создается

**Диагностика**:

```bash
# Проверка конфигурации
show configuration interfaces dummy

# Проверка состояния
show interfaces dummy
```

**Решение**:

```bash
# Убедиться, что конфигурация применена
commit
save

# Проверить kernel module (обычно загружен по умолчанию)
lsmod | grep dummy

# Если нет - загрузить (обычно не требуется)
sudo modprobe dummy
```

### Проблема: Dummy адрес недоступен с других устройств

**Причина**: Dummy адрес не анонсируется в routing protocol.

**Решение**:

```bash
# Добавить dummy в OSPF
set protocols ospf area 0 network 192.168.255.1/32

# Или в BGP
set protocols bgp address-family ipv4-unicast network 192.168.255.1/32

# Или статический маршрут на других роутерах
set protocols static route 192.168.255.1/32 next-hop 10.0.0.1

commit
save
```

### Проблема: BGP neighbors не используют dummy как source

**Диагностика**:

```bash
# Проверка BGP соседей
show ip bgp neighbors

# Проверка source address в конфигурации
show configuration protocols bgp neighbor
```

**Решение**:

```bash
# Явно указать update-source
set protocols bgp neighbor 10.0.0.2 update-source dum0

# Убедиться, что dummy адрес достижим через IGP
set protocols ospf area 0 network 192.168.255.1/32

commit
save
```

### Проблема: Blackhole routing не работает

**Диагностика**:

```bash
# Проверка маршрутов
show ip route 10.0.0.0/8

# Traceroute для проверки
traceroute 10.1.1.1
```

**Решение**:

Используйте `blackhole` вместо dummy для эффективного отбрасывания:

```bash
# Вместо:
# set protocols static route 10.0.0.0/8 interface dum0

# Используйте:
set protocols static route 10.0.0.0/8 blackhole distance 254

commit
save
```

### Проблема: Dummy в VRF не работает

**Диагностика**:

```bash
# Проверка VRF
show vrf TEST-VRF

# Проверка интерфейса в VRF
show interfaces dummy dum0
```

**Решение**:

```bash
# Убедиться, что dummy привязан к VRF
set interfaces dummy dum0 vrf TEST-VRF

# Проверить routing в VRF
show ip route vrf TEST-VRF

commit
save
```

## Лучшие практики

### 1. Используйте Loopback для production Router ID

Для production router ID предпочтительнее loopback:

```bash
# Лучше:
set interfaces loopback lo address 10.255.255.1/32
set protocols ospf parameters router-id 10.255.255.1

# Чем:
set interfaces dummy dum0 address 10.255.255.1/32
set protocols ospf parameters router-id 10.255.255.1
```

### 2. Dummy для временных/тестовых задач

Используйте dummy для тестирования и временных конфигураций:

```bash
set interfaces dummy dum0 address 192.168.100.1/24
set interfaces dummy dum0 description 'TEST - Remove after testing'
```

### 3. Описывайте назначение

Всегда добавляйте description:

```bash
set interfaces dummy dum0 description 'BGP peering endpoint'
set interfaces dummy dum1 description 'Test network simulation'
```

### 4. Используйте /32 для endpoint адресов

Для Router ID и stable endpoints используйте /32:

```bash
set interfaces dummy dum0 address 10.255.0.1/32
```

### 5. Blackhole через blackhole keyword

Для blackhole routing используйте встроенный blackhole:

```bash
# Предпочтительно:
set protocols static route 10.0.0.0/8 blackhole distance 254

# Вместо:
set protocols static route 10.0.0.0/8 interface dum0
```

### 6. Документируйте тестовые dummy

Документируйте все dummy интерфейсы:

```bash
# /config/dummy-interfaces.txt
# dum0: BGP peering endpoint (10.255.0.1/32)
# dum1: Test VLAN 10 simulation (192.168.10.1/24)
# dum2: Anycast DNS service (10.10.10.10/32)
```

### 7. Удаляйте неиспользуемые dummy

Очищайте конфигурацию от старых dummy:

```bash
# Удаление неиспользуемого dummy
delete interfaces dummy dum5
commit
save
```

### 8. Используйте consistent naming

Используйте последовательную схему именования:

```bash
# dum0 - Router ID / BGP endpoint
# dum1-dum9 - Test networks
# dum10+ - Special purposes
```

### 9. Мониторинг dummy использования

Отслеживайте, какие dummy используются:

```bash
show interfaces dummy
show configuration interfaces dummy
```

### 10. Безопасность

Для dummy с реальными IP не забывайте firewall:

```bash
set firewall ipv4 name LOCAL_IN rule 100 action accept
set firewall ipv4 name LOCAL_IN rule 100 destination address 192.168.255.1
set firewall ipv4 name LOCAL_IN rule 100 protocol tcp
set firewall ipv4 name LOCAL_IN rule 100 destination port 179  # BGP
```

## Полезные команды

```bash
# Показать все dummy интерфейсы
show interfaces dummy

# Детали конкретного dummy
show interfaces dummy dum0

# Конфигурация
show configuration interfaces dummy

# Создать dummy
set interfaces dummy dum0 address 192.168.255.1/32

# Добавить описание
set interfaces dummy dum0 description 'My description'

# Удалить dummy
delete interfaces dummy dum0

# Проверка состояния
show interfaces dummy dum0

# Ping dummy адреса
ping 192.168.255.1

# Проверка в routing table
show ip route 192.168.255.1

# OSPF database
show ip ospf database | match 192.168.255.1

# BGP routes
show ip bgp 192.168.255.1/32

# Kernel interface details
ip addr show dum0

# Логи
show log | match dum
```

## Примеры использования в реальных сценариях

### Anycast DNS с Dummy

Несколько роутеров анонсируют одинаковый IP для DNS сервиса:

**Роутер 1**:
```bash
set interfaces dummy dum0 address 10.10.10.10/32
set protocols ospf area 0 network 10.10.10.10/32

# DNS сервер слушает на этом IP
# (настроить DNS сервер отдельно)
```

**Роутер 2** (идентичная конфигурация):
```bash
set interfaces dummy dum0 address 10.10.10.10/32
set protocols ospf area 0 network 10.10.10.10/32
```

Клиенты направляются к ближайшему роутеру через OSPF metric.

### Тестирование firewall rules

```bash
# Dummy имитирует защищаемую сеть
set interfaces dummy dum0 address 192.168.50.1/24
set interfaces dummy dum0 description 'Firewall test network'

# Firewall rules для dummy
set firewall ipv4 name DUMMY_IN default-action drop
set firewall ipv4 name DUMMY_IN rule 10 action accept
set firewall ipv4 name DUMMY_IN rule 10 state established
set firewall ipv4 name DUMMY_IN rule 10 state related

set interfaces dummy dum0 firewall in name DUMMY_IN

# Тестирование с другого интерфейса
# ping 192.168.50.1
```

### Development и debugging

```bash
# Множественные dummy для development
set interfaces dummy dum0 address 172.16.0.1/24
set interfaces dummy dum0 description 'Dev: Frontend network'

set interfaces dummy dum1 address 172.16.1.1/24
set interfaces dummy dum1 description 'Dev: Backend network'

set interfaces dummy dum2 address 172.16.2.1/24
set interfaces dummy dum2 description 'Dev: Database network'

# Теперь можно тестировать routing между "сетями"
set protocols static route 172.16.1.0/24 next-hop 172.16.0.254
```

## Заключение

Dummy интерфейсы в VyOS - это универсальный инструмент для различных задач от тестирования до production routing. Они предоставляют стабильные, всегда доступные интерфейсы без привязки к физическому оборудованию.

Основные преимущества Dummy интерфейсов:
- Всегда в состоянии "up"
- Не требуют физического оборудования
- Гибкость в использовании (Router ID, BGP endpoint, blackhole, testing)
- Простота настройки
- Поддержка VRF

Рекомендации:
- Используйте Loopback для production Router ID
- Dummy для тестирования и специальных задач
- Всегда добавляйте description
- Документируйте назначение каждого dummy
- Удаляйте неиспользуемые dummy
- Используйте /32 для endpoint адресов
- Предпочитайте blackhole keyword для blackhole routing

Dummy интерфейсы - это мощный инструмент в арсенале сетевого инженера, обеспечивающий гибкость и надежность в различных сценариях от development до production environments.

