ARC60808-2018-2

De MediaWiki do Campus São José
Revisão de 08h50min de 5 de setembro de 2018 por Odilson (discussão | contribs)
Ir para navegação Ir para pesquisar

Interfaces de rede, rotas estáticas, análise de tráfego e NAT

Capítulo 12.

Interface de rede é qualquer dispositivo (físico ou lógico) capaz de transmitir e receber datagramas IP. Interfaces de rede ethernet são o exemplo mais comum, mas há também interfaces PPP (seriais), interfaces tipo túnel e interfaces loopback. De forma geral, essas interfaces podem ser configuradas com um endereço IP e uma máscara de rede, e serem ativadas ou desabilitadas. Em sistemas operacionais Unix a configuração de interfaces de rede se faz com o programa ifconfig:

Para mostrar todas as interfaces:

root@gerencia:~> ifconfig -a
dsl0      Link encap:Point-to-Point Protocol
          inet addr:189.30.70.200  P-t-P:200.138.242.254  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:34260226 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37195398 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:19484812547 (18582.1 Mb)  TX bytes:10848608575 (10346.0 Mb)

eth1      Link encap:Ethernet  HWaddr 00:19:D1:7D:C9:A9
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:37283974 errors:0 dropped:0 overruns:0 frame:0
          TX packets:42055625 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:20939614658 (19969.5 Mb)  TX bytes:18284980569 (17437.9 Mb)
          Interrupt:16 Base address:0xc000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:273050 errors:0 dropped:0 overruns:0 frame:0
          TX packets:273050 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:21564572 (20.5 Mb)  TX bytes:21564572 (20.5 Mb)

Para configurar uma interface de rede (que fica dinamicamente ativada), em dois formatos com o mesmo efeito:

root@gerencia:~> ifconfig eth1 192.168.1.100 netmask 255.255.255.0
root@gerencia:~> ifconfig eth1 192.168.1.100/24

Para desativar uma interface:

root@gerencia:~> ifconfig eth1 down

Para ativar uma interface:

root@gerencia:~> ifconfig eth1 up

Ao se configurar uma interface de rede, cria-se automaticamente uma rota para entrega direta, baseado na mácara de rede, ou seja, todos os IPs pertencentes a mesma rede pertencerão ao conjunto onde será realizada uma entrega direta. Isto se chama roteamento mínimo. Veja o exemplo abaixo:

root@gerencia:~> ifconfig eth1 192.168.10.0/16
root@gerencia:~> netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth1
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
root@gerencia:~>

Pode-se associar mais de um endereço a uma mesma interface de rede. Isto se chama IP alias:

root@gerencia:~> ifconfig eth1:0 192.168.1.110 netmask 255.255.255.0
root@gerencia:~> ifconfig eth1:1 192.168.1.100 netmask 255.255.255.0
root@gerencia:~> ifconfig -a
eth1      Link encap:Ethernet  HWaddr 00:19:D1:7D:C9:A9
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:37295731 errors:0 dropped:0 overruns:0 frame:0
          TX packets:42068558 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:20942258027 (19972.0 Mb)  TX bytes:18294794452 (17447.2 Mb)
          Interrupt:16 Base address:0xc000

eth1:0    Link encap:Ethernet  HWaddr 00:19:D1:7D:C9:A9
          inet addr:192.168.1.110  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:16 Base address:0xc000

eth1:1    Link encap:Ethernet  HWaddr 00:19:D1:7D:C9:A9
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:16 Base address:0xc000

Configuração no boot

Todo sistema operacional possui alguma forma de configurar suas interfaces de rede, para que sejam automaticamente ativadas no boot com seus endereços IP. Por exemplo, em sistemas Linux Ubuntu (descrito em maiores detalhes em seu manual online).

A configuração de rede se concentra no arquivo /etc/network/interfaces:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo eth1
iface lo inet loopback
        address 127.0.0.1
        netmask 255.0.0.0

# a interface ethernet eth1
iface eth1 inet static
	address 192.168.1.100
	netmask 255.255.255.0
	gateway 192.168.1.254
        dns-nameservers 200.135.37.65

# apelido para eth1
iface eth1:0 inet static
       address 192.168.5.100
       netmask 255.255.255.0

Esses arquivo é lido pelos scripts ifup e ifdown. Esses scripts servem para ativar ou parar interfaces específicas, fazendo todas as operações necessárias para isto:

