Необходимые знания:
NAT (Network address translation) - это технология которая позволяет транслировать ip адреса из приватного пула (RFC1918 - 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) в глобально маршрутизируемые адреса и обратно. Строго говоря можно любые адреса транслировать - приватные в приватные, публичные в публичные, это не играет большой роли.
PAT (Port address (?) translation) - это технология которая позволяет менять номера портов. Как правило чистый PAT не используется, его обычно применяют в связке с NAT.
Виды NAT:
Пример настройки:
{primary:node0}[edit security nat static] admin@srx650-master# show rule-set ST-NAT-FROM-UNT { from zone untrust; rule ST-NAT-FROM-UNT-R1-SNOM-VOIP { match { destination-address x.y.z.202/32; } then { static-nat { prefix { 192.168.7.13/32; } } } } rule ST-NAT-FROM-UNT-R2-VOIP { match { destination-address x.y.z.205/32; } then { static-nat { prefix { 192.168.7.11/32; } } } } } rule-set ST-NAT-FROM-MTS-VOIP { from interface reth0.282; rule ST-NAT-FROM-MTS-R1-SNOM-VOIP3 { match { destination-address 10.62.24.2/32; } then { static-nat { prefix { 192.168.7.202/32; } } } } } rule-set ST-NAT-FROM-RT-VOIP { from interface reth0.286; rule ST-NAT-FROM-RT-R1-SNOM-VOIP { match { destination-address 10.62.23.2/32; } then { static-nat { prefix { 192.168.7.13/32; } } } } } rule-set ST-NAT-FROM-TR { from zone trust; rule ST-NAT-FROM-TR-R1-FCIIT { match { source-address xx.yy.zz.12/32; destination-address 10.10.249.3/32; } then { static-nat { prefix { 10.10.249.2/32; } } } } }
Если надо сделать STNAT или DNAT в адрес который не настроен на логическом интерфейсе srx, то надо включать proxy-arp.
{primary:node0}[edit security nat] admin@srx650-master# top show interfaces reth0.264 description VOIP-OUTSIDE; vlan-id 264; family inet { filter { output ACL_VOIP_IN; } address x.y.z.201/29; } --- {primary:node0}[edit security nat] admin@srx650-master# show proxy-arp interface reth0.264 { address { x.y.z.202/32; x.y.z.203/32; x.y.z.205/32; } }
{primary:node0}[edit security nat source] admin@srx650-master# show pool SNAT-POOL-PX { address { x.y.z.227/32; } } ... rule-set PX-TO-UNTRUST { from zone px; to zone untrust; rule SRC-NAT-PX-TO-UNT-R1 { match { source-address xx.yy.zz.18/32; destination-address 0.0.0.0/0; } then { source-nat { pool { SNAT-POOL-PX; } } } } } ---- [edit security nat source] admin@nsk-01-srx2# show rule-set TRUST-TO-UNTRUST { from zone TRUST; to zone UNTRUST; rule SRC-NAT-TR-TO-UNT-R1 { match { source-address-name [ USER-NET SERV-NET ]; destination-address 0.0.0.0/0; } then { source-nat { interface; } } }
{primary:node0}[edit security nat destination] admin@srx650-master# show pool MGMT-SSH-ACCESS { address 192.168.7.9/32 port 22; } rule-set from-untrust { from zone untrust; rule svc-voip3-squid-access { match { source-address z.y.x.5/32; destination-address x.y.z.203/32; destination-port { 43276; } } then { destination-nat { pool { MGMT-SSH-ACCESS; } } } }
При первичном прохождении пакета через Flow-module правила нат срабатывают до первого совпадения в следующем порядке:
Тезисно о првилах:
Когда для SNAT используются пулы адресов нет гарантии, что конкретный внутренний адрес всегда будет выходить с одним и тем же адресов из пула. Т.е., например, к одному и тому же сайту (по tcp/80) можно будет выйти c двух разных ip адресов, это не оч. хорошо.
Что бы этого избежать используется команда “address-persistent”.
admin@nsk-01-srx2# show source address-persistent; rule-set TRUST-TO-UNTRUST { ...
Такой проблемы нет когда SNAT делается в адрес интерфейса.
Прокси arp настраивается для того, что бы сообщить маршрутизатору, что он должен отвечать на широковещательные arp запросы (сосдений маршрутизатор ) для ip адресов которые непосредственно на нем не настроены.
У нас есть интерфейс reth0.265 на котором настроен адрес 1.2.3.225.
{primary:node0}[edit security nat proxy-arp] admin@srx650-master# top show interfaces reth0 unit 265 vlan-id 265; family inet { address 1.2.3.225/29; } {primary:node0}[edit security nat proxy-arp] admin@srx650-master# run show interfaces reth0.265 Logical interface reth0.265 (Index 89) (SNMP ifIndex 669) ... Addresses, Flags: Is-Preferred Is-Primary Destination: 1.2.3.224/29, Local: 1.2.3.225, Broadcast: 1.2.3.231
Через этот интерфейс доступна сеть 1.2.3.224/29, srx будет отвечать на arp запросы для адреса 1.2.3.225 и не будет отвечать на запросы для адресов 1.2.3.[226..230] т.к. это не его адреса.
После того как настроили SNAT или DNAT на, например, адрес 1.2.3.226, srx-су надо сообщить что теперь надо отвечать на arp запросы для этого адреса.
{primary:node0}[edit security nat proxy-arp] admin@srx650-master# show interface reth0.265 { address { 1.2.3.226/32; 1.2.3.227/32; 1.2.3.228/32; } }
При этом в таблице маршрутизации появляется статический роут, остальные адреса все так же доступны через директ роут.
{primary:node0}[edit security nat proxy-arp] admin@srx650-master# run show route 1.2.3.226 inet.0: 451 destinations, 502 routes (451 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 1.2.3.226/32 *[Static/1] 7w0d 20:57:37 Receive {primary:node0}[edit security nat proxy-arp] admin@srx650-master# run show route 1.2.3.229 inet.0: 451 destinations, 502 routes (451 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 1.2.3.224/29 *[Direct/0] 7w0d 20:58:21 > via reth0.265
Если в правила ната или пулы адресов были внесены какие-либо изменения, то все сессии в которых участрует нат при комите будут дропнуты.
~64000 сессий.
PAT отключается командой “port no-translation” на уровне [edit security nat source pool POOL-NAME], при этом есть риск занять все адреса из выделенного пула.
Что бы этого избежать можно сказать srx использовать для SNAT адрес интрефеса при исчерпании пула, делается это так же на уровне [edit security nat source pool POOL-NAME] командой “overflow-pool interface”.
{primary:node0}[edit security nat source] admin@srx650-master# show pool SNAT-POOL-TEST { address { 1.2.3.1/32 to 1.2.3.27/32; } port no-translation; overflow-pool interface; } ... rule-set TRUST-TO-UNTRUST { from zone trust; to zone untrust; rule SRC-NAT-TR-TO-UNT-RULE-TEST { match { source-address 10.30.30.128/25; destination-address 0.0.0.0/0; } then { source-nat { pool { SNAT-POOL-TEST; } } } } }
[edit security nat source] admin@bluebox# show ... pool-utilization-alarm raise-threshold 70 clear-threshold 50; ...
Если использовали 70% пула, srx посылает snmp trap с алармом. Как только упали ниже 50%, srx snmp trap о нормализации ситуации.
Если не задать clear-threshold, то он по дефорлу будте составлять 80% от значения raise-threshold, в данном случае clear-threshold по дефолту будет равняться 56% (70*0.8).
Если в критерии, в качестве источника, мы указали “широкую” сетку, но при этом хотим что бы SNAT работал начиная с определенного внутреннего адреса надо дать команду “host-address-base” и указать с какого адреса начинать.
{primary:node0}[edit security nat source] admin@srx650-master# show pool SNAT-POOL-TEST { address { 1.2.3.1/32 to 1.2.3.27/32; } host-address-base 10.30.30.150/32 } ... rule-set TRUST-TO-UNTRUST { from zone trust; to zone untrust; rule SRC-NAT-TR-TO-UNT-RULE-TEST { match { source-address 10.30.30.128/25; destination-address 0.0.0.0/0; } then { source-nat { pool { SNAT-POOL-TEST; } } } } }