Nat e Firewall No Mikrotik

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 15

Manual:IP/Firewall/NAT

Do MikroTik Wiki
< Manual:IP| Firewall
Aviso: Este manual é movido para https://help.mikrotik.com/docs/display/ROS/Firewall

Conteúdo
◾ 1 Resumo
◾ 1.1 Mascarada
◾ 2 Propriedades
◾ 3 Estatísticas
◾ 4 Comandos específicos do menu
◾ 5 Exemplos básicos
◾ 5.1 Fonte NAT
◾ 5.1.1 Mascarada
◾ 5.1.2 Fonte nat para endereço específico
◾ 5.2 Destino NAT
◾ 5.2.1 Encaminhe todo o tráfego para o host interno
◾ 5.2.2 Mapeamento/encaminhamento de portas
◾ 5.2.3 Encaminhamento da porta para servidor FTP interno
◾ 5.3 1:1 mapeamento
◾ 5.4 NAT de grau portador (CGNAT) ou NAT444

Resumo
Sub-menu: /ip firewall nat

A tradução de endereço de rede é um padrão da Internet que permite que os hosts em redes locais usem
um conjunto de endereços IP para comunicações internas e outro conjunto de endereços IP para
comunicações externas. Uma LAN que usa NAT é referida como rede natted. Para o NAT funcionar, deve
haver um gateway NAT em cada rede natted. O gateway NAT (ROTEador NAT) executa a reescrita de
endereço IP na maneira como um pacote viaja de/para LAN.

Existem dois tipos de NAT:

◾ fonte NAT ou srcnat. Este tipo de NAT é realizado em pacotes originados de uma rede natted.
Um roteador NAT substitui o endereço de origem privada de um pacote IP por um novo endereço
IP público à medida que ele viaja pelo roteador. Uma operação reversa é aplicada aos pacotes de
resposta que viajam na outra direção.
◾ destino NAT ou dstnat. Este tipo de NAT é realizado em pacotes destinados à rede natted. É mais
usado para fazer hosts em uma rede privada para ser acessível da Internet. Um roteador NAT
executando o dstnat substitui o endereço IP de destino de um pacote IP enquanto ele viaja pelo
roteador em direção a uma rede privada.

Os hosts por trás de um roteador habilitado para NAT não têm conectividade verdadeira de ponta a ponta.
Portanto, alguns protocolos de Internet podem não funcionar em cenários com o NAT. Serviços que
requerem o início da conexão TCP de fora da rede privada ou protocolos apátridas, como o UDP, podem
ser interrompidos. Além disso, alguns protocolos são inerentemente incompatíveis com o NAT, um
exemplo ousado é o protocolo AH da suíte IPsec.

Para superar essas limitações, o RouterOS inclui uma série de chamados ajudantes NAT,que permitem a
travessia do NAT para vários protocolos.

Mascarada

Firewall NAT é uma subversão única de , foi projetado para uso específico em situações em que o IP
público pode alterar aleatoriamente, por exemplo, o servidor DHCP altera-lo, ou túnel PPPoE após a
desconexão recebe IP diferente, em suma - quando o IP público é dinâmico.
action=masqueradeaction=srcnat

Toda vez que a interface se desconecta e/ou seu endereço IP mudar, o roteador limpará todas as entradas
de rastreamento de conexão mascaradas que enviam pacotes para fora dessa interface, desta forma
melhorando o tempo de recuperação do sistema após a alteração do endereço ip público.

Infelizmente, isso pode levar a alguns problemas quando é usado em configurações com conexões/links
instáveis que são roteados por diferentes links quando o principal está para baixo. Em tal cenário, seguir
as coisas pode acontecer: action=masquerade

◾ na desconexão, todas as entradas de rastreamento de conexão relacionadas são eliminadas;


◾ próximo pacote de cada conexão expurgada (anteriormente mascarada) entrará em firewall como ,
e, se a interface primária não estiver de volta, o pacote será roteado por uma rota alternativa (se
você tiver alguma) criando assim uma nova conexão;connection-state=new
◾ o link principal volta, o roteamento é restaurado no link principal, de modo que os pacotes que
pertencem às conexões existentes são enviados pela interface primária sem serem mascarados
vazando IPs locais para uma rede pública.

Você pode contornar isso criando a rota do buraco negro como alternativa à rota que pode desaparecer na
desconexão).

