[FUG-BR] Source Nat temporário no FreeBSD

Marcelo Gondim gondim em bsdinfo.com.br
Quinta Junho 5 14:44:10 BRT 2014


Em 05/06/14 13:46, Thiago Andrighetti escreveu:
> Bom, já uqe eu vou ter que rebootar de qq jeito então hehehe, por causa
> do kernel que tenho que habilitar o DIVERT, seria melhor então eu
> habilitar o PF  ao invés de usar o natd ?
>
> Só reforçando, que só vou fazer essa regra pra acessar meus radios,
> depois não vou usar mais nat nehum nessa maquina.
Opa Thiago,

Eu uso ipfw + pf sendo que o pf eu uso somente para NAT. Para quem veio 
de Linux eu acho o NAT do pf mais tranquilo de assimilar.
No kernel eu costumo habilitar isso abaixo para ipfw e pf:

options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPFIREWALL_NAT
options         LIBALIAS
options         DUMMYNET
options         IPDIVERT

# Habilitando PF e ALTQ
device pf
device pflog
device pfsync
options         ALTQ
options         ALTQ_CBQ        # Class Bases Queuing (CBQ)
options         ALTQ_RED        # Random Early Detection (RED)
options         ALTQ_RIO        # RED In/Out
options         ALTQ_HFSC       # Hierarchical Packet Scheduler (HFSC)
options         ALTQ_PRIQ       # Priority Queuing (PRIQ)
options         ALTQ_NOPCC      # Required for SMP build

Abaixo uns exemplos de regras no pf.conf da vida:

ext_if = "em0"
int_if = "em1"
table <masq> persist { 192.168.255.0/24, 10.0.0.0/8, 192.168.173.0/24, 
192.168.174.0/24 }
set skip on lo0
set limit states 40000

#### NAT 1:1
binat on $ext_if from 192.168.255.2 to any -> 186.xxx.xxx.13

#### NAT redirecionamento
rdr on $ext_if proto tcp from any to 186.xxx.xxx.14 port 80 -> 
192.168.255.1 port 80

#### NAT N:1
nat on $ext_if from <masq> to any -> 186.xxx.xxx.9

Para testar se tem erro nas regras: pfctl -nf pf.conf
Para carregar as regras: pfctl -f pf.conf
Para mostrar as regras: pfctl -s nat

