Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
espec:configuracao_de_rede_em_unix [2012/03/09 18:54] – [Status da atividade de rede] mazieroespec:configuracao_de_rede_em_unix [2020/08/18 19:14] (atual) – edição externa 127.0.0.1
Linha 1: Linha 1:
 +====== Configuração de rede ======
 +
 +O sistema UNIX usa como protocolo nativo o TCP/IP (esta família de protocolos foi criada para a interconexão de máquinas UNIX). Desta forma, os conceitos de redes TCP/IP são aplicáveis às redes UNIX sem esforço. Neste módulo veremos como ajustar as configurações básicas de rede em uma máquina Linux.
 +
 +===== Interfaces de rede =====
 +
 +Cada máquina possui uma ou mais interfaces de rede, geralmente no padrão //ethernet//, com endereços IP associados que as identificam para o protocolo IP. Além disso, cada interface de rede também possui um endereço físico (MAC) que a identifica na rede local na camada de enlace.
 +
 +A relação das interfaces de rede físicas presentes no sistema (ativas e inativas) pode ser obtida através do comando ''ifconfig -a'':
 +
 +<code>
 +$ ifconfig -a
 +eth0      Link encap:Ethernet  Endereço de HW 84:2b:2b:7a:c2:07  
 +          inet end.: 200.134.10.120  Bcast:200.134.10.255  Masc:255.255.255.0
 +          endereço inet6: fe80::862b:2bff:fe7a:c207/64 Escopo:Link
 +          UP BROADCAST RUNNING MULTICAST  MTU:1500  Métrica:1
 +          pacotes RX:1561589 erros:0 descartados:0 excesso:0 quadro:0
 +          Pacotes TX:726651 erros:0 descartados:0 excesso:0 portadora:0
 +          colisões:0 txqueuelen:1000 
 +          RX bytes:2232242561 (2.2 GB) TX bytes:64919270 (64.9 MB)
 +          IRQ:42 Endereço de E/S:0x4000 
 +
 +lo        Link encap:Loopback Local  
 +          inet end.: 127.0.0.1  Masc:255.0.0.0
 +          endereço inet6: ::1/128 Escopo:Máquina
 +          UP LOOPBACK RUNNING  MTU:16436  Métrica:1
 +          pacotes RX:4950 erros:0 descartados:0 excesso:0 quadro:0
 +          Pacotes TX:4950 erros:0 descartados:0 excesso:0 portadora:0
 +          colisões:0 txqueuelen:
 +          RX bytes:839090 (839.0 KB) TX bytes:839090 (839.0 KB)
 +
 +vboxnet0  Link encap:Ethernet  Endereço de HW 0a:00:27:00:00:00  
 +          BROADCAST MULTICAST  MTU:1500  Métrica:1
 +          pacotes RX:0 erros:0 descartados:0 excesso:0 quadro:0
 +          Pacotes TX:0 erros:0 descartados:0 excesso:0 portadora:0
 +          colisões:0 txqueuelen:1000 
 +          RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
 +
 +virbr0    Link encap:Ethernet  Endereço de HW 82:66:a0:7f:25:48  
 +          inet end.: 192.168.122.1  Bcast:192.168.122.255  Masc:255.255.255.0
 +          endereço inet6: fe80::8066:a0ff:fe7f:2548/64 Escopo:Link
 +          UP BROADCAST RUNNING MULTICAST  MTU:1500  Métrica:1
 +          pacotes RX:0 erros:0 descartados:0 excesso:0 quadro:0
 +          Pacotes TX:725 erros:0 descartados:0 excesso:0 portadora:0
 +          colisões:0 txqueuelen:
 +          RX bytes:0 (0.0 B) TX bytes:101310 (101.3 KB)
 +</code>
 +
 +Informação similar também pode ser ou nas mensagens de inicialização (//boot//) do sistema, visualizadas nos arquivos de log (''/var/log/messages'') ou através do comando ''dmesg''. Eis um trecho das mensagens de inicialização que indicam as interfaces de rede disponíveis em um sistema típico:
 +
 +<code>
 +...
 +Intel(R) PRO/100 Network Driver - version 2.3.38-k1
 +eth0: Intel(R) PRO/100 Network Connection
 +e100: eth0 NIC Link is Up 100 Mbps Half duplex
 +Intel(R) PRO/1000 Network Driver - version 5.2.30.1-k1
 +eth1: Intel(R) PRO/1000 Network Connection
 +e1000: eth1 NIC Link is Up 100 Mbps Full Duplex
 +...
 +</code>
 +
 +As informações sobre as interfaces de rede ativas podem ser visualizadas através do comando ''ifconfig''. Eis um exemplo de saída desse comando:
 +
 +<code>
 +$ ifconfig
 +eth0      Link encap:Ethernet  Endereço de HW 84:2b:2b:7a:c2:07  
 +          inet end.: 200.134.10.120  Bcast:200.134.10.255  Masc:255.255.255.0
 +          endereço inet6: fe80::862b:2bff:fe7a:c207/64 Escopo:Link
 +          UP BROADCAST RUNNING MULTICAST  MTU:1500  Métrica:1
 +          pacotes RX:1561644 erros:0 descartados:0 excesso:0 quadro:0
 +          Pacotes TX:726702 erros:0 descartados:0 excesso:0 portadora:0
 +          colisões:0 txqueuelen:1000 
 +          RX bytes:2232247900 (2.2 GB) TX bytes:64949454 (64.9 MB)
 +          IRQ:42 Endereço de E/S:0x4000 
 +
 +lo        Link encap:Loopback Local  
 +          inet end.: 127.0.0.1  Masc:255.0.0.0
 +          endereço inet6: ::1/128 Escopo:Máquina
 +          UP LOOPBACK RUNNING  MTU:16436  Métrica:1
 +          pacotes RX:4952 erros:0 descartados:0 excesso:0 quadro:0
 +          Pacotes TX:4952 erros:0 descartados:0 excesso:0 portadora:0
 +          colisões:0 txqueuelen:
 +          RX bytes:839287 (839.2 KB) TX bytes:839287 (839.2 KB)
 +
 +virbr0    Link encap:Ethernet  Endereço de HW 82:66:a0:7f:25:48  
 +          inet end.: 192.168.122.1  Bcast:192.168.122.255  Masc:255.255.255.0
 +          endereço inet6: fe80::8066:a0ff:fe7f:2548/64 Escopo:Link
 +          UP BROADCAST RUNNING MULTICAST  MTU:1500  Métrica:1
 +          pacotes RX:0 erros:0 descartados:0 excesso:0 quadro:0
 +          Pacotes TX:728 erros:0 descartados:0 excesso:0 portadora:0
 +          colisões:0 txqueuelen:
 +          RX bytes:0 (0.0 B) TX bytes:101662 (101.6 KB)
 +</code>
 +
 +A interface ''lo'' indica o dispositivo virtual chamado //loopback//, que permite ao host acessar seus próprios serviços TCP/IP. O endereço IP dessa interface é sempre 127.0.0.1, com máscara 255.0.0.0. Por ser um dispositivo virtual, ele não possui endereço físico (MAC). Na maioria dos dispositivos e sistemas essa interface é definida na configuração default do sistema, por isso não é necessário configurá-la.
 +
 +Além de listar as interfaces ativas, o comando ''ifconfig'' pode ser usado para ligar/desligar/configurar uma determinada interface, ou para definir novas interfaces de rede na máquina. A sintaxe básica desse comando é a seguinte:
 +
 +<code>
 +ifconfig <interface> [<ip-address>]
 +                     [netmask <mask>]
 +                     [broadcast <bcast-address>]
 +                     [up|down]
 +</code>
 +
 +Eis alguns exemplos de uso:
 +
 +Para desativar a interface ''eth0'' (primeira interface //ethernet//):
 +
 +<code>
 +$ ifconfig eth0 down
 +</code>
 +
 +Para ativar a interface ''eth0'' com uma configuração pré-definida (default do sistema):
 +
 +<code>
 +$ ifconfig eth0 up
 +</code>
 +
 +Para ativar a interface ''eth0'' com uma configuração específica:
 +
 +<code>
 +$ ifconfig eth0 10.0.0.17 netmask 255.0.0.0 up
 +</code>
 +
 +Para associar um segundo endereço IP (virtual) à interface ''eth0'':
 +
 +<code>
 +$ ifconfig eth0:1 66.193.175.173 netmask 255.255.254.0
 +</code>
 +
 +===== Configuração de rotas =====
 +
 +A tabela de roteamento indica quais as rotas ativas em uma máquina. Ela pode ser obtida através do comando ''route''. Eis uma saída típica desse comando:
 +
 +<code>
 +$ route
 +Tabela de Roteamento IP do Kernel
 +Destino         Roteador        MáscaraGen.    Opções Métrica Ref   Uso Iface
 +200.134.10.0    *               255.255.255.0            0        0 eth0
 +192.168.122.0                 255.255.255.0            0        0 virbr0
 +link-local      *               255.255.0.0         1000          0 eth0
 +default         metcalfe.dainf. 0.0.0.0         UG    0      0        0 eth0
 +
 +$ route -n
 +Tabela de Roteamento IP do Kernel
 +Destino         Roteador        MáscaraGen.    Opções Métrica Ref   Uso Iface
 +200.134.10.0    0.0.0.0         255.255.255.0            0        0 eth0
 +192.168.122.0   0.0.0.0         255.255.255.0            0        0 virbr0
 +169.254.0.0     0.0.0.0         255.255.0.0         1000          0 eth0
 +0.0.0.0         200.134.10.254  0.0.0.0         UG    0      0        0 eth0
 +</code>
 +
 +A tabela acima indica que:
 +
 +  * A rede 200.17.98.0 pode ser acessada através da interface ethernet ''eth0''.
 +  * O //gateway// default é o dispositivo ''router.pucpr.br''
 +
 +O comando ''route'' também é usado para configurar as rotas usadas pelo sistema. Sua sintaxe básica de uso é a seguinte:
 +
 +<code>
 +route [-v] add [-net|-host] Alvo
 +      [netmask Nm]
 +      [gw Gw]
 +      [metric N]
 +      [mss M]
 +      [window W]
 +      [irtt I]
 +      [reject] [mod] [dyn] [reinstate]
 +      [[dev] If]
 +</code>
 +
 +ou
 +
 +<code>
 +route [-v] del [-net|-host] Alvo
 +      [gw Gw]
 +      [netmask Nm]
 +      [metric N]
 +      [[dev] If]
 +</code>
 +
 +Eis alguns exemplos de uso desse comando:
 +
 +Para adicionar a rota de //loopback// (com máscara default 255.0.0.0 e dispositivo ''lo''):
 +
 +<code>
 +$ route add -net 127.0.0.0
 +</code>
 +
 +Para adicionar/remover uma rota para a rede 192.120.10.0 através do dispositivo ''eth0'':
 +
 +<code>
 +$ route add -net 192.120.10.0 netmask 255.255.255.0 dev eth0
 +
 +$ route del -net 192.120.10.0 netmask 255.255.255.0 dev eth0
 +</code>
 +
 +Para adicionar/remover uma rota default usando ''router02'' como //gateway//:
 +
 +<code>
 +$ route add default gw router02
 +
 +$ route del default gw router02
 +</code>
 +
 +Para adicionar uma rota para o host 10.0.0.125 através do dispositivo ''eth0'':
 +
 +<code>
 +$ route add -host 10.0.0.125 dev eth0
 +</code>
 +
 +Para adicionar uma rota para a rede 200.192.112.0 através do dispositivo ''eth1'':
 +
 +<code>
 +$ route add -net 200.192.112.0 netmask 255.255.255.0 dev eth1
 +</code>
 +
 +Além de rotear seus próprios pacotes, um host pode também rotear pacotes recebidos em outras interfaces, agindo portanto como //gateway// para outras redes. Essa função é denominada "IP forwarding".
 +
 +Para verificar se o "IP forwarding" está ativado em uma máquina:
 +
 +<code>
 +$ cat /proc/sys/net/ipv4/ip_forward
 +</code>
 +
 +Para ativar ou desativar o IP forwarding:
 +
 +<code>
 +$ echo 1 > /proc/sys/net/ipv4/ip_forward
 +
 +$ echo 0 > /proc/sys/net/ipv4/ip_forward
 +</code>
 +
 +===== Resolução de endereços físicos =====
 +
 +Os endereços físicos (da camada de enlace) são resolvidos (associados a endereços IP) através do protocolo ARP - //Address Resolution Protocol//. O comando ''arp'' permite visualizar o cache de endereços ARP na máquina local. Eis um exemplo de uso:
 +
 +<code>
 +$ arp
 +Endereço                 TipoHW  EndereçoHW          Flags Máscara  Iface
 +mccarthy.dainf.ct.utfpr  ether   08:00:20:a3:de:a3                eth0
 +dainf.ct.utfpr.edu.br    ether   00:1c:c0:39:71:ae                eth0
 +metcalfe.dainf.ct.utfpr  ether   00:08:54:b3:75:79                eth0
 +</code>
 +
 +===== Status da atividade de rede =====
 +
 +A comunicação em TCP/IP pode ocorrer através de serviços com ou sem conexão, providos respectivamente por TCP e UDP. Cada serviço é identificado por uma porta, na qual um processo tem um //socket// aberto para receber solicitações. Os principais serviços TCP/UDP estão listados no arquivo ''/etc/services'', do qual apresentamos uma pequena parte:
 +
 +<code>
 +# service       port/protocol   aliases         description
 +
 +netstat         15/tcp
 +qotd            17/tcp          quote
 +msp             18/tcp                          # message send protocol
 +msp             18/udp                          # message send protocol
 +chargen         19/tcp          ttytst source
 +chargen         19/udp          ttytst source
 +ftp-data        20/tcp
 +ftp             21/tcp
 +fsp             21/udp          fspd
 +ssh             22/tcp                          # SSH Remote Login Protocol
 +ssh             22/udp                          # SSH Remote Login Protocol
 +telnet          23/tcp
 +smtp            25/tcp          mail
 +time            37/tcp          timeserver
 +...
 +</code>
 +
 +Os processos que respondem pelos serviços são normalmente chamados //daemons//, e são executados em //background// (segundo plano). Vários deles, sobretudos os que gerenciam serviços mais importantes, são lançados pelos scripts de inicialização do sistema, contidos no diretório ''/etc/rc.d'', cuja estrutura é definida a seguir:
 +
 +<code>
 +:
 +|
 +|-- rc.d
 +|   |-- init.d  scripts de inicialização de serviços
 +:   |-- rc0.d   scripts a executar ao entrar no run-level 0
 +    |-- rc1.d   idem, 1
 +    |-- rc2.d   idem, 2
 +    |-- rc3.d   idem, 3
 +    |-- rc4.d   idem, 4
 +    |-- rc5.d   idem, 5
 +    `-- rc6.d   idem, 6
 +</code>
 +
 +O comando ''netstat'' permite obter uma série de informações sobre os serviços de rede em uma máquina UNIX. Suas principais opções são:
 +
 +  * ''-r'' : informações de roteamento (similar ao comando ''route'')
 +  * ''-i'' : informações sobre interfaces (similar ao comando ''ifconfig'')
 +  * ''-a'' : indica também as portas TCP e UDP abertas no host)
 +  * ''-p'' : indica quais os processos associados a portas de rede abertas
 +  * ''-g'' : informações sobre grupos multicast conhecidos no host
 +  * ''-n'' : saída numérica (sem converter IPs e números de porta em seus nomes respectivos)
 +
 +A operação default mostra as conexões e //sockets// ativos, como vemos na listagem a seguir:
 +
 +<code>
 +$ netstat -n
 +Conexões Internet Ativas (sem os servidores)
 +Proto Recv-Q Send-Q Endereço Local          Endereço Remoto         Estado      
 +tcp        0      0 200.134.10.120:55769    74.125.234.103:80       ESTABELECIDA
 +tcp       38      0 200.134.10.120:39320    199.47.218.160:443      ESPERANDO_FECHAR
 +tcp        0      0 200.134.10.120:37098    199.47.217.149:80       ESTABELECIDA
 +tcp        0      0 200.134.10.120:44811    38.104.86.204:443       ESTABELECIDA
 +tcp        0      0 200.134.10.120:55458    200.134.10.1:80         TIME_WAIT  
 +tcp        0      0 127.0.0.1:34668         127.0.0.1:40751         ESTABELECIDA
 +tcp        0      0 127.0.0.1:40751         127.0.0.1:34668         ESTABELECIDA
 +tcp       38      0 200.134.10.120:45837    23.21.220.122:443       ESPERANDO_FECHAR
 +tcp        0      0 200.134.10.120:45950    74.125.47.125:443       ESTABELECIDA
 +tcp        0      0 200.134.10.120:38835    157.55.56.142:40042     ESTABELECIDA
 +tcp        0      0 200.134.10.120:58365    38.104.86.203:443       ESTABELECIDA
 +tcp       38      0 200.134.10.120:44763    199.47.217.177:443      ESPERANDO_FECHAR
 +tcp        0      0 200.134.10.120:55457    200.134.10.1:80         TIME_WAIT  
 +
 +Domain sockets UNIX ativos (sem os servidores)
 +Proto RefCnt Flags       Type       State         I-Node   Caminho
 +unix  2      [ ]         DGRAM                    6534     @/org/kernel/udev/udevd
 +unix  2      [ ]         DGRAM                    11123    @/org/freedesktop/hal/udev_event
 +unix  2      [ ]         DGRAM                    8753     @
 +unix  21     [ ]         DGRAM                    7929     /dev/log
 +unix  3      [ ]         STREAM     CONECTADO     600248   
 +unix  3      [ ]         STREAM     CONECTADO     600247   
 +unix  3      [ ]         STREAM     CONECTADO     600211   @/tmp/dbus-D0ZmiXx0PC
 +...
 +</code>
 +
 +O comando ''netstat'' possui uma série de opções úteis para verificar o status corrente das operações de rede. Consulte a pagina de manual do comando para maiores informações.