Просмотр Исходного

{code}
configure terminal

{# cgn предположительно есть только на asr #}
!!! включаем режим провайдерского нат с изменением src портов абонов
!!! также этот нат будет сам раскидывать абонов между реальными ip
!!! раскидывает последовательно, поэтому первые абоны будут иметь общий адрес, это нормально
ip nat settings mode cgn

!!! это по идее и так должно выключиться при включении cgn, но так более явно
no ip nat settings support mapping outside


{# bind-only требуется ios 15.3 и выше для этой команды #}
{# ip nat log translations flow-export v9 предположительно есть только на asr #}

!!! включаем возможность отправлять назначенные nat адреса и порты по nf9(7200 может загнуться)
@@@ if nat_netflow == '1'
ip nat log translations flow-export v9 udp destination {{billing_ip}} 9996 source {{to_billing_int}} bind-only
@@@ else
!!! старые cisco умеют только через syslog отправлять nat
logging on
logging host {{billing_ip}}
ip nat log translations syslog bind-only
!!! циску порвет без bind-only ios 15.3 ip nat log translations syslog
no logging console
@@@ endif

!!! выставляем таймауты для нат сессий для защиты от торрент и сканов, все настройки с боевых cisco и менять не рекомендуется
ip nat translation timeout 300
ip nat translation tcp-timeout 12000
ip nat translation pptp-timeout 12000
ip nat translation udp-timeout 60
ip nat translation syn-timeout 10
ip nat translation dns-timeout 10
ip nat translation icmp-timeout 10
ip nat translation port-timeout tcp 80 180
ip nat translation port-timeout tcp 8080 180
ip nat translation port-timeout tcp 1600 180
ip nat translation port-timeout tcp 110 180
ip nat translation port-timeout tcp 25 180
ip nat translation finrst-timeout 10

!!! максимальное колво нат сессий, на мощных cisco это можно увеличить
ip nat translation max-entries 500000

!!! максимальное колво сессий на одного абонента, чтоб он не занял все сессии ната
!!! all-host требуется ios 15.3 и выше для этой команды
ip nat translation max-entries all-host 500


!!! цикл создания белых адресов КОТОРЫМИ будем натить абонентов
@@@ for policy in nat_policy

!!! создаем acl список серых адресов, тех КОГО будем натить
!!! по дефлту схемы это все серые сети

no ip access-list extended ACL_NAT_{{policy.name}}
ip access-list extended ACL_NAT_{{policy.name}}
@@@ for net in local_net
no deny ip any {{net}}
deny ip any {{net}}
@@@ endfor
@@@ for net in policy.abon_pool or gray_net
no permit ip {{net}} any
permit ip {{net}} any
@@@ endfor

!!! очистим все трансляции иначе не даст пересоздать pool
do clear ip nat translation forced

!!! создаем pool адресов которыми будем натить
no ip nat pool NAT_POOL_{{policy.name}} netmask {{policy.mask}}
ip nat pool NAT_POOL_{{policy.name}} netmask {{policy.mask}}
@@@ for range in policy.nat_range
address {{range.replace("-", " ")}}
@@@ endfor

!!! говорим что натить эти серые acl этими nat pool ами
no ip nat inside source list ACL_NAT_{{policy.name}} pool NAT_POOL_{{policy.name}} vrf {{vrf}} overload
ip nat inside source list ACL_NAT_{{policy.name}} pool NAT_POOL_{{policy.name}} vrf {{vrf}} overload
@@@ endfor
!
!
@@@ for int_outside in uplink_ints
int {{int_outside}}
ip nat outside
@@@ endfor
!
do clear ip nat translation forced

end
exit
{code}