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 проблемы
Убедитесь, что настроены оба правила:
- DNAT для входящего трафика из LAN
- SNAT для обратного трафика
Проверьте routing:
show ip route
Connection tracking переполнен
Проверьте количество соединений:
show conntrack table ipv4 | wc -l
Увеличьте лимит (при необходимости):
set system conntrack table-size 262144
Лучшие практики
- Нумерация правил - используйте промежутки (10, 20, 30) для будущих вставок
- Используйте описания - документируйте назначение каждого правила
- Exclude перед NAT - правила exclude должны иметь меньшие номера
- Тестируйте постепенно - добавляйте правила поэтапно
- Мониторьте статистику - регулярно проверяйте счетчики правил
- Hairpin NAT - настраивайте когда нужен доступ из LAN к публичным IP
- Резервное копирование - сохраняйте конфигурацию перед изменениями
- 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