# Ativa a interface eth1
ifup eth1

# Desativa a interface eth1
ifdown eth1

Para ativar, desativar ou recarregar as configurações de todas as interfaces de rede:

# desativa todas as interfaces de rede
sudo /etc/init.d/networking stop

# ativa todas as interfaces de rede
sudo /etc/init.d/networking start

# recarrega as configurações de todas as interfaces de rede
sudo /etc/init.d/networking restart

Rotas estáticas

Ver capítulo 23 da apostila.

Rotas estáticas podem ser adicionadas a uma tabela de roteamento. Nos sistemas operacionais Unix, usa-se o programa route:

# adiciona uma rota para a rede 10.0.0.0/24 via o gateway 192.168.1.254
route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.254

# adiciona uma rota para a rede 172.18.0.0/16 via a interface PPP pp0
route add -net 172.18.0.0 netmask 255.255.0.0 dev ppp0

# adiciona a rota default via o gateway 192.168.1.254
route add -net default gw 192.168.1.254

# adiciona uma rota para o host 192.168.1.101 via o gateway 192.168.1.253
route add -host 192.168.1.101 gw 192.168.1.253

Para configurar a máquina para repassar pacotes entre as interfaces (rotear) deve-se setar o bit do ip_forward, com o comando:

echo 1 > /proc/sys/net/ipv4/ip_forward

A tabela de rotas pode ser consultada com o programa netstat:

root@gerencia:~> netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.0.0        192.168.1.254   255.255.255.0   U         0 0          0 eth1
192.168.1.101   192.168.1.253   255.255.255.0   UH        0 0          0 eth1
172.18.0.0      0.0.0.0         255.255.0.0     U         0 0          0 ppp0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth1
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
0.0.0.0         192.168.1.254   0.0.0.0         U         0 0          0 eth1

Rotas podem ser removidas também com route:

# remove a rota para 10.0.0.0/24
route del -net 10.0.0.0 netmask 255.255.255.0

# remove a rota para o host 192.168.1.101
route del -host 192.168.1.101

Coleta e análise de tráfego

Uma ferramenta básica de análise de tráfego de rede faz a coleta das PDUs por interfaces de rede, revelando as informações nelas contidas. Dois programas bastante populares para essa finalidade são:

  • tcpdump: um analisador de tráfego em modo texto
    lab01:/data/tmp # tcpdump -i dsl0 -ln tcp port 80
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on dsl0, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
    22:14:37.797702 IP 74.125.47.136.80 > 201.35.226.9.21688: F 3660173220:3660173220(0) ack 4262495618 win 122 <nop,nop,timestamp 403588225 348814601>
    22:14:37.836844 IP 201.35.226.9.21688 > 74.125.47.136.80: . ack 1 win 54 <nop,nop,timestamp 348874613 403588225>
    22:14:38.410477 IP 201.35.226.9.21688 > 74.125.47.136.80: F 1:1(0) ack 1 win 54 <nop,nop,timestamp 348874756 403588225>
    22:14:38.770653 IP 74.125.47.136.80 > 201.35.226.9.21688: . ack 2 win 122 <nop,nop,timestamp 403589203 348874756>
    22:14:39.906734 IP 64.233.163.83.80 > 201.35.226.9.23018: P 534213879:534214123(244) ack 1779175654 win 133 <nop,nop,timestamp 2294865159 348870211>
    
  • wireshark: o equivalente em modo gráfico (porém com muitas outras funcionalidades)

Outros programas úteis (ou ao menos interessantes):

  • iptraf: gera estatísticas de tráfego por interfaces de rede
  • iftop: mostra os fluxos em uma interface de rede
  • nstreams: analisa a saída do tcpdump, e revela os fluxos em uma rede
  • driftnet: analisa o tráfego em uma interface, e captura imagens, videos e audio

NAT

A tradução de endereço de rede (NAT - Network Address Translation), proposta pela RFC 1631 em 1994, é uma função de rede criada para contornar o problema da escassez de endereços IP. Com a explosão no crescimento da Internet, e o mau aproveitamento dos endereços IP (agravado pelo endereçamento hierárquico), percebeu-se que o esgotamento de endereços poderia ser logo alcançado a não ser que algumas medidas fossem tomadas. Esse problema somente seria eliminado com a reformulação do protocolo IP, de forma a aumentar o espaço de endereços, que resultou na proposta do IPv6 em 1998. Porém no início dos anos 1990 a preocupação era mais imediata, e pensou-se em uma solução provisória para possibilitar a expansão da rede porém reduzindo-se a pressão por endereços IP. O NAT surgiu assim como uma técnica com intenção de ser usada temporariamente, enquanto soluções definitivas não se consolidassem. Ainda hoje NAT é usado em larga escala, e somente deve ser deixado de lado quando IPv6 for adotado mundialmente (o que deve demorar).

