NAT (Network Address Translation)

Network Address Translation (NAT) переназначает адресное пространство IP, изменяя информацию о сетевом адресе в заголовках IP пакетов при прохождении через маршрутизатор.

Обзор

NAT позволяет:

  • Сохранять публичные IPv4 адреса
  • Подключать множество устройств к интернету через один публичный IP
  • Скрывать внутреннюю структуру сети
  • Обеспечивать доступ к внутренним сервисам из интернета (port forwarding)

Частные адресные пространства (RFC 1918)

  • 10.0.0.0/8 - 16,777,216 адресов
  • 172.16.0.0/12 - 1,048,576 адресов
  • 192.168.0.0/16 - 65,536 адресов

Типы NAT

Source NAT (SNAT)

Изменение адреса источника пакета. Используется для предоставления доступа внутренним хостам в интернет.

Базовый SNAT с masquerade:

set nat source rule 100 outbound-interface name 'eth0'
set nat source rule 100 source address '192.168.0.0/24'
set nat source rule 100 translation address 'masquerade'

SNAT с конкретным IP:

set nat source rule 100 outbound-interface name 'eth0'
set nat source rule 100 source address '192.168.0.0/24'
set nat source rule 100 translation address '203.0.113.10'

Destination NAT (DNAT)

Изменение адреса назначения пакета. Используется для проброса портов (port forwarding) и доступа к внутренним сервисам извне.

Port forwarding (проброс портов):

set nat destination rule 10 description 'Port Forward: HTTP to Web Server'
set nat destination rule 10 destination port '80'
set nat destination rule 10 inbound-interface name 'eth0'
set nat destination rule 10 protocol 'tcp'
set nat destination rule 10 translation address '192.168.0.100'

Изменение порта при пробросе:

set nat destination rule 20 description 'SSH on custom port 2222 to 192.168.0.10:22'
set nat destination rule 20 destination port '2222'
set nat destination rule 20 inbound-interface name 'eth0'
set nat destination rule 20 protocol 'tcp'
set nat destination rule 20 translation address '192.168.0.10'
set nat destination rule 20 translation port '22'

1:1 NAT (Bidirectional NAT)

Статическое отображение одного публичного IP на один приватный IP в обоих направлениях.

# SNAT
set nat source rule 10 outbound-interface name 'eth0'
set nat source rule 10 source address '192.168.0.100'
set nat source rule 10 translation address '203.0.113.100'

# DNAT
set nat destination rule 10 inbound-interface name 'eth0'
set nat destination rule 10 destination address '203.0.113.100'
set nat destination rule 10 translation address '192.168.0.100'

Структура правил NAT

Source NAT

set nat source rule <number> description '<text>'
set nat source rule <number> outbound-interface name '<interface>'
set nat source rule <number> source address '<address/prefix>'
set nat source rule <number> source port '<port>'
set nat source rule <number> destination address '<address/prefix>'
set nat source rule <number> destination port '<port>'
set nat source rule <number> protocol '<protocol>'
set nat source rule <number> translation address '<address>|masquerade'
set nat source rule <number> translation port '<port>'

Destination NAT

set nat destination rule <number> description '<text>'
set nat destination rule <number> inbound-interface name '<interface>'
set nat destination rule <number> destination address '<address/prefix>'
set nat destination rule <number> destination port '<port>'
set nat destination rule <number> source address '<address/prefix>'
set nat destination rule <number> protocol '<protocol>'
set nat destination rule <number> translation address '<address>'
set nat destination rule <number> translation port '<port>'

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

Masquerade

Автоматически использует IP-адрес исходящего интерфейса:

set nat source rule 100 translation address masquerade

Преимущества:

  • Автоматически адаптируется к изменениям IP интерфейса
  • Идеально для DHCP WAN интерфейсов
  • Не требует указания конкретного IP

Недостатки:

  • Немного медленнее чем статический NAT
  • Все соединения разрываются при изменении IP интерфейса

Exclude NAT

