====== 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'':
$ 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:0
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:0
RX bytes:0 (0.0 B) TX bytes:101310 (101.3 KB)
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:
...
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
...
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:
$ 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:0
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:0
RX bytes:0 (0.0 B) TX bytes:101662 (101.6 KB)
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:
ifconfig []
[netmask ]
[broadcast ]
[up|down]
Eis alguns exemplos de uso:
Para desativar a interface ''eth0'' (primeira interface //ethernet//):
$ ifconfig eth0 down
Para ativar a interface ''eth0'' com uma configuração pré-definida (default do sistema):
$ ifconfig eth0 up
Para ativar a interface ''eth0'' com uma configuração específica:
$ ifconfig eth0 10.0.0.17 netmask 255.0.0.0 up
Para associar um segundo endereço IP (virtual) à interface ''eth0'':
$ ifconfig eth0:1 66.193.175.173 netmask 255.255.254.0
===== 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:
$ 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 U 1 0 0 eth0
192.168.122.0 * 255.255.255.0 U 0 0 0 virbr0
link-local * 255.255.0.0 U 1000 0 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 U 1 0 0 eth0
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
0.0.0.0 200.134.10.254 0.0.0.0 UG 0 0 0 eth0
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:
route [-v] add [-net|-host] Alvo
[netmask Nm]
[gw Gw]
[metric N]
[mss M]
[window W]
[irtt I]
[reject] [mod] [dyn] [reinstate]
[[dev] If]
ou
route [-v] del [-net|-host] Alvo
[gw Gw]
[netmask Nm]
[metric N]
[[dev] If]
Eis alguns exemplos de uso desse comando:
Para adicionar a rota de //loopback// (com máscara default 255.0.0.0 e dispositivo ''lo''):
$ route add -net 127.0.0.0
Para adicionar/remover uma rota para a rede 192.120.10.0 através do dispositivo ''eth0'':
$ 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
Para adicionar/remover uma rota default usando ''router02'' como //gateway//:
$ route add default gw router02
$ route del default gw router02
Para adicionar uma rota para o host 10.0.0.125 através do dispositivo ''eth0'':
$ route add -host 10.0.0.125 dev eth0
Para adicionar uma rota para a rede 200.192.112.0 através do dispositivo ''eth1'':
$ route add -net 200.192.112.0 netmask 255.255.255.0 dev eth1
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:
$ cat /proc/sys/net/ipv4/ip_forward
Para ativar ou desativar o IP forwarding:
$ echo 1 > /proc/sys/net/ipv4/ip_forward
$ echo 0 > /proc/sys/net/ipv4/ip_forward
===== 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:
$ arp
Endereço TipoHW EndereçoHW Flags Máscara Iface
mccarthy.dainf.ct.utfpr ether 08:00:20:a3:de:a3 C eth0
dainf.ct.utfpr.edu.br ether 00:1c:c0:39:71:ae C eth0
metcalfe.dainf.ct.utfpr ether 00:08:54:b3:75:79 C eth0
===== 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:
# 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
...
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:
:
|
|-- 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
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:
$ 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
...
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.