Quando é usado, as entradas de rastreamento de conexão permanecem e as conexões podem simplesmente


ser retomadas. action=srcnat

Propriedades
Propriedade Descrição
action (nome de ação; Padrão: Ação a ser tomada se o pacote for combinado com a regra:
aceitar)
◾ accept - aceitar o pacote. O pacote não é passado
para a próxima regra NAT.
◾ add-dst-to-address-list - adicionar endereço
de destino à lista de endereços especificada por
parâmetro address-list
◾ add-src-to-address-list - adicionar endereço
de origem à lista de endereços especificada por
parâmetro address-list
◾ dst-nat - substitui o endereço de destino e/ou porta
de um pacote IP para valores especificados por e
parâmetros to-addressesto-ports
◾ jump - saltar para a cadeia definida pelo usuário
especificada pelo valor do parâmetro jump-target
◾ log - adicionar uma mensagem ao log do sistema
contendo os seguintes dados: in-interface, out-
interface, src-mac, protocol, src-ip:port->dst-ip:porta
e comprimento do pacote. Depois que o pacote é
combinado, ele é passado para a próxima regra na
lista, semelhante como passthrough
◾ masquerade - substitui a porta de origem de um
pacote IP para um especificado por parâmetro e
substitui o endereço de origem de um pacote IP para
IP determinado pela facilidade de roteamento. to-
ports Read more >>
◾ netmap - cria um mapeamento estático 1:1 de um
conjunto de endereços IP para outro. Muitas vezes
usado para distribuir endereços IP públicos para hosts
em redes privadas
◾ passthrough - se o pacote for combinado com a
regra, aumente o contador e vá para a próxima regra
(útil para estatísticas).
◾ redirect - substitui a porta de destino de um pacote
IP para um especificado por parâmetro e endereço de
destino para um dos endereços locais do roteador to-
ports
◾ return - passa o controle de volta para a cadeia de
onde o salto ocorreu
◾ same - dá a um cliente em particular o mesmo
endereço IP de origem/destino a partir do intervalo
fornecido para cada conexão. Isso é mais usado para
serviços que esperam o mesmo endereço do cliente
para múltiplas conexões do mesmo cliente
◾ src-nat - substitui o endereço de origem de um
pacote IP para valores especificados por e parâmetros
to-addressesto-ports

address-list (string; Padrão: ) Nome da lista de endereços a ser usado. Aplicável se a ação
for ou add-dst-to-address-listadd-src-to-address-list
address-list-timeout (nenhuma Intervalo de tempo após o qual o endereço será removido da
dinâmica | sem estática | tempo; Padrão: lista de endereços especificado por parâmetro. Usado em
sem dinâmica) conjunto com ou açõesaddress-listadd-dst-to-address-
listadd-src-to-address-list
◾ O valor de () deixará o endereço na lista de endereços
até a reinicialização none-dynamic00:00:00
◾ O valor de deixará o endereço na lista de endereços
para sempre e será incluído na configuração de
exportação/backup none-static

chain (nome; Padrão: ) Especifica a qual regra de cadeia será adicionada. Se a


entrada não corresponder ao nome de uma cadeia já definida,
uma nova cadeia será criada.
comment (string; Padrão: ) Comentário descritivo para a regra.
connection-bytes (inteiro-inteiro; Corresponde aos pacotes somente se uma determinada
Padrão: ) quantidade de bytes tiver sido transferida através da conexão
específica. 0 - significa infinito, por exemplo, significa que a
regra corresponde se mais de 2MB tiver sido transferido
através da conexão relevante connection-bytes=2000000-0
connection-limit (inteiro,netmaks; Corresponde às conexões por endereço ou bloco de endereço
Padrão: ) após o valor dado ser alcançado.
connection-mark (sem marca | Combina pacotes marcados via instalação de mutilação com
string; Padrão: ) marca de conexão específica. Se nenhuma marca for
definida, a regra corresponderá a qualquer conexão não
marcada.
connection-rate (Inteiro A Taxa de Conexão é um matcher de firewall que permite
0..4294967295; Padrão: ) capturar tráfego com base na velocidade atual da conexão.
Read more>>

