Cisco CGN NAT + PPTP

Опубликовано 25.01.2015 г. в Networks

Исходная конфигурация

Описание

Ради оптимизации производительности NAT-маршрутизатора на сети транслируется только трафик TCP, UDP и ICMP. TCP и UDP - потому, что позволяют полноценно применять PAT, а ICMP, что бы у абонентов работал ping, traceroute и т.п.. Все вместе данные протоколы почти полностью покрывают все виды абонентского трафика.

Локальные адреса транслируются в пул "белых" адресов. Т.к. основная причина использования NAT на сети оператора связи - экономия "белых" адресов IPv4, то NAT работает в режиме overload, когда множество локальных адресов транслируются в один "белый":

You can conserve addresses in the inside global address pool by allowing a device to use one global address for many local addresses and this type of Network Address Translation (NAT) configuration is called overloading. When overloading is configured, the device maintains enough information from higher-level protocols (for example, TCP or UDP port numbers) to translate the global address back to the correct local address. When multiple local addresses map to one global address, the TCP or UDP port numbers of each inside host distinguish between local addresses.

http://www.cisco.com

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

  1. Под NAT в качестве "белых"" адресов выделена подсеть 5.5.5.0/4.
  2. Абоненты используют локальные адреса из RFC6598 100.64.0.0/10
  3. NAT работает в режиме CGN
    ; Локальные адреса
    ip access-list extended inside-local
     permit tcp 100.64.0.0 0.63.255.255 any
     permit udp 100.64.0.0 0.63.255.255 any
     permit icmp 100.64.0.0 0.63.255.255 any
    
    ; "Белые" адреса
    ip nat pool inside-global 5.5.5.0 0.0.0.255 netmask 255.255.255.0
    
    ; Общие настройки NAT
    ip nat settings mode cgn
    no ip nat settings support mapping outside
    ip nat settings pap
    ip nat translation timeout 480
    ip nat translation tcp-timeout 480
    ip nat translation udp-timeout 60
    ip nat translation dns-timeout 5
    ip nat translation icmp-timeout 5
    ip nat translation max-entries all-host 700
    no ip nat service all-algs
    
    ; Включение NAT
    ip nat inside source list inside-local pool inside-global vrf internet overload
    

Проблема PPTP

В такой конфигурации клиенты с "серыми" адресами не могут установить PPTP-подключение к серверу в Интернет. Причина в том, что PPTP использует одновременно два соединение:

  1. TCP-сессия на порт 1723 для сигнализации (Control Connection Protocol, CCP);

  2. GRE-туннель для инкапсуляции трафика.

При этом просто добавить протокол GRE в ACL недостаточно, т.к. в GRE нет портов и полноценный PAT невозможен. Поэтому каждая трансляция GRE требует занятие одного "белого"" адреса. При этом CCP использует обычный TCP, поэтому транслируется в режиме overload А так TCP-сессия устанавливается раньше GRE-туннеля, то они транслируются в два разных "белых" адреса: сначала TCP с overload, а потом для GRE выделяется отдельный адрес. Естественно из-за использования двух разных source-адресов абонент не может авторизоваться на PPTP-сервере. В Cisco для решения этой проблемы есть функция application layer gateway, но она не работает в режиме CGN.

Проблема больше характерно для провайдерского NAT, так как в корпоративных сетях локальные адреса чаще транслируются не в пул "белых", а в единственный адрес внешнего интерфейса маршрутизатора.

Использование non-overloaded NAT

Что бы PPTP у абонентов заработал, нужно транслировать TCP-сессию и GRE-туннель в один адрес. Т.е. использовать NAT без overload. А что бы экономно использовать "белые" адреса, для остального трафика нужно использовать overload. Для этого мы:

  1. Исключим трафик PPTP из overload NAT.
  2. Создадим ACL для трафика PPTP (TCP/1723 и GRE).
  3. Сконфигурируем отдельный диапазон "белых" адресов и NAT.

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

  1. Под overloaded NAT в качестве "белых"" адресов выделена подсеть 5.5.5.0/24.
  2. Под non-overloaded NAT - 5.5.6.0/23.
  3. Абоненты используют локальные адреса из RFC6598 100.64.0.0/10
  4. NAT работает в режиме CGN
    ; Обычный трафик абонентов без PPTP
    ip access-list extended inside-local
     deny tcp any any eq 1723
     permit tcp 100.64.0.0 0.63.255.255 any
     permit udp 100.64.0.0 0.63.255.255 any
     permit icmp 100.64.0.0 0.63.255.255 any
    
    ; Трафик PPTP
    ip access-list extended inside-local-overload
     permit tcp 100.64.0.0 0.63.255.255 any eq 1723
     permit gre 100.64.0.0 0.63.255.255 any eq
    
    ; "Белые" адреса
    ip nat pool inside-global 5.5.5.0 5.5.5.255 netmask 255.255.255.0
    ip nat pool inside-global-overload 5.5.6.0 0.0.1.255 netmask 255.255.254.0
    
    ; Общие настройки NAT
    ip nat settings mode cgn
    no ip nat settings support mapping outside
    ip nat settings pap
    ip nat translation timeout 480
    ip nat translation tcp-timeout 480
    ip nat translation udp-timeout 60
    ip nat translation dns-timeout 5
    ip nat translation icmp-timeout 5
    ip nat translation max-entries all-host 700
    no ip nat service all-algs
    
    ; Включение NAT
    ip nat inside source list inside-local pool inside-global vrf internet
    overload
    ip nat inside source list inside-local-overload pool
    inside-global-overload vrf internet