NAT parte de um princípio simples: endereços IP podem ser compartilhados por nodos em uma rede. Para isto, usam-se endereços IP ditos não roteáveis (também chamados de inválidos) em uma rede, sendo que um ou mais endereços IP roteáveis (válidos) são usados na interface externa roteador que a liga a Internet. Endereços não roteáveis pertencem às subredes 10.0.0.0/8, 192.168.0.0/16 e 172.16.0.0/12, e correspondem a faixas de endereços que não foram alocados a nenhuma organização e, portanto, não constam das tabelas de roteamento dos roteadores na Internet. A figura abaixo mostra uma visão geral de uma rede em que usa NAT:

Nat-exemplo.png

Para ser possível compartilhar um endereço IP, NAT faz mapeamentos (IP origem, port origem, protocolo transporte) -> (IP do NAT, port do NAT, , protocolo transporte), sendo protocolo de transporte TCP ou UDP. Assim, para cada par (IP origem, port origem TCP ou UDP) o NAT deve associar um par (IP do NAT, port do NAT TCP ou UDP) (que evidentemente deve ser único). Assim, por exemplo, se o roteador ou firewall onde ocorre o NAT possui apenas um endeerço IP roteável, ele é capaz em tese de fazer até 65535 mapeamentos para o TCP (essa é a quantidade de ports que ele pode possui), e o mesmo para o UDP. Na prática é um pouco menos, pois se limitam os ports que podem ser usados para o NAT. Note que o NAT definido dessa forma viola a independência entre camadas, uma vez que o roteamento passa a depender de informação da camada de transporte.

NAT no Linux

Ver capítulo 35, seção 4, da apostila.

O NAT no Linux se configura com iptables. As regras devem ser postas na tabela nat, e aplicadas a chain POSTROUTING, como no seguinte exemplo:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE ;Habilita o NAT
iptables -t nat -L ;Lista as atuais regras da tabela NAT

A regra acima faz com que todo o tráfego originado em 192.168.1.0/24, e que sai pela interface eth0 deve ser mascarado com o endereço IP dessa interface. Esta regra diz o seguinte: todos os pacotes que passarem (POSTROUTING) por esta máquina com origem de 192.168.1.0/24 e sairem pela interface eth0 serão mascarados, ou seja sairão desta máquina com o endereço de origem como sendo da eth0. O alvo MASQUERADE foi criado para ser usado com links dinâmicos (tipicamente discados ou ADSL), pois os mapeamentos se perdem se o link sair do ar.

Atividade

A) Configurar interface de rede

  1. Verifique a configuração de sua interface de rede eth0, na sua máquina virtual server. Se necessário corrija-a assim: ip 192.168.1.X, sendo X o número do PC + 100 (exemplo: para o PC 2 X=102), roteador default = 192.168.1.1. Nameserver 191.36.8.2.
    1. Teste a comunicação do seu computador, fazendo ping 192.168.1.1. Tente pingar outras máquinas da rede.
    2. Tente também pingar o IP 191.36.8.2.
    3. Veja a tabela de rotas, usando netstat -rn.
    4. Verifique a rota seguida pelos datagramas enviados, usando traceroute -n 191.36.8.2.
  2. Configure sua máquina virtual para que a informação de rede, configurada manualmente acima, fique permanente. Quer dizer, no próximo boot essa configuração deve ser ativada automaticamente.
  3. Adicione um IP alias a sua interface eth0. Esse novo IP deve ser configurado para 10.0.X.1/24 (X = item anterior).

B) Coleta de tráfego

  1. Faça um ou mais pings para algum(ns) sítios e, com o uso de parâmetros apropriados, faça com que o tcpdump, em momentos distintos:
    • Capture todos os pacotes da rede.
    • Capture somente os pacotes gerados por sua máquina.
    • Capture somente pacotes destinados à sua máquina.
    • Capture pacotes destinados ou originados da máquina 200.135.37.65.
    • Faça com que os pacotes capturados anteriormente sejam salvos num arquivo, chamado “pacotes_capturados.pcap“.