connection-type (ftp | h323 | irc | Corresponde a pacotes de conexões relacionadas com base
pptp | quake3 | gole | tftp; Padrão: ) em informações de seus ajudantes de rastreamento de
conexão. Um auxiliar de conexão relevante deve ser
habilitado sob /ip firewall service-port
content (string; Padrão: ) Pacotes de correspondência que contêm texto especificado
dscp (inteiro: 0.63; Padrão: ) Corresponde ao campo de cabeçalho IP DSCP.
dst-address (IP/netmask | Faixa de Corresponde a pacotes que destino é igual a IP especificado
IP; Padrão: ) ou se encaixa no intervalo IP especificado.
dst-address-list (nome; Padrão: ) Corresponde ao endereço de destino de um pacote com a lista
de endereços definida pelo usuário
dst-address-type (unicast | local | Tipo de endereço de destino de correspondência:
transmissão | multicast; Padrão: )
◾ unicast - Endereço IP usado para transmissão
ponto a ponto
◾ local - se o endereço dst for atribuído a uma das
interfaces do roteador
◾ broadcast - pacote é enviado para todos os
dispositivos em sub-rede
◾ multicast - pacote é encaminhado para grupo
definido de dispositivos
dst-limit Corresponde aos pacotes até que um determinado limite de
(inteiro[/tempo],inteiro,dst-address | pps seja excedido. Ao contrário do matcher, cada endereço IP
dst-port | src-address[/time]; Padrão: ) de destino/ porta de destino tem seu próprio limite. Os
parâmetros são escritos no seguinte formato: .
limitcount[/time],burst,mode[/expire]

◾ contagem - taxa média máxima de pacotes medidos


em pacotes por intervalo time
◾ tempo - especifica o intervalo de tempo em que a
taxa do pacote é medida (opcional)
◾ estouro - número de pacotes que não são contados
pela taxa de pacote
◾ modo - o classificador para limitação da taxa de
pacote
◾ expirar - especifica o intervalo após o qual o
endereço /porta ip recorado será excluído (opcional)

dst-port (inteiro[-inteiro]: 0.65535; Lista de números de porta de destino ou faixas numésias da


Padrão: ) porta
fragment (Sim|não; Padrão: ) Combina pacotes fragmentados. O primeiro fragmento (de
partida) não conta. Se o rastreamento de conexão estiver
ativado, não haverá fragmentos, pois o sistema monta
automaticamente cada pacote
hotspot (auth | de cliente | http | Pacotes de correspondências recebidos de clientes hotspot
local-dst | to-client; Padrão: ) contra vários matchers HotSpot.

◾ auth - corresponde a pacotes de clientes hotspot


autenticados
◾ from-client - corresponde a pacotes que estão
vindo do cliente HotSpot
◾ http - corresponde às solicitações HTTP enviadas
ao servidor HotSpot
◾ local-dst - corresponde a pacotes que são
destinados ao servidor HotSpot
◾ to-client - corresponde a pacotes que são
enviados ao cliente HotSpot

icmp-options (inteiro:inteiro; Corresponde ao tipo ICMP:arquivos de código


Padrão: )
in-bridge-port (nome; Padrão: ) Interface real o pacote entrou no roteador, se a interface de
entrada é ponte
in-interface (nome; Padrão: ) Interface o pacote entrou no roteador
ingress-priority (inteiro: 0.63; Corresponde à prioridade de entrada do pacote. A prioridade
Padrão: ) pode ser derivada do bit VLAN, WMM ou MPLS EXP. Read
more>>

ipsec-policy (em | fora, ipsec | Corresponde à política utilizada pelo IpSec. O valor é escrito
nenhum; Padrão: ) no seguinte formato: . A direção é usada para selecionar se
corresponde à política usada para descapsulação ou à política
que será usada para encapsulamento. direction, policy

◾ in - válido nas cadeias PREROUTING, INPUT e


FORWARD
◾ out - válido nas cadeias POSTROUTING, OUTPUT e
FORWARD

◾ ipsec - corresponde se o pacote estiver sujeito ao


processamento do IpSec;
◾ none - pacote de correspondências que não está sujeito
ao processamento do IpSec (por exemplo, pacote de
transporte IpSec).

Por exemplo, se o roteador receber o pacote Gre encapsulado


pelo Ipsec, a regra corresponderá ao pacote Gre, mas a regra
corresponderá ao pacote ESP.ipsec-policy=in,ipsecipsec-
policy=in,none