Bem isso é só para ajudar mas o ideal é você estudar o PF mesmo porque 
tem muito mas muito mais opções.
>
>
> Em 05-06-2014 09:49, jeimerson escreveu:
>>      21/01/01 18:29 - Como usar o NATD no FreeBSD com o ipfw
>>
>>                                                               Denis S. Silva
>> # $FreeBSD: 0.2 2000/01/21 01:33:01 dennix Exp $
>>
>> Como usar o NATD (network address translator) no FreeBSD com o ipfw
>>
>> Breve introducao;
>> Recompilando o kernel;
>> Configuracao:
>>    Servidor;
>>    Estacoes;
>> Testando;
>>
>> Breve introducao;
>>    O NAT funciona como um proxy transparente, tambem conhecido como
>>    IP Masquerading ele ira funcionar como um roteador para uma pequena LAN,
>>    oque significa depois de configurar a sua maquina bsd como gateway,
>>    voce pode (apartir de outras maquinas em sua rede) surfar na Internet
>>    utilizando um IP Valido(** ip valido para a internet**)
>>    Em outras palavras faz com que voce possa acessar a InterNet com uma
>>    unica conexao dedicada e varios micros ligados em LAN (rede local),
>>    atraves de uma conexao PROXY*.
>>
>>    Esse "how-to" eh para a seguinte configuracao
>>    O funcionamento do natd eh parecido com o no Wingate(windows),
>>    Ipchains(linux).
>>    O esquema seria algo proximo de:
>>
>> +------
>> + pc1 + ---
>> +------    |
>> + pc2 + ---
>> +------    |       +-----+     ++++++++++++
>> + pc3 + --- ++++++++ BSD +++++++ Internet +
>> +-----+    |       +-----+     ++++++++++++
>> + pc3 + ---
>> +-----+    |
>> + pc4 + ---
>> +-----+
>>
>>
>> rem> Visao geral da configuracao do BSD:
>> rem> Subistitua o 200.x.x.1/255.255.255.224 pelo seu IP valido e sua
>> rem> Netmask correspondente
>> ed0     - 200.x.x.1 / 255.255.255.224
>> ed1     - 192.168.0.1 / 255.255.255.0
>> gateway - 200.x.x.2
>> dns     - 200.x.x.3
>>
>> pcX:
>> IP      192.168.0.10
>> Netmask 255.255.255.0
>> Gateway 192.168.0.1
>> DNS     200.x.x.3
>>
>> BSD - A maquina FreeBSD
>> pcX - Maquina cliente podendo ser Windows, OS/2, BeOS e/ou qquer outro
>> que suporte TCP/IP
>>
>> Uma explicacao simples sobre a faixa de IP's disponivel para intranet/rede
>> local (IANA) de acordo com a RFC1597
>> No nosso exemplo utilizamos a Classe C (192.168.0.0)
>>
>> Classe De Rede  Netmask       Endereco De Rede
>> A               255.0.0.0     10.0.0.0    - 10.255.255.255
>> B               255.255.0.0   172.16.0.0  - 172.31.255.255
>> C               255.255.255.0 192.168.0.0 - 192.168.255.255
>>
>> Explicacao sobre termos usados no artigo "shell>", "edit>" e "rem>":
>> shell> sua shell (c shell, bash, korn, ...)
>> edit> seu editor de textos preferido (ee, vi, pico, ...)
>> rem> comentarios
>>
>> Recompilando o kernel
>> ---------------------
>>
>> rem> Eh necessario recompilar o kernel adicionando as seguintes opcoes:
>> edit> /usr/src/sys/i386/conf/NATD
>> #
>> # NATD -- FreeBSD/i386
>> # FreeBSD 4.2
>> #
>> # $FreeBSD: src/sys/i386/conf/NATD,v 1.0 2000/01/21 13:16:07 dennix Exp $
>> options         INCLUDE_CONFIG_FILE
>> options         IPDIVERT
>> options         IPFIREWALL              #firewall
>> options         IPFIREWALL_FORWARD      #enable transparent proxy support
>> options         IPFIREWALL_DEFAULT_TO_ACCEPT    #allow everything by default
>> options         TCP_DROP_SYNFIN         #drop TCP packets with SYN+FIN
>> options         TCP_RESTRICT_RST        #restrict emission of TCP RST
>> #options         IPFIREWALL_VERBOSE     #print information about
>> #options         IPFIREWALL_VERBOSE_LIMIT=100   #limit verbosity
>>
>> Configuracao
>> ------------
>>
>> Configuracao do Servidor:
>>
>> edit> /etc/rc.conf
>> natd_enable="YES"
>> natd_interface="ed0"
>> natd_flags="-l -f /etc/natd.conf"
>> gateway_enable="YES"
>> firewall_enable="YES"
>> firewall_type="UNKNOW"
>> firewall_quiet="YES"
>> network_interfaces="ed0 ed1 lo0"
>> ifconfig_ed0="inet 200.x.x.1 media netmask 255.255.255.224"
>> ifconfig_ed1="inet 192.168.0.1 netmask 255.255.255.0"
>> defaultrouter="200.x.x.2"
>> hostname="bsdbox"
>>
>> edit> /etc/natd.conf
>> # qual a placa de rede que tem conexao com a internet
>> interface ed0
>> # para funcionar o ftp/dcc eh necessario as linhas abaixo
>> dynamic yes
>> same_ports yes
>> use_sockets yes
>>
>> edit> /etc/rc.local
>> /sbin/ipfw -f flush
>> /sbin/ipfw add divert natd all from any to any via ed0
>> /sbin/ipfw add pass all from any to any
>>
>> rem> depois de fazer todas essas configuracoes no servidor reboote-o
>>
>> Configuracao das Estacoes clientes:
>> rem> exemplo de configuracao
>> rem> IP: 192.168.0.2
>> rem> Netmask: 255.255.255.0
>> rem> Gateway: 192.168.0.1
>>
>> Testando
>> --------
>> rem> Para testar tente pingar de uma estacao para fora da rede
>> rem> pingado de uma maquina windows
>> C:\WINDOWS\Desktop>ping free.bsd.com.br
>>
>> Disparando contra free.bsd.com.br [200.243.51.4] com 32 bytes de dados:
>>
>> Resposta de 200.243.51.4:bytes=32 tempo=83ms Tempo de vida=249
>> Resposta de 200.243.51.4:bytes=32 tempo=68ms Tempo de vida=249
>> Resposta de 200.243.51.4:bytes=32 tempo=83ms Tempo de vida=249
>> Resposta de 200.243.51.4:bytes=32 tempo=68ms Tempo de vida=249
>>
>> Estat?sticas do Ping para 200.243.51.4:
>>       Pacotes: Enviados = 4, Recebidos = 4, Perdidos = 0 (0% de perda),
>> Tempos aproximados de ida e volta em milissegundos:
>>       M?nimo = 68ms, Máximo =  83ms, Média =  75ms
>>
>> C:\WINDOWS\Desktop>  rem> pingando de uma maquina bsd
>> pupa# ping free.bsd.com.br
>> PING free.bsd.com.br (200.243.51.4): 56 data bytes
>> 64 bytes from 200.243.51.4: icmp_seq=0 ttl=249 time=64.093 ms
>> 64 bytes from 200.243.51.4: icmp_seq=1 ttl=249 time=87.913 ms
>> 64 bytes from 200.243.51.4: icmp_seq=2 ttl=249 time=73.586 ms
>> 64 bytes from 200.243.51.4: icmp_seq=3 ttl=249 time=65.479 ms
>> ^C
>> --- free.bsd.com.br ping statistics ---
>> 4 packets transmitted, 4 packets received, 0% packet loss
>> round-trip min/avg/max/stddev = 64.093/72.768/87.913/9.466 ms
>>
>> rem> se a saida for algo assim ta funcionando
>>
>> ---
>> Paz profunda,
>>                Denis S. Silva
>>
>>      ?
>>
>>      Fonte www.free.bsd.com.br
>>        __________________________________________________________________
>>
>>      De: thiagoapadua em yahoo.com.br
>>      Enviada: Quinta-feira, 5 de Junho de 2014 08:58
>>      Para: freebsd em fug.com.br
>>      Assunto: [FUG-BR] Source Nat temporário no FreeBSD
>>      Só complementando, tenho o IPFW habilitado.
>>      Em 05-06-2014 08:45, Thiago Andrighetti escreveu:
>>      > Olá!
>>      >
>>      > Já adianto que sou novo em FreeBSD, minha experiência vem do Linux
>>      e Mikrotik.
>>      > Coloquei em funcionamento um FreeBSD com Openbgpd para ser meu
>>      roteador de borda, tudo certo e funcionando.
>>      > O que acontece, é que a interface que recebe meu link esta ligada em
>>      um radio, pois o link chega de longe, e esses
>>      > radios foram configurados por outra pessoa, eles só estão com IP,
>>      não tem gateway configurado. Como consequencia
>>      >
>>      > do FreeBsd eu pingo ele, pois tenho um ip na mesma faixa, mas de
>>      outras máquinas que estão antes do FreeBSD não
>>      >
>>      > consigo acessar esses radios.
>>      > No Linux ou Mikrotik eu resolveria fazendo um SNAT de tudo que vai
>>      pro ip do radio mudando a origem do pacote
>>      > para o ip que está na placa do FreeBSD, na verdade era isso que eu
>>      fazia no Mikrotik.
>>      > Mas no FreeBSD fiquei meio perdido ainda nesta parte de NAT, até nem
>>      habilitei nada de natd no rc.conf pois não
>>      > imaginei que iria usar, esqueci desses radios benditos.
>>      >
>>      > Tem alguma regra que eu possa fazer essa mudança de origem de
>>      pacote, pra eu poder acessar esses radios e colocar
>>      > o bendito gateway correto?
>>      >
>>      > Queria ver algo só temporário, pra não ter nat nenhum no router
>>      freebsd.
>>      >
>>      > Desculpem o tamanho da mensagem, e obrigado.
>>      >
>>      >
>>      >



Mais detalhes sobre a lista de discussão freebsd