Conceptos sobre redes e sistemas operativos
Introdución
No capítulo anterior introduciuse TCP/IP como un conxunto de protocolos abertos que permiten a execución de servizos de Internet. Neste capítulo estúdanse diferentes aspectos do sistema operativo GNU/Linux necesarios para a configuración e administración básica destes servizos. En concreto trátanse os seguintes conceptos:
- Direccionamento e enrutamento en IP
- Configuración dunha rede TCP/IP en GNU/Linux
- Instalación de software
- Arranque e parada de servizos
Direccionamento en IP
Direccións IP
As direccións IP permiten identificar un equipo en Internet, así como a subrede á que pertence. Cada interface de rede (NIC ou Network Interface Card, é dicir, a tarxeta de rede) dun equipo ten polo menos unha dirección IP, aínda que esta pode cambiar, non como no caso das direccións MAC. Se unha máquina ten dúas interfaces de rede terá dúas direccións IP.
Unha dirección IP represéntase con 4 bytes en decimal separados por puntos. Por exemplo:
194.83.153.100
INTERÉSACHE
O Internet Network Information Center ou InterNIC (actual ICANN) adícase á tarefa de asignar rangos de direccións IP. Na actualidade, esta entidade delega a responsabilidade da asignación de direccións a entidades rexionais (en España, a red.es)
Un enderezo IP divídese en dúas partes:
- Unha parte identifica o número de rede (identificador de rede)
- Outra parte identifica o número de equipo dentro desa rede (identificador de equipo)
Existen tres clases de direccións IP (A, B e C) en función do número de equipos e redes que poden direccionar:
- Clase A. Reservan o primeiro byte (8 bits) para o identificador da rede e os tres restantes (24 bits) para identificadores de equipos. O primeiro bit do primeiro byte vale 0. Polo tanto, só pode haber 2^7 direccións de clase A con 2^24 equipos cada unha (xa non se asignan direccións deste tipo). Por exemplo:
Direccíon IP: 30.1.2.3 Identificador de rede (o primeiro byte): 30 Identificador de equipo (os tres bytes seguintes): 1.2.3
- Clase B. Teñen 2 bytes para redes e 2 bytes para equipos. Os dous primeiros bits do identificador de rede sempre valen 10 (en binario), xa que logo, pode haber 16.384 redes (2^14) con 65.536 estacións cada unha. De clase B tampouco queda ningunha dirección libre para asignar. Por exemplo:
Dirección IP: 140.1.2.3 Identificador de rede: 140.1 Identificador de equipo dentro desa rede: 2.3
- Clase C. Reservan 3 bytes (24 bits) para o identificador de rede e 1 byte (8 bits) para o identificador de estación. Os tres primeiros bits do identificador de rede teñen o valor 110 (en binario). Por exemplo:
Dirección IP: 194.144.35.5 Identificador de rede: 194.144.35 Identificador de equipo dentro desa rede: 5
Hai menos direccións IP útiles das posibles, xa que algunhas están reservadas. Unha vez que se coñece unha dirección é fácil saber se corresponde a unha rede de clase A, B ou C:
Na imaxe anterior non hai ningunha dirección que empece con tres bits 111. Estas direccións (chamadas clase D e clase E) son de propósito especial e non se asignan a máquinas concretas.
Máscaras de rede
O concepto de máscara é fundamental para entender o funcionamento das redes IP. A máscara permite a unha estación decidir se o destino ao que debe transmitir se atopa dentro da mesma LAN ou nunha LAN remota. Neste último caso debe delegar a súa transmisión a algún equipo da súa mesma LAN (o encamiñador) para que se encargue de facer chegar o paquete ao seu destino.
O que determina se dous equipos están na mesma LAN é o identificador de rede. O identificador de rede dunha dirección IP non está determinado polo primeiro byte da dirección IP (ou primeiros), senón pola máscara. A máscara son 4 bytes que oscilan entre 0 e 255 cada un separados por puntos, como nunha dirección IP. Por medio da máscara definimos os bits que identifican a rede (bits a 1 da máscara) e os que identifican a estación (bits a 0). Así, o identificador de rede é a parte da dirección IP que encaixa cos bits a 1 da máscara (AND lóxico). Analogamente, o identificador de equipo é a parte da dirección IP que encaixa cos bits a 0 da máscara (OR lóxico). Vexámolo cuns exemplos:
Obter o identificador de rede e identificador de equipo dun enderezo IP
Exemplo I:
– Enderezo IP: 69.51.117.3 (01000101.51.117.3)
– Máscara: 255.0.0.0 (11111111.0.0.0)
– Rede: 69.0.0.0
– Equipo: 51.117.3
Exemplo II:
– Enderezo IP: 69.51.117.3
– Máscara: 255.255.0.0
– Rede: 69.51.0.0
– Equipo: 117.3
Exemplo III:
– Enderezo IP: 69.51.117.3
– Máscara: 255.255.255.0
– Rede: 69.51.117.0
– Equipo: 3
Para que dous equipos se poidan comunicar entre si no nivel de rede deben pertencer á mesma rede IP, senón terán que comunicarse a través dun encamiñador. Para comprobar se dous equipos pertencen ou non á mesma LAN basta con aplicarlles a máscara de rede ás súas direccións IP mediante un AND lóxico e así obteremos o identificador da rede. Vexámolo cun exemplo:
Exemplo:
Se temos dúas estacións coas direccións:
- EquipoI: 147.83.153.100
- EquipoII: 147.83.153.200,
- Máscara de rede 255.255.255.0
Podemos ver que están na mesma LAN, aplicándolle a máscara:
- Equipo I: 10010011.01010011.10011001.01100100
- Máscara: 11111111.11111111.11111111.00000000
------------------------------------------------
AND: 10010011.01010011.10011001.00000000
O identificador de rede é, en ambos casos, 147.83.153.0. Se facemos un OR lóxico entre a parte que está a 0 da máscara e a dirección IP obteriamos o identificador do equipo.
Con todo, no exemplo anterior, se a máscara fose, por exemplo, 255.255.255.128, deduciriamos que non están conectadas á mesma LAN. Vexámolo. Para o equipo I:
- Equipo I: 10010011.01010011.10011001.01100100
- Máscara: 11111111.11111111.11111111.10000000
------------------------------------------------
AND: 10010011.01010011.10011001.00000000
O identificador de rede é:
147.83.153.0
Para o equipo II:
- Equipo II: 10010011.01010011.10011001.11001000
- Máscara: 11111111.11111111.11111111.10000000
------------------------------------------------
AND: 10010011.01010011.10011001.10000000
O identificador de rede é:
147.83.153.128
Unha notación alternativa para a máscara é proporcionar o número de bits con valor 1 da mesma. Así pois, a máscara 255.255.255.0 é unha máscara de 24 bits e a 255.255.255.128 é unha máscara de 25 bits. É habitual ver unha dirección co engadido da máscara e coa seguinte notación:
147.83.153.100/24
Direccións especiais
Existen algunhas direccións IP de propósito especial. Todas as direccións dos seguintes rangos son privadas:
10.0.0.0/8
Da 172.16.0.0/16 á 172.31.0.0/16
Da 192.168.0.0/24 á 192.168.255.0/24
Asemade, as clases D e E están reservadas.
Subnetting
Cando un administrador dunha rede recibe o encargo de xestionar un conxunto de direccións, é posible que necesite configurar internamente diferentes LAN con este conxunto. Xa vimos que isto se fai coa máscara de rede. Por exemplo, podemos usar máis bits dos que corresponderían para a máscara nunha rede de clase C (25 bits en lugar de 24 que sería o "normal" ou máscara natural). Isto permite crear máis redes “roubando” bits aos bits correspondentes aos equipos. Poderemos direccionar menos equipos pero cunha única dirección IP teremos máis redes. A isto chámaselle subnetting e ás redes que se crean utilizando esta técnica chámaselles subredes.
Por exemplo, a dirección 212.45.10.0/27 permite crear 8 subredes distintas dentro da rede de clase C 212.45.10.0 porque rouba 3 bits do identificador de estación, xa que a máscara natural sería de 24 bits, é dicir, 212.45.10.0/24, e 2^3 = 8 redes. Xa que logo, as subredes posibles serían:
000
001
010
011
100
101
110
111
Dentro de cada subrede, a dirección con todos os bits a 0 (coincide co identificador de rede) e a dirección con todos os bits a 1 (coincide coa dirección de broadcast) non se usan.
Supernetting
Se en lugar de roubar bits da parte da dirección IP que identifica aos equipos, collemos bits da parte da dirección IP que identifica ás redes estaremos facendo supernetting. O mecanismo é idéntico ao anterior pero ás redes resultantes chamaráselles superredes. Ambas técnicas, subnetting e supernetting, dan lugar ao que se chama Classless Inter-Domain Routing (CIDR) ou direccións IP sen clase.
Encamiñamento
O encamiñamento ou enrutamento permite dirixir o tráfico cara a outras estacións remotas noutras LAN. A un router (tamén chamado encamiñador, porta de enlace ou gateway) chegan paquetes que serán encamiñados por unha ou outra liña en función da súa táboa de encamiñamento. Así como un condutor, para acadar o seu destino, pode atravesar moitas rotondas, un paquete IP, para acadar o seu destino, pode atravesar moitos routers.
Polo tanto, o routing lévase a cabo a partir de táboas de encamiñamento con información que permite a interconexión das distintas redes. Cada router ten unha táboa de encamiñamento que podería ter o seguinte aspecto:
A primeira columna da táboa anterior destination
indica que destinos son alcanzables. O funcionamento é o seguinte: cando desde o noso equipo desexamos mandar un paquete IP a un equipo noutra rede aplícaselle á dirección IP de destino a máscara que se atoma da terceira columna (genmask
). Se tras aplicarlla obtemos como resultado a dirección IP da rede da columna destination
dito paquete será enviado polo encamiñador da columna gateway
. Neste caso a columna gateway
ten o valor 0.0.0.0 o cal quere dicir que será enviado polo mesmo equipo. A columna Iface
indica a interface de rede que se usará. No exemplo, estamos falando dun equipo, probablemente un router, con tres tarxetas, eth0, eth1, eth2.
Tamén, cada equipo conectado a unha rede IP necesita unha táboa de encamiñamento para saber se unha determinada dirección está ou non na súa rede e enviar o paquete ao router, en caso de que non sexa así.
Para engadir rutas á taboa consulta o apartado sobre o comando route.
INTERÉSACHE
ip_forward. Para que unha máquina Linux poida comportarse como un router ten que ter a variable ip_forward a 1. Para poder modificar esa variable previamente hai que se facer root. Iso conséguese mediante o seguinte comando su -
, e tras introducir a clave tecléase:
echo 1 > /proc/sys/net/ipv4/ip_forward
ip_forward. Para que unha máquina Linux poida comportarse como un router ten que ter a variable ip_forward a 1. Para poder modificar esa variable previamente hai que se facer root. Iso conséguese mediante o seguinte comando
su -
, e tras introducir a clave tecléase:
Configuración da rede en Ubuntu
Normalmente, a configuración da rede pode realizarse a través de aplicacións gráficas, como en MS-Windows. Con todo, neste apartado veremos como facelo desde a liña de comandos que é o método máis frecuente cando configuramos, por exemplo, un servidor. O seguinte aplícase ao sistema operativo Ubuntu, sendo moi similar para outras distribucións (Debian, OpenSuse, etc.).
Moitos dos aspectos de configuración relacionados coas interfaces de rede están no ficheiro /etc/network/interfaces
. Se o computador non ten dispositivos ethernet este ficheiro só conterá a interface loopback, tal e como se amosa a continuación:
# Este ficheiro describe as interfaces de rede dispoñibles no sistema # e como activalas. Para máis información: man interfaces. # A interface de rede loopback auto lo iface lo inet loopback address 127.0.0.1 netmask 255.0.0.0
Para ver o ficheiro de interfaces pódese teclear o seguinte:
more /etc/network/interfaces
Configuración mediante DHCP
Se o computador ten só un dispositivo ethernet, eth0, que se activa automaticamente ao arrincar o sistema e que se configura mediante un servidor DHCP, o ficheiro interfaces terá dúas liñas máis::
auto eth0 iface eth0 inet dhcp
A primeira liña indica que o dispositivo eth0 se activa automaticamente durante o arrinque do sistema. A segunda liña indica que a interface (“iface”) eth0 ten unha dirección IPv4. Se remplazamos “inet” con “inet6” teríamos unha dirección IPv6. Se o servidor DHCP está correctamente configurado non se precisa facer nada máis para ter a rede funcionando. O servidor DHCP proporcionará o encamiñador por defecto (gateway), a dirección IP e os servidores DNS.
Para editar o ficheiro interfaces pódese usar o editor de textos vim
tecleando o seguinte:
sudo vim /etc/network/interfaces
Para máis información sobre o vim
consulta as páxinas de manual tecleando:
man vim
Tamén se poden configurar os parámetros anteriores mediante a ferramentas dhclient pero os cambios non se manterán se apagamos o computador.
Configuración manual permanente
Se non temos un servidor DHCP hai que configurar os parámetros anteriores manualmente. O ficheiro /etc/network/interfaces
úsano os scrpits de configuración ifup/ifdown.
Direccións IP: o ficheiro interfaces
Supoñamos que queremos asignar a dirección IP 192.168.0.2 ao dispositivo eth1, cunha máscara natural 255.255.255.0. O encamiñador por defecto é o 192.168.0.1. Habería que editar o ficheiro /etc/network/interfaces
para que incluíra o seguinte información:
auto eth1 iface eth1 inet static address 192.168.0.2 netmask 255.255.255.0 gateway 192.168.0.1
Se se quere incluír un gateway para unha determinada rede, é dicir, que non sexa o encamiñador por defecto, utilízase o comando up
dentro do ficheiro interfaces para establecer a ruta, tal e como se ve no seguinte exemplo:
iface eth1 inet static address 192.168.0.2 netmask 255.255.255.0 up route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.1 dev eth1
A sintaxe é similar á empregada polo comando route pero precedido de up.
Servidor de nomes: o ficheiro resolv.conf
A continuación hai que especificar o servidor DNS cales serán os servidores DNS. Esta información está almacenada no ficheiro /etc/resolv.conf
, que ten o seguinte aspecto:
search iessanclemente.net nameserver 192.168.0.1 nameserver 4.2.2.2
A palabra search engade o dominio iessanclemente.net ás consultas para tentar resolver os nomes dentro da nosa rede. Por exemplo, se o noso dominio é iessanclemente.net e tentamos facer un ping ao equipo pc1 dentro da nosa rede, non será necesario teclear o nome completo, é dicir, ping pc1.iessanclemente.net, senón que automaticamente a consulta DNS será pc1.iessanclemente.net se tecleamos ping pc1. A palabra nameserver especifica os servidores DNS que se usarán para resolver nomes a direccións IP. Pode haber varios servidores DNS e consultaranse na orde especificada.
Se o servidor DNS se obtén dinamicamente mediante DHCP as entradas no ficheiro resolv.conf se sobrescribirán.
O ficheiro hosts
O ficheiro /etc/hosts
contén direccións IP e os seus correspondentes nomes de equipo. Cando o computador tenta averiguar a dirección IP dun equipo primeiro acudirá a este ficheiro antes que ao servidor de nomes DNS. Xa que logo, se a dirección IP está no ficheiro /etc/hosts
o DNS non se usará (isto pode cambiarse editanto o ficheiro /etc/nsswitch.conf
.
Se a nosa rede ten computadores con direccións IP que non están no DNS recoméndase engadilas ao ficheiro /etc/hosts
.
Reinicio manual do servizo de rede
En calquera momento podemos reiniciar o servizo de rede tecleando o seguinte:
sudo /etc/init.d/networking restart
Configuración manual non permanente
Tamén se poden configurar os parámetros anteriores mediante as ferramentas ifconfig e route pero os cambios non se manterán se apagamos o computador. Ademais, tamén hai que configurar o ficheiro resolv.conf co DNS, tal e como se especificou anteriormente.
O comando ifconfig
O comando ifconfig
permítenos establecer e comprobar a configuración dunha interface de rede. Se executamos o comando sen parámetros (ou co parámetro -a) proporcionaranos información relativa a todas as interfaces de rede:
ifconfig -a
Se se especifica unha interface de rede informarase unicamente da configuración de dito dispositivo:
ifconfig eth0
En caso de adxuntar a dirección IP, máscara de rede/subrede e dirección de broadcast, serán asignadas á interface especificada.
ifconfig eth0 192.168.121.48 netmask 255.255.255.224 broadcast 192.168.121.63
A sintaxe é a seguinte:
ifconfig interface_de_rede dirección_IP netmask máscara dirección_de_broadcast.
Co parámetro up/down podemos habilitar/deshabilitar a interface de rede:
ifconfig eth0 down
O comando route
O comando route permite establecer as regras de encamiñamento que serán consultadas polo noso equipo para decidir por que interface de rede enviar os paquetes coa finalidade de que cheguen ao seu destino. Para coñecer ditas regras execútase o seguinte comando:
route -n
Algunhas regras da táboa de encamiñamento configúranse automaticamente cando traballamos co comando ifconfig. A sintaxe do comando é a seguinte:
route add/del -net/host dirección_IP netmask máscara gw gateway dev interface_de_rede
Por exemplo, para que o noso equipo se poida comunicar cos equipos da rede 172.22.0.0/16 (net 172.22.0.0, netmask 255.255.0.0) supoñendo que o noso gateway sexa o 192.168.100.2 na interface eth3, teclearemos o seguinte comando:
route add -net 172.22.0.0 netmask 255.255.0.0 gw 192.168.100.2 dev eth3
Instalación de software
Nas distribucións GNU/Linux o software vén en paquetes. Polo tanto, a instalación e desinstalación de servizos realízase mediante un xestor de paquetes. En Ubuntu, podemos acceder a el en modo gráfico (Synaptic) ou en modo comando (apt). Hai que ter en conta que só se pode abrir un xestor de paquetes ao mesmo tempo e precísanse permisos de administrador para poder executalo.
Para poder facer o seu traballo o xestor de paquetes accede a repositorios de software que conteñen miles de programas dispoñibles para instalar. Podemos engadir repositorios ao xestor de paquetes pero hai determinados repositorios que só funcionarán se temos conexión a Internet. Os repositorios usan unha clave GPG para asinar dixitalmente os ficheiros que proporcionan. Isto permite asegurar que non foron manipulados por terceiros.
O Synaptic
Synaptic é un xestor de paquetes avanzado que traballa en modo gráfico. Para lanzalo hai que premer en System → Administration → Synaptic Package Manager.
Se se coñece o nome do paquete que se quere instalar ou desinstalar só hai que buscalo premendo no botón Search. Pódense buscar paquetes a partir da súa descrición. Por exemplo, todos os paquetes que mencionen a palabra "arcade" ou "bioloxía".
Para instalar un paquete hai que premer na caixa de verificación á súa esquerda e marcalo para instalar (ou desmarcalo para desintalalo).
Para que os cambios se fagan efectivos hay que premer non botón Apply. Se pechamos a ventá, sen máis, os paquetes non se instalarán.
O APT (Advanced Packaging Tool)
É o xestor de paquetes en modo texto. Expóñense a continuación algúns exemplos de uso frecuente:
Para actualizar a lista de paquetes (os repositorios):
sudo apt-get update
Para instalar todas as actualizacións de paquetes:
sudo apt-get upgrade
Para buscar un paquete:
apt-cache search package
Para instalar un paquete:
sudo apt-get install package
Para desinstalar un paquete:
sudo apt-get remove package
Para ver outras opcións do comando apt:
apt-get help
Instalación dun único paquete
O método preferible para instalar e desinstalar paquetes é a través do xestor de paquetes. Con todo, nalgúns casos isto non será posible. Se o que queremos instalar é un paquete .deb podemos usar o seguinte comando:
//Instala un paquete sudo dpkg -i paquete.deb //Desinstala un paquete sudo dpkg -r nome_paquete
Existen outro tipo de paquetes, os RPM (Red Hat Package Manager). Para poder instalalos en Ubuntu, que usa paquetería .deb, hai que convertilos co programa alien, tal e como se amosa a continuación:
sudo alien package_file.rpm
Ás veces o software vén empaquetado no que se chaman tarballs (.tar, .tgz, .tar.gz ou .tar.bz2). Neste caso, o primeiro que hai que facer é descomprimir o tarball e seguir as instrucións específicas para a súa instalación:
tar xfvz nome_tarball
Arranque e parada de servizos
O arranque e parada de servizos pódese facer manualmente ou automaticamente ao iniciar o sistema.
Arranque manual
No primeiro caso, o servizo normalmente se atopa na ruta /etc/init.d/<nome_do_servizo. Así, por exemplo, se queremos arrancar, parar ou reiniciar o servizo DHCP haberá que escribir o seguinte:
// Arrancar o servidor DHCP root@esi-desktop:/# /etc/init.d/dhcp3-server start // Parar o servidor DHCP root@esi-desktop:/# /etc/init.d/dhcp3-server stop // Reiniciar o servidor DHCP root@esi-desktop:/# /etc/init.d/dhcp3-server restart
Arranque automático
Cando Linux arranca, pode facelo de 7 modos distintos, numerados do 0 ao 6. A estes modos denomínaselles niveis de execución e son os seguintes:
- Nivel 0 (Halt): Apaga o sistema
- Nivel 1 (Monousuario): Permite entrar no sistema como root sen clave e en modo texto.
- Nivel 2 (Multiusuario completo): Modo multiusuario en modo gráfico e con rede.
- Nivel 3-5 : Igual que o 2 (noutras distros distintas a Ubuntu/Debian isto non é así)
- Nivel 6 (Reboot): Reinicia o sistema.
En función do nivel de execución, existe a posibilidade de configurar que servizos deben iniciarse de forma
automática, para iso é necesario crear uns enlaces simbólicos nos cartafoles /etc/rcN.d
(onde N é un número de 0 a 6 que indica o nivel de execución de linux) que apunten ao script de inicio do servizo que se atopa en /etc/init.d/. Ditos enlaces deberán ter un nome un pouco especial xa que deberán
comezar coa letra 'S' de Start (arrancar) seguida dun número de dúas cifras (para establecer a orde
de arranque dos servizos) e do nome do servizo, exemplo: S20samba ou S30nfs. Se o que nos interesa
é que o servizo non arranque, a primeira letra deberá ser unha K de Kill (deter) en lugar dunha S,
exemplo: K20samba ó K30nfs.
Estes enlaces pódense crear co comando update-rc.d
. Exemplo, se desexamos que o servizo samba se arranque cando o servidor inicia nos niveis 3, 4 e 5 e non arranque cando inicia nos niveis 1, 2 e
6, executaremos o seguinte comando (ollo, non esquecer o punto do final (.) ao escribir o comando):
// Crear enlaces para inicio automático do servizo # update-rc.d samba start 20 3 4 5 . stop 20 1 2 6 .
Desta forma crearanse enlaces simbólicos de arranque con nome S20samba nos cartafoles /etc/rc3.d, /etc/rc4.d e /etc/rc5.d e de parada con nome K20samba nos cartafoles /etc/rc1.d,/etc/rc2.d e /etc/rc6.d. O número 20 indica a prioridade. Serve para arrancar ou parar antes uns servizos que outros xa que os scripts procésanse por orde alfabético. Pódese utilizar calquera número entre 10 e 99.
Se por algunha razón o comando update-rc.d non crea as ligazóns porque xa están creadas, existe a posibilidade de eliminalos coa opción '-f' (forzado) e acto seguido volver a crealos:
// Eliminación forzosa de ligazóns para inicio automático do servizo # update-rc.d -f samba remove // Volver crear enlaces para inicio automático do servizo # update-rc.d samba start 20 3 4 5 . stop 20 1 2 6 .
Para coñecer o nivel de execución actual podemos usar o comando runlevel
e para cambiar o nivel de execución podemos usar o comando telinit
.
Para crear un enlace a un init script coas opcións por defecto pódese teclear o seguinte:
sudo update-rc.d script_iptables defaults
No exemplo anterior supoñemos que o script se chama script_iptables. Ten que estar copiado no directorio /etc/init.d e ter permisos de execución:
sudo chmod u+x script_iptables
--Arribi 12:58 21 ene 2009 (GMT)