ipv4-options (qualquer | rota de Corresponde às opções de cabeçalho IPv4.


fonte solta | rota sem registro | sem
roteador-alerta | sem-fonte-roteamento |
◾ any - pacote de correspondência com pelo menos
sem tempo de tempo | nenhum | rota de
uma das opções ipv4
registro | roteador-alerta | estrito-fonte-
roteamento | timestamp; Padrão: ) ◾ loose-source-routing - combinar pacotes com
opção de roteamento de origem solta. Esta opção é
usada para rotear o datagrama da internet com base
em informações fornecidas pela fonte
◾ no-record-route - pacotes de correspondência
sem opção de rota de registro. Esta opção é usada
para rotear o datagrama da internet com base em
informações fornecidas pela fonte
◾ no-router-alert - pacotes de correspondência
sem opção de alteração de roteador
◾ no-source-routing - pacotes de correspondência
sem opção de roteamento de origem
◾ no-timestamp - pacotes de correspondência sem
opção de timestamp
◾ record-route - pacotes de correspondência com
opção de rota de registro
◾ router-alert - pacotes de correspondência com
opção de alter do roteador
◾ strict-source-routing - pacotes de
correspondência com opção de roteamento de origem
estrita
◾ timestamp - pacotes de correspondência com o
timestamp

jump-target (nome; Padrão: ) Nome da cadeia de alvos para saltar. Aplicável apenas se
action=jump

layer7-protocol (nome; Padrão: ) Nome do filtro camada7 definido no menu de protocolo


camada7.
limit (inteiro,tempo,inteiro; Padrão: ) Corresponde aos pacotes até que um determinado limite de
pps seja excedido. Os parâmetros são escritos no seguinte
formato: . count[/time],burst

◾ contagem - taxa média máxima de pacotes medidos


em pacotes por intervalo time
◾ tempo - especifica o intervalo de tempo em que a
taxa do pacote é medida (opcional, 1s serão usados se
não especificado)
◾ estouro - número de pacotes que não são contados
pela taxa de pacote

log-prefix (string; Padrão: ) Adiciona texto especificado no início de cada mensagem de


registro. Aplicável se action=log
nth (inteiro,inteiro; Padrão: ) Combina com cada pacote nth. Read more >>
out-bridge-port (nome; Padrão: ) Interface real o pacote está deixando o roteador, se interface
de saída é ponte
out-interface (; Padrão: ) Interface o pacote está deixando o roteador
packet-mark (sem marca | string; Combina pacotes marcados via instalação de mutilação com
Padrão: ) marca de pacote específica. Se nenhuma marca for definida,
a regra corresponderá a qualquer pacote não marcado.
packet-size (inteiro [-inteiro]:0.. Combina pacotes de tamanho ou tamanho especificados em
65535; Padrão: ) bytes.
per-connection-classifier O matcher PCC permite dividir o tráfego em fluxos iguais
(ValoresTohash:Denominador/Restante; com a capacidade de manter pacotes com opções específicas
Padrão: ) em um determinado fluxo. Read more >>
port (inteiro[-inteiro]: 0.65535; Corresponde se alguma porta (fonte ou destino) corresponder
Padrão: ) à lista especificada de portas ou faixas de porta. Aplicável
somente se for TCP ou UDPprotocol
protocol (iD nome ou protocolo; Corresponde a um protocolo IP específico especificado pelo
Padrão: tcp) nome ou número do protocolo
psd (inteiro,tempo,inteiro,inteiro; Tentativas de detectar tomografias TCP e UDP. Os
Padrão: ) parâmetros estão no seguinte formato WeightThreshold,
DelayThreshold, LowPortWeight, HighPortWeight

◾ WeightThreshold - peso total dos pacotes TCP/UDP


mais recentes com diferentes portas de destino
provenientes do mesmo host a ser tratado como
sequência de varredura de portas
◾ DelayThreshold - atraso para os pacotes com
diferentes portas de destino provenientes do mesmo
host a ser tratado como possível subsequência de
varredura de porta
◾ LowPortWeight - peso dos pacotes com porta de
destino privilegiada (<1024)
◾ HighPortWeight - peso do pacote com porta de
destino não privilegiada

random (integer: 1..99; Default: ) Corresponde a pacotes aleatoriamente com determinada