Исключение определенного трафика из NAT:

set nat source rule 10 destination address '192.168.100.0/24'
set nat source rule 10 source address '192.168.0.0/24'
set nat source rule 10 outbound-interface name 'eth0'
set nat source rule 10 exclude

Load Balancing

Распределение нагрузки между несколькими внутренними серверами:

set nat destination rule 10 description 'Load balance HTTP traffic'
set nat destination rule 10 destination port '80'
set nat destination rule 10 inbound-interface name 'eth0'
set nat destination rule 10 protocol 'tcp'
set nat destination rule 10 translation address '192.168.0.10-192.168.0.20'

Port Ranges

Диапазоны портов:

set nat destination rule 10 destination port '8000-8100'
set nat destination rule 10 translation address '192.168.0.100'
set nat destination rule 10 translation port '8000-8100'

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

Базовый NAT для домашней сети

# Source NAT для доступа в интернет
set nat source rule 100 outbound-interface name 'eth0'
set nat source rule 100 source address '192.168.1.0/24'
set nat source rule 100 translation address 'masquerade'

Веб-сервер за NAT

# HTTP
set nat destination rule 10 description 'HTTP to Web Server'
set nat destination rule 10 destination port '80'
set nat destination rule 10 inbound-interface name 'eth0'
set nat destination rule 10 protocol 'tcp'
set nat destination rule 10 translation address '192.168.0.100'

# HTTPS
set nat destination rule 20 description 'HTTPS to Web Server'
set nat destination rule 20 destination port '443'
set nat destination rule 20 inbound-interface name 'eth0'
set nat destination rule 20 protocol 'tcp'
set nat destination rule 20 translation address '192.168.0.100'

SSH на нестандартном порту

set nat destination rule 30 description 'SSH on port 2222'
set nat destination rule 30 destination port '2222'
set nat destination rule 30 inbound-interface name 'eth0'
set nat destination rule 30 protocol 'tcp'
set nat destination rule 30 translation address '192.168.0.10'
set nat destination rule 30 translation port '22'

Множественные публичные IP

# Первая подсеть через первый IP
set nat source rule 100 outbound-interface name 'eth0'
set nat source rule 100 source address '192.168.1.0/24'
set nat source rule 100 translation address '203.0.113.10'

# Вторая подсеть через второй IP
set nat source rule 110 outbound-interface name 'eth0'
set nat source rule 110 source address '192.168.2.0/24'
set nat source rule 110 translation address '203.0.113.11'

DMZ с 1:1 NAT

# SNAT для DMZ хоста
set nat source rule 10 outbound-interface name 'eth0'
set nat source rule 10 source address '192.168.100.10'
set nat source rule 10 translation address '203.0.113.100'

# DNAT для DMZ хоста
set nat destination rule 10 inbound-interface name 'eth0'
set nat destination rule 10 destination address '203.0.113.100'
set nat destination rule 10 translation address '192.168.100.10'

VPN и NAT

Исключение VPN трафика из NAT:

# Exclude VPN traffic
set nat source rule 10 description 'Exclude VPN from NAT'
set nat source rule 10 destination address '10.10.0.0/16'
set nat source rule 10 source address '192.168.0.0/24'
set nat source rule 10 outbound-interface name 'eth0'
set nat source rule 10 exclude

# NAT для остального трафика
set nat source rule 100 outbound-interface name 'eth0'
set nat source rule 100 source address '192.168.0.0/24'
set nat source rule 100 translation address 'masquerade'

Hairpin NAT (NAT Reflection)

Доступ к внутреннему сервису из внутренней сети по публичному IP:

# Обычный DNAT для внешнего доступа
set nat destination rule 10 description 'Web Server from Internet'
set nat destination rule 10 destination port '80'
set nat destination rule 10 inbound-interface name 'eth0'
set nat destination rule 10 protocol 'tcp'
set nat destination rule 10 translation address '192.168.0.100'