C) Tabelas estáticas de roteamento

Diagrama para construir tabelas de roteamento com maquinas virtuais-rede-2.jpg

  1. Configure sua máquina virtual servidora para rotear pacotes.
  2. Configure a interface de rede de sua máquina virtual cliente para ser seu cliente de rede, conforme Figura.
  3. Montar as tabelas estáticas de roteamento de modo que todas as máquinas tenham acesso entre si (“pingando” ente elas).
  4. Faça testes. Se houver problemas usar tcpdump para monitorar individualmente as interfaces e verificar onde está o problema. Lembre-se que os pacotes devem ter rota de ida e volta, portanto o problema pode ser no seu roteador ou de seu vizinho. Uma boa sequência de testes é:
    1. Pingar entre cliente e roteador.
    2. Do cliente pingar a interface externa do roteador.
    3. Do cliente pingar a máquina do professor. Se funcionar até aqui seu roteador estará corretamente configurado.
    4. Do roteador pingar a interface externa de outro roteador.
    5. Do roteador pingar outro cliente.
    6. Do seu cliente pingar outro cliente.

D) NAT

  1. Desfaça as tabelas de roteamento e configure a máquina servidora para fazer NAT, nos mesmos moldes do item C).
  2. A partir do cliente faça testes “pingando” para redes externas e para as redes dos colegas.
  3. Qual é a diferença de “comportamento” quando comparado ao cenário das tabelas estáticas de roteamento?

Gabarito

Todos os exercícios abaixo considerarão que a interface de rede da máquina é a eth5 e que esta é a máquina M80 ==> 192.168.1.80. Adeque estes dados de acordo com a sua máquina.

A) Configurar interface de rede

  1. Auto explicativo
  2. Auto explicativo
  3. Digite os comandos:
     ifconfig eth5 192.168.1.180/24 ; atribui (configura) o ip a interface de rede eth5
    route add -net default gw 192.168.1.1
    echo nameserver 200.135.37.65 > /etc/resolv.conf
    
  4. vi /etc/network/interfaces
     iface eth5 inet static
    	address 192.168.1.180
    	netmask 255.255.255.0
    	gateway 192.168.1.1
            dns-nameservers 200.135.37.65
    
  5. ifconfig eth5:3 10.0.0.80/24

B) Coleta de tráfego

  1. ping www.polito.it
    • tcpdump -n
    • tcpdump -n src 192.168.1.80
    • tcpdump -n dst 192.168.1.80
    • tcpdump -n host 200.135.37.65
    • tcpdump -n > pacotes_capturados

C) Tabelas estáticas de roteamento

  1. Esta etapa somente no server.
     ifconfig eth5 192.168.1.180/24
    ifconfig eth5:3 10.0.80.1/24
    
  2. Esta etapa somente no server.
     echo 1 > /proc/sys/net/ipv4/ip_forward
    
  3. Esta etapa somente no cliente.
     ifconfig eth5 10.0.80.10/24
     route add -net default gw 10.0.80.1 ; o roteador padrão é o nosso server
    
  4. Esta etapa somente no server.
     route add -net 10.0.1.0/24 gw 192.168.1.101
     route add -net 10.0.2.0/24 gw 192.168.1.102
     route add -net 10.0.3.0/24 gw 192.168.1.103
     route add -net 10.0.4.0/24 gw 192.168.1.104
     ...
    

D) NAT

  1. Esta etapa somente no server.
     route del -net 10.0.1.0/24 gw 192.168.1.101 ; remove as rotas
     route del -net 10.0.2.0/24 gw 192.168.1.102
     route del -net 10.0.3.0/24 gw 192.168.1.103
     route del -net 10.0.4.0/24 gw 192.168.1.104
     ...
     iptables -t nat -A POSTROUTING -s 10.0.80.0/24 -o eth5 -j MASQUERADE ; Habilita o NAT
     Obs.: lembre-se que o '''ip_forward''' deve estar habilitado
    
  2. Esta etapa somente no cliente.
     ping 192.168.1.107 ; O que ocorre? Por quê?
     ping 10.0.7.1 ; O que ocorre? Por quê?
     ping www.feup.up.pt
    
  3. ....