probabilidade.
routing-mark (string; Padrão: ) Pacotes de correspondência marcados por instalações de
mutilação com marca de roteamento particular
same-not-by-dst (Sim | não; Especifica se deve levar em conta ou não o endereço IP de
Padrão: ) destino ao selecionar um novo endereço IP de origem.
Aplicável se action=same
src-address (Ip/Netmaks, gama ip; Corresponde a pacotes que a fonte é igual a IP especificada
Padrão: ) ou se encaixa no intervalo IP especificado.
src-address-list (nome; Padrão: ) Corresponde ao endereço de origem de um pacote contra a
lista de endereços definida pelo usuário
src-address-type (unicast | local |
transmissão | multicast; Padrão: ) Tipo de endereço de origem das correspondências:

◾ unicast - Endereço IP usado para transmissão


ponto a ponto
◾ local - se o endereço for atribuído a uma das
interfaces do roteador
◾ broadcast - pacote é enviado para todos os
dispositivos em sub-rede
◾ multicast - pacote é encaminhado para grupo
definido de dispositivos

src-port (inteiro[-inteiro]: 0.65535; Lista de portas de origem e faixas de portas de origem.


Padrão: ) Aplicável somente se o protocolo for TCP ou UDP.
src-mac-address (Endereço MAC; Corresponde ao endereço MAC de origem do pacote
Padrão: )
tcp-mss (inteiro[-inteiro]: 0.65535; Corresponde ao valor de MSS TCP de um pacote IP
Padrão: )
time (tempo-tempo,sáb | sex | ba | wed Permite criar filtro com base na hora e data de chegada dos
| ter | mon | sol; Padrão: ) pacotes ou, para pacotes gerados localmente, hora e data de
partida
to-addresses (Endereço IP Substitua o endereço original por um especificado. Aplicável
[endereço IP]; Padrão: 0.0.0.0) se a ação for dst-nat, netmap, mesmo, src-nat
to-ports (inteiro[-inteiro]: 0.65535; Substitua a porta original por uma especificada. Aplicável se
Padrão: ) a ação for dst-nat, redirecionar, mascarar, netmap, mesmo,
src-nat
ttl (integer: 0..255; Default: ) Corresponde ao valor TTL dos pacotes
Estatísticas
/ip firewall nat print stats mostrará propriedades adicionais somente leitura

Propriedade Descrição
bytes (Inteiro) Quantidade total de bytes correspondeda à regra
packets (Inteiro) Quantidade total de pacotes correspondedos à regra

Por impressão padrão é equivalente à impressão estática e mostra apenas regras estáticas.

[admin@dzeltenais_burkaans] /ip firewall mangle> print stats


Flags: X - disabled, I - invalid, D - dynamic
# CHAIN ACTION BYTES PACKETS
0 prerouting mark-routing 17478158 127631
1 prerouting mark-routing 782505 4506

Para imprimir também regras dinâmicas use impressão de todos.

[admin@dzeltenais_burkaans] /ip firewall mangle> print all stats


Flags: X - disabled, I - invalid, D - dynamic
# CHAIN ACTION BYTES PACKETS
0 prerouting mark-routing 17478158 127631
1 prerouting mark-routing 782505 4506
2 D forward change-mss 0 0
3 D forward change-mss 0 0
4 D forward change-mss 0 0
5 D forward change-mss 129372 2031

Ou para imprimir apenas regras dinâmicas use a dinâmica de impressão

[admin@dzeltenais_burkaans] /ip firewall mangle> print stats dynamic


Flags: X - disabled, I - invalid, D - dynamic
# CHAIN ACTION BYTES PACKETS
0 D forward change-mss 0 0
1 D forward change-mss 0 0
2 D forward change-mss 0 0
3 D forward change-mss 132444 2079

Comandos específicos do menu


Propriedade Descrição
reset-counters (Id) Reinicie contadores de estatísticas para regras de firewall
especificadas.
reset-counters-all () Reinicie os contadores de estatísticas para todas as regras de
firewall.
Exemplos básicos
Fonte NAT

Mascarada

Se você quiser "esconder" a LAN privada 192.168.0.0/24 "atrás" de um endereço 10.5.8.109 dado a você
pelo ISP, você deve usar o recurso de tradução de endereço de rede de origem (mascarado) do roteador
MikroTik. O mascarado alterará o endereço IP de origem e a porta dos pacotes originados da rede
192.168.0.0/24 para o endereço 10.5.8.109 do roteador quando o pacote é roteado através dele.