# Hairpin NAT для внутреннего доступа
set nat destination rule 11 description 'Web Server from LAN'
set nat destination rule 11 destination address '203.0.113.10'
set nat destination rule 11 destination port '80'
set nat destination rule 11 inbound-interface name 'eth1'
set nat destination rule 11 protocol 'tcp'
set nat destination rule 11 translation address '192.168.0.100'

set nat source rule 11 description 'Hairpin NAT for Web Server'
set nat source rule 11 destination address '192.168.0.100'
set nat source rule 11 destination port '80'
set nat source rule 11 outbound-interface name 'eth1'
set nat source rule 11 protocol 'tcp'
set nat source rule 11 translation address 'masquerade'

NAT64

Трансляция между IPv6 и IPv4. Позволяет IPv6-хостам обращаться к IPv4 ресурсам.

set nat64 source rule 100 source prefix '64:ff9b::/96'
set nat64 source rule 100 translation address '203.0.113.0/24'

NPTv6 (NAT66)

IPv6-to-IPv6 Network Prefix Translation для изменения IPv6 префиксов.

set nat66 source rule 10 outbound-interface name 'eth0'
set nat66 source rule 10 source prefix '2001:db8:1::/48'
set nat66 source rule 10 translation prefix '2001:db8:2::/48'

Операционные команды

Просмотр правил NAT

Source NAT:

show nat source rules
show nat source statistics

Destination NAT:

show nat destination rules
show nat destination statistics

Просмотр трансляций

show nat source translations
show nat destination translations

Таблица соединений

show conntrack table ipv4

Очистка соединений

Все соединения:

reset conntrack

Конкретный адрес:

reset conntrack source 192.168.0.10

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

Трафик не проходит через NAT

Проверьте правила NAT:

show nat source rules
show nat destination rules

Проверьте статистику:

show nat source statistics

Проверьте firewall правила:

show firewall

Port forwarding не работает

Проверьте DNAT правило:

show nat destination rules

Проверьте трансляции:

show nat destination translations

Проверьте firewall для forward цепочки:

show firewall ipv4 forward filter

Убедитесь что IP forwarding включен (по умолчанию включен в VyOS).

Hairpin NAT проблемы

Убедитесь, что настроены оба правила:

  1. DNAT для входящего трафика из LAN
  2. SNAT для обратного трафика

Проверьте routing:

show ip route

Connection tracking переполнен

Проверьте количество соединений:

show conntrack table ipv4 | wc -l

Увеличьте лимит (при необходимости):

set system conntrack table-size 262144

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

  1. Нумерация правил - используйте промежутки (10, 20, 30) для будущих вставок
  2. Используйте описания - документируйте назначение каждого правила
  3. Exclude перед NAT - правила exclude должны иметь меньшие номера
  4. Тестируйте постепенно - добавляйте правила поэтапно
  5. Мониторьте статистику - регулярно проверяйте счетчики правил
  6. Hairpin NAT - настраивайте когда нужен доступ из LAN к публичным IP
  7. Резервное копирование - сохраняйте конфигурацию перед изменениями
  8. Firewall правила - не забывайте о firewall для DNAT трафика

Ограничения и рекомендации

Масштабирование

Рекомендации по количеству хостов на один публичный IP:

  • Оптимально: 1-256 хостов
  • Приемлемо: 256-512 хостов
  • Максимум: ~2000 хостов (при правильной настройке)

Протоколы

NAT хорошо работает с:

  • TCP
  • UDP
  • ICMP

Могут быть проблемы с:

  • FTP (используйте conntrack helper)
  • SIP (используйте conntrack helper)
  • IPsec (используйте NAT-T)
  • GRE (требуется PPTP helper)

Connection tracking

Таймауты по умолчанию:

  • TCP established: 432000s (5 дней)
  • UDP stream: 180s
  • ICMP: 30s

Следующие шаги

  • Firewall - настройка межсетевого экрана
  • VPN - VPN через NAT
  • Policy - политики маршрутизации