Para usar máscaras, uma regra NAT de origem com 'máscara' de ação deve ser adicionada à configuração
de firewall:

/ip firewall nat add chain=srcnat action=masquerade out-interface=Public

Todas as conexões de saída da rede 192.168.0.0/24 terão endereço de origem 10.5.8.109 do roteador e
porta de origem acima de 1024. Não será possível acessar a Internet nos endereços locais. Se você quiser
permitir conexões com o servidor na rede local, você deve usar a tradução de endereço de rede de destino
(NAT).

Fonte nat para endereço específico

Se você tiver vários endereços IP públicos, o nat de origem pode ser alterado para IP específico, por
exemplo, uma sub-rede local pode ser ocultada atrás do primeiro IP e a segunda sub-rede local é
mascarada atrás do segundo IP.

/ip firewall nat


add chain=srcnat src-address=192.168.1.0/24 action=src-nat to-addresses=1.1.1.1 out-interface=Public
add chain=srcnat src-address=192.168.2.0/24 action=src-nat to-addresses=1.1.1.2 out-interface=Public

Destino NAT

Encaminhe todo o tráfego para o host interno

Se você quiser vincular o endereço IP Público 10.5.8.200 ao site Local one 192.168.0.109, você deve usar
o recurso de tradução de endereço de destino do roteador MikroTik. Além disso, se você quiser permitir
que o servidor local inicie conexões para fora com o IP público dado, você deve usar a tradução de
endereço de origem, também.

Adicionar IP público à interface pública:

/ip address add address=10.5.8.200/32 interface=Public

Adicionar regra que permita o acesso ao servidor interno a partir de redes externas:

/ip firewall nat add chain=dstnat dst-address=10.5.8.200 action=dst-nat \


to-addresses=192.168.0.109
Adicionar regra que permite ao servidor interno initar conexões às redes externas tendo seu endereço de
origem traduzido para 10.5.8.200:

/ip firewall nat add chain=srcnat src-address=192.168.0.109 action=src-nat \


to-addresses=10.5.8.200

Mapeamento/encaminhamento de portas

Se você quiser direcionar pedidos para uma determinada porta para uma máquina interna (às vezes
chamada de abertura de uma porta, mapeamento de porta), você pode fazê-lo assim:

/ip firewall nat add chain=dstnat dst-port=1234 action=dst-nat protocol=tcp to-address=192.168.1.1 to-port=1234

 

Esta regra se traduz em: quando uma conexão de entrada solicitar a porta TCP 1234, use a ação DST-
NAT e redirecione-a para o endereço local 192.168.1.1 e a porta 1234

Encaminhamento da porta para servidor FTP interno

Como você pode ver na ilustração acima FTP usa mais de uma conexão, mas apenas o canal de comando
deve ser encaminhado pelo Destination nat. O canal de dados é considerado como conexão relacionada e
deve ser aceito com a regra "aceitar relacionado" se você tiver firewall rigoroso. Observe que para que as
conexões relacionadas sejam detectadas corretamente, o auxiliar FTP deve ser ativado.

/ip firewall nat


add chain=dstnat dst-address=10.5.8.200 dst-port=21 protocol=tcp action=dst-nat to-addresses=192.168.0.109

/ip firewall filter


add chain=forward connection-state=established,related action=accept

Observe que o FTP ativo pode não funcionar se o cliente estiver por trás do firewall ou do roteador
NATed, porque o canal de dados é iniciado pelo servidor e não pode acessar diretamente o cliente.
Se o cliente estiver por trás do roteador Mikrotik, certifique-se de que o helper FTP esteja ativado

[admin@3C22-atombumba] /ip firewall service-port> print


Flags: X - disabled, I - invalid
# NAME PORTS
0 ftp 21
1 tftp 69
2 irc 6667
3 h323
4 sip 5060
5061
5 pptp

1:1 mapeamento

If you want to link Public IP subnet 11.11.11.0/24 to local one 2.2.2.0/24, you should use destination
address translation and source address translation features with action=netmap.

/ip firewall nat add chain=dstnat dst-address=11.11.11.0/24 \


action=netmap to-addresses=2.2.2.0/24

/ip firewall nat add chain=srcnat src-address=2.2.2.0/24 \


action=netmap to-addresses=11.11.11.0/24

Same can be written using different address notation, that still have to match with the described network

/ip firewall nat add chain=dstnat dst-address=11.11.11.0-11.11.11.255 \


action=netmap to-addresses=2.2.2.0-2.2.2.255

/ip firewall nat add chain=srcnat src-address=2.2.2.0-2.2.2.255 \


action=netmap to-addresses=11.11.11.0-11.11.11.255

Carrier-Grade NAT (CGNAT) or NAT444

To combat IPv4 address exhaustion, new RFC 6598 was deployed. The idea is to use shared 100.64.0.0/10
address space inside carrier's network and performing NAT on carrier's edge router to sigle public IP or
public IP range.
Because of nature of such setup it is also called NAT444, as opposed to a NAT44 network for a 'normal'
NAT environment, three different IPv4 address spaces are involved.

CGNAT configuration on RouterOS does not differ from any other regular source NAT configuration:

/ip firewall nat


add chain=src-nat action=srcnat src-address=100.64.0.0/10 to-address=2.2.2.2 out-interface=<public_if>

Where:

◾ 2.2.2.2 - public IP address,


◾ public_if - interface on providers edge router connected to internet

The advantage of NAT444 is obvious, less public IPv4 addresses used. But this technique comes with
mayor drawbacks:

◾ The service provider router performing CGNAT needs to maintain a state table for all the address
translations: this requires a lot of memory and CPU resources.
◾ Console gaming problems. Some games fail when two subscribers using the same outside public
IPv4 address try to connect to each other.
◾ Tracking of users for legal reasons means extra logging, as multiple households go behind one
public address.
◾ Anything requiring incoming connections is broken. While this already was the case with regular
NAT, end users could usually still set up port forwarding on their NAT router. CGNAT makes this
impossible. This means no web servers can be hosted here, and IP Phones cannot receive incoming
calls by default either.
◾ Some web servers only allow a maximum number of connections from the same public IP address,
as a means to counter DoS attacks like SYN floods. Using CGNAT this limit is reached more often
and some services may be of poor quality.
◾ 6to4 requires globally reachable addresses and will not work in networks that employ addresses
with limited topological span.

More on things that can break can be read in this article [1] (http://chrisgrundemann.com/index.php/2011/
nat444-cgn-lsn-breaks/)

Packets with Shared Address Space source or destination addresses MUST NOT be forwarded across
Service Provider boundaries. Service Providers MUST filter such packets on ingress links. In RouterOS
this can be easily done with firewall filters on edge routers:

/ip firewall filter


add chain=input src-address=100.64.0.0/10 action=drop in-interface=<public_if>
add chain=output dst-address=100.64.0.0/10 action=drop out-interface=<public_if>
add chain=forward src-address=100.64.0.0/10 action=drop in-interface=<public_if>
add chain=forward src-address=100.64.0.0/10 action=drop out-interface=<public_if>
add chain=forward dst-address=100.64.0.0/10 action=drop out-interface=<public_if>

Service providers may be required to do logging of MAPed addresses, in large CGN deployed network
that may be a problem. Fortunately RFC 7422 suggests a way to manage CGN translations in such a way
as to significantly reduce the amount of logging required while providing traceability for abuse response.

RFC states that instead of logging each connection, CGNs could deterministically map customer private
addresses (received on the customer-facing interface of the CGN, a.k.a., internal side) to public addresses
extended with port ranges.

In RouterOS described algorithm can be done with few script functions. Lets take an example:

Inside IP Outside IP/Port range


100.64.1.1 2.2.2.2:2000-2099
100.64.1.2 2.2.2.2:2100-2199
100.64.1.3 2.2.2.2:2200-2299
100.64.1.4 2.2.2.2:2300-2399
100.64.1.5 2.2.2.2:2400-2499
100.64.1.6 2.2.2.2:2500-2599

Instead of writing NAT mappings by hand we could write a function which adds such rules automatically.

:global sqrt do={


:for i from=0 to=$1 do={
:if (i * i > $1) do={ :return ($i - 1) }
}
}

:global addNatRules do={


/ip firewall nat add chain=srcnat action=jump jump-target=xxx \
src-address="$($srcStart)-$($srcStart + $count - 1)"

:local x [$sqrt $count]


:local y $x
:if ($x * $x = $count) do={ :set y ($x + 1) }
:for i from=0 to=$x do={
/ip firewall nat add chain=xxx action=jump jump-target="xxx-$($i)" \
src-address="$($srcStart + ($x * $i))-$($srcStart + ($x * ($i + 1) - 1))"
}

:for i from=0 to=($count - 1) do={


:local prange "$($portStart + ($i * $portsPerAddr))-$($portStart + (($i + 1) * $portsPerAddr) - 1)"
/ip firewall nat add chain="xxx-$($i / $x)" action=src-nat protocol=tcp src-address=($srcStart + $i) \
to-address=$toAddr to-ports=$prange
/ip firewall nat add chain="xxx-$($i / $x)" action=src-nat protocol=udp src-address=($srcStart + $i) \
to-address=$toAddr to-ports=$prange
}
}

After pasting above script in the terminal function "addNatRules" is available. If we take our example, we
need to map 6 shared network addresses to be mapped to 2.2.2.2 and each address uses range of 100 ports
starting from 2000. So we run our function:

$addNatRules count=6 srcStart=100.64.1.1 toAddr=2.2.2.2 portStart=2000 portsPerAddr=100

Now you should be able to get set of rules:


[admin@rack1_b18_450] /ip firewall nat> print
Flags: X - disabled, I - invalid, D - dynamic
0 chain=srcnat action=jump jump-target=xxx src-address=100.64.1.1-100.64.1.6 log=no log-prefix=""

1 chain=xxx action=jump jump-target=xxx-0 src-address=100.64.1.1-100.64.1.2 log=no log-prefix=""

2 chain=xxx action=jump jump-target=xxx-1 src-address=100.64.1.3-100.64.1.4 log=no log-prefix=""

3 chain=xxx action=jump jump-target=xxx-2 src-address=100.64.1.5-100.64.1.6 log=no log-prefix=""

4 chain=xxx-0 action=src-nat to-addresses=2.2.2.2 to-ports=2000-2099 protocol=tcp src-address=100.64.1.1 log=no log-prefix

5 chain=xxx-0 action=src-nat to-addresses=2.2.2.2 to-ports=2000-2099 protocol=udp src-address=100.64.1.1 log=no log-prefix

6 chain=xxx-0 action=src-nat to-addresses=2.2.2.2 to-ports=2100-2199 protocol=tcp src-address=100.64.1.2 log=no log-prefix

7 chain=xxx-0 action=src-nat to-addresses=2.2.2.2 to-ports=2100-2199 protocol=udp src-address=100.64.1.2 log=no log-prefix

8 chain=xxx-1 action=src-nat to-addresses=2.2.2.2 to-ports=2200-2299 protocol=tcp src-address=100.64.1.3 log=no log-prefix

9 chain=xxx-1 action=src-nat to-addresses=2.2.2.2 to-ports=2200-2299 protocol=udp src-address=100.64.1.3 log=no log-prefix

10 chain=xxx-1 action=src-nat to-addresses=2.2.2.2 to-ports=2300-2399 protocol=tcp src-address=100.64.1.4 log=no log-prefix

11 chain=xxx-1 action=src-nat to-addresses=2.2.2.2 to-ports=2300-2399 protocol=udp src-address=100.64.1.4 log=no log-prefix

12 chain=xxx-2 action=src-nat to-addresses=2.2.2.2 to-ports=2400-2499 protocol=tcp src-address=100.64.1.5 log=no log-prefix

13 chain=xxx-2 action=src-nat to-addresses=2.2.2.2 to-ports=2400-2499 protocol=udp src-address=100.64.1.5 log=no log-prefix

14 chain=xxx-2 action=src-nat to-addresses=2.2.2.2 to-ports=2500-2599 protocol=tcp src-address=100.64.1.6 log=no log-prefix

15 chain=xxx-2 action=src-nat to-addresses=2.2.2.2 to-ports=2500-2599 protocol=udp src-address=100.64.1.6 log=no log-prefix

 

[ Top | Back to Content ]

Recuperado de "https://wiki.mikrotik.com/index.php?title=Manual:IP/Firewall/NAT&oldid=34036"

Categories: Manual Firewall

◾ Esta página foi editada pela última vez em 3 de junho de 2020, às 11:02.

Você também pode gostar