Difference between revisions of "Linux Networks"

From Guifi.net - English Wiki

m (Mounting the proc File System)
(– translated until here –)
Line 36: Line 36:
 
that mounts all network devices as specified in the file '''/etc/fstab'''.
 
that mounts all network devices as specified in the file '''/etc/fstab'''.
  
= – translated until here – =
+
'''NOTE:''' The process file system ([https://en.wikipedia.org/wiki/Procfs procfs]) currently is configured by default in most kernels. If your kernel does not support this type of system you will find error messages such as
  
'''NOTA:''' El sistema de fitxers proc (procfs) actualment està configurat per defecte a la majoria de kernels. Si el kernel no suporta aquest tipus de sistema us trobareu missatges d'error com mount: fs type procfs not supported by kernel. Cal recopilar el kernel amb suport per a procfs.
+
mount: fs type procfs not supported by kernel.  
  
===Adaptadors de xarxa (NICs)===
+
It is necessary to compile the kernel with support for procfs.
  
Hi ha molts drivers de suport per a targetes de xarxa amb Linux. Les targetes Ethernet PCi no solen ser un problema a Linux. Un altre tema més delicat és el de les targetes de xarxa PCMCIA o USB.
+
===Network Adapters (NICs)===
 +
 
 +
There are many support drivers for network cards with Linux. PCi Ethernet cards are not usually a problem in Linux. Another topic more delicate is the network cards PCMCIA or USB.
  
Si la targeta de xarxa és PCI, podem obtenir el seu model i identificador amb les comandes:
+
If the network card is PCI, we can get your model and ID with the commands:
  
 
  $ lspci
 
  $ lspci
Line 62: Line 64:
 
  02:07.0 0c00: 1106:3044 (rev 80)
 
  02:07.0 0c00: 1106:3044 (rev 80)
 
  02:08.0 0200: 11ab:4320 (rev 13)
 
  02:08.0 0200: 11ab:4320 (rev 13)
 +
 +
= – translated until here – =
  
 
L'identificador té dues parts: l'identificador del venedor (vendor_id) i l'identificador del producte (proc_id). També podem consultar aquest valor utilitzant l'aplicació hal-device-manager:
 
L'identificador té dues parts: l'identificador del venedor (vendor_id) i l'identificador del producte (proc_id). També podem consultar aquest valor utilitzant l'aplicació hal-device-manager:

Revision as of 12:16, 12 April 2014

Template:PlantillaCurs

Contents

Configuration of Linux Networks

Hardware Configuration

NOTE: In current Linux Distributions many of the steps in this section are not necessary (because network hardware is detected and configured automatically).

Mounting the proc File System

Check by a glance to the /etc/mtab file if the proc file system is installed because it is essential for the network to get working:

$ cat /etc/mtab 
/dev/sda2 / ext3 rw,errors=remount-ro 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
/sys /sys sysfs rw,noexec,nosuid,nodev 0 0
varrun /var/run tmpfs rw,noexec,nosuid,nodev,mode=0755 0 0
varlock /var/lock tmpfs rw,noexec,nosuid,nodev,mode=1777 0 0
procbususb /proc/bus/usb usbfs rw 0 0
udev /dev tmpfs rw,mode=0755 0 0
..................

This file shows us the devices mounted in our system. If there is no proc file system, add the file /etc/fstab :

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0

We can check it using the command

$ sudo mount -a

that mounts all network devices as specified in the file /etc/fstab.

NOTE: The process file system (procfs) currently is configured by default in most kernels. If your kernel does not support this type of system you will find error messages such as

mount: fs type procfs not supported by kernel. 

It is necessary to compile the kernel with support for procfs.

Network Adapters (NICs)

There are many support drivers for network cards with Linux. PCi Ethernet cards are not usually a problem in Linux. Another topic more delicate is the network cards PCMCIA or USB.

If the network card is PCI, we can get your model and ID with the commands:

$ lspci
.........................
00:18.2 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller
00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
01:00.0 VGA compatible controller: ATI Technologies Inc RV280 [Radeon 9200 PRO] (rev 01)
02:07.0 FireWire (IEEE 1394): VIA Technologies, Inc. IEEE 1394 Host Controller (rev 80)
02:08.0 Ethernet controller: Marvell Technology Group Ltd. 88E8001 Gigabit Ethernet Controller (rev 13)
$ lspci -n

00:18.1 0600: 1022:1101
00:18.2 0600: 1022:1102
00:18.3 0600: 1022:1103
01:00.0 0300: 1002:5960 (rev 01)
02:07.0 0c00: 1106:3044 (rev 80)
02:08.0 0200: 11ab:4320 (rev 13)

– translated until here –

L'identificador té dues parts: l'identificador del venedor (vendor_id) i l'identificador del producte (proc_id). També podem consultar aquest valor utilitzant l'aplicació hal-device-manager:

Línia de comandes:

$ hal-device-manager

Interfície gràfica:

File:Hal-device-manager1.jpg

File:Hal-device-manager2.jpg

També és util la comanda.

$ lshal | grep info.linux.driver

La web de ROM 'O' MATIC manté una llista amb les targetes de xarxa més conegudes i els seus identificadors.

També podeu buscar drivers (wireless) a la web:

http://linux-wless.passys.nl/

Webs on es pot consultar ajuda sobre NICs:

PCMCIA

$ cardctl ident

USB

Vegeu lsusb.

També és pot utilitzar dmesg.

Maquinari suportat

Ubuntu proporciona a la seva wiki una llista de targetes de xarxa suportades (https://wiki.ubuntu.com/HardwareSupportComponentsWiredNetworkCards).

També hi ha una llista de targetes de xarxa wireless (https://help.ubuntu.com/community/WifiDocs/WirelessCardsSupported)

Targetes de xarxa Wireless

Nomenclatura i tipus de dispositius de xarxa en Linux

  • lo: local loopback interface. Sempre està disponible ja que l'utilitzen múltiples aplicacions de xarxa (les quals no funcionarien sense aquesta interfície)
  • eth0, eth1, ... : Targetes de xarxa ethernet.
  • tr0, tr1, ...: Targetes de xarxa Token Ring.
  • sl0, sl1,...: Targetes de xarxa SLIP (línies sèrie).
  • ppp0, ppp1, ...: Targetes de xarxa PPP (línies sèrie).
  • plip0, plip1, ...: Targetes de xarxa PLIP (línies sèrie).
  • ax0, ax1, ... : Targetes de xarxa AX.25 interfaces.
  • vmnet1, vmnet8,...: Targetes de xarxa virtuals de vmware.

Extret de: http://tldp.org/LDP/nag2/x-087-2-hwconfig.tour.html

Determinar el nom de les targetes de xarxa eth0, eth1. Udev i iftab

Template:Nota

El fitxer /etc/iftab:

$ cat /etc/iftab
# This file assigns persistent names to network interfaces.
# See iftab(5) for syntax.

eth0 mac 00:30:1b:b7:cd:b6 arp 1 

és utilitzat per udev per tal d'establir el nom de les targetes de xarxa. La norma de udev que s'encarrega és:

$ cat /etc/udev/rules.d/25-iftab.rules
# This file causes network devices to be assigned consistent names.
# See udev(7) for syntax.

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", \
                               PROGRAM="iftab_helper %k", NAME="$result"

Un script de udev que he trobat per Internet per establir el nom de les targetes de xarxa.

Atenció: No ho he provat pas....

# /etc/udev/static-nic.rules
#
#  Set permission to 0644  'chmod 0644 static-nic.rules', then symlink
#'ln -s static-nic.rules rules.d/025_static-nic.rules'
#
# Purpose:
# Mapping specific MAC address to specific device names for cases where
#  that is expected.
#
# SYSFS{address}="MAC address" - MAC address should be the machine
# address of the network card the rule is for.
#
# NAME="name" - name is the device name you want used for the interface.
# These could be standard names eth0, wlan0, etc... or if you prefer
# something more descriptive lan, internet, wireless, whatever...

KERNEL="eth*", SYSFS{address}="00:00:00:00:00:00", NAME="eth0"
KERNEL="eth*", SYSFS{address}="11:11:11:11:11:11", NAME="eth1"

Recursos:

Configuració del programari

Paquet net-tools (abans netbase)

Podem comprovar si tenim el programari base de xarxes amb linux comprovant si tenim el paquet net-tools. En sistemes Debian:

$ dpkg -l | grep net-tools
ii  net-tools                              1.60-17ubuntu1                        The NET-3 networking toolkit

Si no tenim clar quines comandes ens aporta el paquet net-tools podem executar:

$ dpkg -L net-tools | grep bin
/usr/sbin
/usr/sbin/arp
/sbin
/sbin/ifconfig
/sbin/nameif
/sbin/plipconfig
/sbin/rarp
/sbin/route
/sbin/slattach
/sbin/ipmaddr
/sbin/iptunnel
/sbin/mii-tool
/bin
/bin/netstat

Com podeu veure, és el responsable de proporcionar-nos les comandes ifconfig, arp, rarp, route i netstat.

Aquesta comanda també ens pot ser útil per localitzar els camins absoluts de les comandes de xarxa. Abans el paquet es deia netbase. Més endavant veurem que el nou paquet netbase no té res a veure amb aquest.

Paquet wireless-tools

Podeu trobar més informació a la secció Paquet wireless tools de l'article Xarxes Linux Wireless.

Paquet netbase

Aquest paquet depèn del paquet ifupdown i bàsicament instal·la fitxers de configuració de xarxa com l'script /etc/init.d/networking

$ dpkg -L netbase | grep etc
/etc
/etc/network
/etc/protocols
/etc/rpc
/etc/services
/etc/init.d
/etc/init.d/networking

També és el que ens proporciona els fitxrs protocols i services.

Podem comprovar si tenim instal·lat aquest programa amb:

$ dpkg -l | grep netbase
ii  netbase                                4.25ubuntu2                           Basic TCP/IP networking system

Paquet ifupdown

Ens proporciona les comandes ifup i ifdown així com els fitxers de configuració de les interfícies de xarxa

Per comprovar si tenim instal·lat el paquet:

$ dpkg -l | grep ifupdown
ii  ifupdown                               0.6.7ubuntu7                          high level tools to configure network interf

Podem consultar quines comandes ens ofereix amb:

$ dpkg -L ifupdown | grep bin
/usr/bin
/usr/sbin
/sbin
/sbin/ifup
/sbin/ifdown

O quins fitxers de configuració ens ofereix amb:

$ dpkg -L ifupdown | grep etc
/etc
/etc/network
/etc/network/if-pre-up.d
/etc/network/if-up.d
/etc/network/if-down.d
/etc/network/if-post-down.d
/etc/init.d
'/etc/init.d/loopback
/etc/udev
/etc/udev/rules.d
/etc/udev/rules.d/85-ifupdown.rules

Veiem doncs que ens proporciona les comandes ifup i ifdown, que configura la interfície de loopback (/etc/init.d/loopback) i que instal·la les carpetes de

Si no sabéssim a priori el nom del paquet però sí el nom dels fitxers i/o comandes que instal·la podem utilitzar aquesta informació amb dpkg

$ dpkg -S ifdown
ifupdown: /usr/share/man/man8/ifdown.8.gz
ifupdown: /sbin/ifdown

Paquet gnome-nettool

Aquest paquet ens proporciona una eina gràfica a partir de la qual executar les comandes de xarxa ping, netstat, whois, etc...

La podem executar amb:

$ gnome-nettool

o seguint els menús:

File:Gnome-nettool1.jpg

File:Gnome-nettool.jpg

Paquets iptutils-*

Hi ha tres paquets:

  • iputils-arping: Proporciona la comanda arping
  • iputils-ping: Proporciona la comanda ping
  • iputils-tracepath: Proporciona la comanda traceroute

El més important és el segon que ens proporciona la comanda ping.

Paquets iproute

TODO

$ dpkg -L iproute | grep bin
/bin
/bin/ip
/sbin
/sbin/rtmon
/sbin/tc
/sbin/netbug
/sbin/rtacct
/sbin/ss
/usr/bin
/usr/bin/lnstat
/usr/bin/nstat
/usr/bin/routef
/usr/bin/routel
/usr/sbin
/usr/sbin/arpd
/sbin/ip
/usr/bin/ctstat
/usr/bin/rtstat

Proporciona diverses comandes de control de la xarxa a nivell de kernel..

Paquet dnstracer

Com podem veure amb la comanda:

$ dpkg -L dnstracer | grep bin
/usr/bin
/usr/bin/dnstracer

Ens proporciona la comandes dnstracer.

Paquet dnsutils

Com podem veure amb la comanda:

$ dpkg -L dnsutils | grep bin
/usr/bin
/usr/bin/dig
/usr/bin/nslookup
/usr/bin/nsupdate

Ens proporciona les comandes dig i nslookup.

Paquet tcpdump

Proporciona la comanda tcpdump.

Paquet nmap

Proporciona la comanda nmap.

Paquet traceroute

Proporciona la comanda traceroute.

Analitzadors de xarxa (Wireshark/Ethereal)

  • Wireshark (Antic ethereal). El paquet wireshark ens proporciona l'analitzador de xarxes lliure més famós i potent: Ethereal. Fa poc, Ethereal ha canviat el seu nom a WireShak. Podeu trobar més informació a l'article d'aquesta Wiki sobre Ethereal (Wireshark).

Paquet ipcalc

Proporciona la comanda ipcalc.

Paquet arpwatch

Proporciona el dimoni arpwatch que permet monitoritzar l'ús de la xarxa local mantenint una taula d'IPS i MACs.

Recursos:

Paquet whois

Com podem veure amb la comanda:

$ dpkg -L whois | grep bin
/usr/bin
/usr/bin/whois
/usr/bin/mkpasswd

Aquest paquet ens proporciona la comanda whois.

Paquet iptables (netfilter)

Com podem veure amb la comanda:

$ dpkg -L iptables | grep bin
/sbin
/sbin/iptables
/sbin/iptables-save
/sbin/iptables-restore
/sbin/ip6tables
/sbin/ip6tables-save
/sbin/ip6tables-restore

Aquest paquet ens proporciona les comandes relacionades amb iptables.

Paquets bind/bind9

Ens proporciona les comandes i fitxers de configuració relacionats amb els servidors de noms (DNS) bind. Consulteu l'article sobre DNS.

Inicialització de la xarxa. Scripts d'inicialització System V

A Ubuntu la inicialització de la xarxa es fa al nivell d'execució S. Els processos que s'inicialitzen en aquest nivell són els que hi ha a la carpeta /etc/rcS.d seguint el sistema d'scripts d'inicialització SystemV (Veieu l'article Configuració de serveis en Linux. Daemons per a més informació). Si executem:

$ ls -la /etc/rcS.d/
total 16
drwxr-xr-x   2 root root 4096 2006-12-24 13:31 .
drwxr-xr-x 142 root root 8192 2006-12-30 09:09 ..
-rw-r--r--   1 root root  785 2006-10-06 13:34 README
lrwxrwxrwx   1 root root   24 2006-11-07 19:57 S06keyboard-setup -> ../init.d/keyboard-setup
lrwxrwxrwx   1 root root   41 2006-10-10 13:07 S07linux-restricted-modules-common -> ../init.d/linux-restricted-modules-common
lrwxrwxrwx   1 root root   18 2006-10-10 13:07 S08loopback -> ../init.d/loopback
......
lrwxrwxrwx   1 root root   20 2006-10-10 13:07 S40networking -> ../init.d/networking
lrwxrwxrwx   1 root root   16 2006-10-10 13:07 S40pcmcia -> ../init.d/pcmcia
.......

Com podem veure en aquest nivell s'inicialitza la interfície de loopback i després la xarxa (networking). Els fitxers:

  • /etc/rcS.d/S08loopback
  • /etc/rcS.d/S40networking

Són links als respectius fitxer d'inicialització SystemV:

  • /etc/init.d/loopback
  • /etc/init.d/networking

Com s'explica aquí el que fan aquests links es determinar que s'ha d'executar els fitxers d'script amb el paràmetre start (S). Si fem una ullada al fitxer /etc/init.d/networking:

#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          networking
# Required-Start:    mountvirtfs ifupdown $local_fs
# Default-Start:     S
# Default-Stop:      0 6
### END INIT INFO

PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"

[ -x /sbin/ifup ] || exit 0

. /lib/lsb/init-functions


case "$1" in
start)
        log_action_begin_msg "Configuring network interfaces"
        type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 120" || true
        if [ "$VERBOSE" != no ]; then
            if ifup -a; then
                log_action_end_msg $?
            else
                log_action_end_msg $?
            fi
        else
            if ifup -a >/dev/null 2>&1; then
                log_action_end_msg $?
            else
                log_action_end_msg $?
            fi
        fi
        type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 15" || true
        ;;

stop)
        if sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\2/p' /proc/mounts | 
                grep -qE '^(nfs[1234]?|smbfs|ncp|ncpfs|coda|cifs)$'; then
            log_warning_msg "not deconfiguring network interfaces: network shares still mounted."
            exit 0
        fi

        log_action_begin_msg "Deconfiguring network interfaces"
        if [ "$VERBOSE" != no ]; then
            if ifdown -a --exclude=lo; then
                log_action_end_msg $?
            else
                log_action_end_msg $?
            fi
        else
            if ifdown -a --exclude=lo >/dev/null 2>/dev/null; then
                log_action_end_msg $?
            else
                log_action_end_msg $?
            fi
        fi
        ;;

force-reload|restart)
        log_action_begin_msg "Reconfiguring network interfaces"
        ifdown -a --exclude=lo || true
        if ifup -a --exclude=lo; then
            log_action_end_msg $?
        else
            log_action_end_msg $?
        fi
        ;;

*) 
        echo "Usage: /etc/init.d/networking {start|stop|restart|force-reload}"
        exit 1
        ;;
esac

exit 0

Veiem que hi ha una secció start i una secció stop i com es criden les comandes ifup -a i ifdown -a.

El fitxer /etc/rcS.d/README ens proporciona més informació sobre aquest nivell d'execució.

Comandes de xarxa

ifconfig

Vegeu també l'ordre ip de Linux Advanced Routing & Traffic Control lartc (http://lartc.org/).

Ifconfig és la comanda que permet configurar interfícies de xarxa (NICs). Tot i que ens permet modificar els paràmetres de xarxa, el seu ús més comú és consultar els paràmetres de xarxa executant ifconfig sense paràmetres:

$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:30:1B:B7:CD:B6  
        inet addr:192.168.1.33  Bcast:192.168.1.255  Mask:255.255.255.0
        inet6 addr: fe80::230:1bff:feb7:cdb6/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:16929 errors:0 dropped:0 overruns:0 frame:0
        TX packets:18758 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000 
        RX bytes:11958414 (11.4 MiB)  TX bytes:3243289 (3.0 MiB)
        Interrupt:209 
 
lo        Link encap:Local Loopback  
        inet addr:127.0.0.1  Mask:255.0.0.0
        inet6 addr: ::1/128 Scope:Host
        UP LOOPBACK RUNNING  MTU:16436  Metric:1
        RX packets:2051 errors:0 dropped:0 overruns:0 frame:0
        TX packets:2051 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:0 
        RX bytes:598941 (584.9 KiB)  TX bytes:598941 (584.9 KiB)
  
vmnet1    Link encap:Ethernet  HWaddr 00:50:56:C0:00:01  
        inet addr:192.168.252.1  Bcast:192.168.252.255  Mask:255.255.255.0
        inet6 addr: fe80::250:56ff:fec0:1/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:0 errors:0 dropped:0 overruns:0 frame:0
        TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000 
        RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

vmnet8    Link encap:Ethernet  HWaddr 00:50:56:C0:00:08  
        inet addr:192.168.196.1  Bcast:192.168.196.255  Mask:255.255.255.0
        inet6 addr: fe80::250:56ff:fec0:8/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:0 errors:0 dropped:0 overruns:0 frame:0
        TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000 
        RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

Com podeu observar es mostren diferents blocs que segueixen la nomenclatura de dispositius de xarxa (eth0,lo,vmnet...). Cada bloc correspon a un dispositiu de xarxa ja sigui físic o virtual.

Com mostrar només la informació d'una NIC:

$ ifconfig eth0
eth0    Link encap:Ethernet  HWaddr 00:30:1B:B7:CD:B6  
        inet addr:192.168.1.33  Bcast:192.168.1.255  Mask:255.255.255.0
        inet6 addr: fe80::230:1bff:feb7:cdb6/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:16929 errors:0 dropped:0 overruns:0 frame:0
        TX packets:18758 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000 
        RX bytes:11958414 (11.4 MiB)  TX bytes:3243289 (3.0 MiB)
        Interrupt:209 

Ifconfig ens proporciona la següent informació:

  • HWaddr: MAC del dispositiu (Ex. 00:30:1B:B7:CD:B6)
  • inet addr: La adreça IP del dispositiu (Ex. 192.168.1.33)
  • Bcast: La adreça de difusió de la subxarxa (Ex. 192.168.1.255)
  • Mask: La mascara de la subxarxa 255.255.255.0.
  • inet6 addr: La adreça IPv6 (ex.fe80::230:1bff:feb7:cdb6/64)
  • Scope: L'àmbit d'actuació de la interfície. Host (loopback)/Link (xarxes LAN nivell enllaç).
  • Estadístiques de transmissió/recepció:
         o RX packets:16929 errors:0 dropped:0 overruns:0 frame:0
         o TX packets:18758 errors:0 dropped:0 overruns:0 carrier:0
         o collisions:0 txqueuelen:1000
         o RX bytes:11958414 (11.4 MiB) TX bytes:3243289 (3.0 MiB) 

Exemple ifconfig en un router amb 5 targetes de xarxa:

$ /sbin/ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:48:54:8D:58:47  
        inet addr:192.168.0.10  Bcast:192.168.0.255  Mask:255.255.255.0
        inet6 addr: fe80::248:54ff:fe8d:5847/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:15351 errors:0 dropped:0 overruns:0 frame:0
        TX packets:6643 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000 
        RX bytes:1259037 (1.2 MiB)  TX bytes:878285 (857.7 KiB)
        Interrupt:11 Base address:0xb400 

eth1      Link encap:Ethernet  HWaddr 00:48:54:8D:7F:65  
        inet addr:192.168.10.2  Bcast:192.168.10.255  Mask:255.255.255.0
        inet6 addr: fe80::248:54ff:fe8d:7f65/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:6904 errors:0 dropped:0 overruns:0 frame:0
        TX packets:5240 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000 
        RX bytes:581267 (567.6 KiB)  TX bytes:353604 (345.3 KiB)
        Interrupt:5 Base address:0xb800 

eth2      Link encap:Ethernet  HWaddr 00:48:54:8D:59:37  
        inet addr:192.168.213.1  Bcast:192.168.213.255  Mask:255.255.255.0
        inet6 addr: fe80::248:54ff:fe8d:5937/64 Scope:Link
        UP BROADCAST MULTICAST  MTU:1500  Metric:1
        RX packets:0 errors:0 dropped:0 overruns:0 frame:0
        TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000 
        RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
        Interrupt:9 Base address:0xbc00 

eth3      Link encap:Ethernet  HWaddr 00:48:54:8A:DA:31  
        inet addr:192.168.216.1  Bcast:192.168.216.255  Mask:255.255.255.0
        inet6 addr: fe80::248:54ff:fe8a:da31/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:2537 errors:0 dropped:0 overruns:0 frame:0
        TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000 
        RX bytes:448104 (437.6 KiB)  TX bytes:2668 (2.6 KiB)
        Interrupt:10 Base address:0xc000 

eth4      Link encap:Ethernet  HWaddr 00:0D:88:CC:B4:64  
        inet addr:192.168.217.1  Bcast:192.168.217.255  Mask:255.255.255.0
        inet6 addr: fe80::20d:88ff:fecc:b464/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:13 errors:0 dropped:0 overruns:0 frame:0
        TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000 
        RX bytes:2258 (2.2 KiB)  TX bytes:2936 (2.8 KiB)
        Interrupt:5 Base address:0xa000 

lo        Link encap:Local Loopback  
        inet addr:127.0.0.1  Mask:255.0.0.0
        inet6 addr: ::1/128 Scope:Host
        UP LOOPBACK RUNNING  MTU:16436  Metric:1
        RX packets:14125 errors:0 dropped:0 overruns:0 frame:0
        TX packets:14125 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:0 
        RX bytes:6902348 (6.5 MiB)  TX bytes:6902348 (6.5 MiB)

Exemples:

  • Apagar una interfície de xarxa:
$ ifconfig eth0 down

NOTA: És equivalent a ifdown eth0

  • Encendre una interfície de xarxa:
$ ifconfig eth0 up

NOTA: És equivalent a ifup eth0

Configurar una targeta de xarxa amb ip estàtica

$ sudo ifconfig eth0 192.168.0.15 netmask 255.255.255.0 broadcast 192.168.0.255

NOTA: Amb ifconfig no es pot configurar la interfície de xarxa amb dhcp, ni es pot establir el gateway. El gateway s'estableix amb la comanda Xarxes_Linux#route o mitjançant un paràmetre al fitxer /etc/network/interfaces.

Mode promiscu
  • Establir el mode promiscu:
$ ifconfig eth0 promisc
$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:80:C8:F8:4A:51
        inet addr:192.168.99.35  Bcast:192.168.99.255  Mask:255.255.255.0
        UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1412  Metric:1
        RX packets:190312 errors:0 dropped:0 overruns:0 frame:0
        TX packets:86955 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:100 
        RX bytes:30701229 (29.2 Mb)  TX bytes:7878951 (7.5 Mb)
        Interrupt:9 Base address:0x5000
  • Treure el mode promiscu
$ ifconfig eth0 -promisc
$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:30:1B:B7:CD:B6  
        inet addr:192.168.1.33  Bcast:192.168.1.255  Mask:255.255.255.0
        inet6 addr: fe80::230:1bff:feb7:cdb6/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:18444 errors:0 dropped:0 overruns:0 frame:0
        TX packets:20307 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000 
        RX bytes:13262810 (12.6 MiB)  TX bytes:3501026 (3.3 MiB)
        Interrupt:209  

Activar/desactivar ARP

Consulteu també ARP.

  • Treure arp
$ ifconfig eth0 -arp
$ ifconfig eth0
        Link encap:Ethernet  HWaddr 00:80:C8:F8:4A:51
        inet addr:192.168.99.35  Bcast:192.168.99.255  Mask:255.255.255.0
        UP BROADCAST RUNNING NOARP MULTICAST  MTU:1412  Metric:1
        RX packets:190312 errors:0 dropped:0 overruns:0 frame:0
        TX packets:86955 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:100 
        RX bytes:30701229 (29.2 Mb)  TX bytes:7878951 (7.5 Mb)
        Interrupt:9 Base address:0x5000
  • Afegir arp
$ ifconfig eth0 arp
  • IP aliasing

Permet configurar una targeta de xarxa amb múltiples IPs. Per exemple:

ifconfig eth0 192.168.0.2 broadcast 192.168.0.255 netmask 255.255.255.0
ifconfig eth0:1 192.168.0.3 broadcast 192.168.0.255 netmask 255.255.255.0
ifconfig eth0:2 192.168.0.4 broadcast 192.168.0.255 netmask 255.255.255.0
ifconfig eth0:3 192.168.0.5 broadcast 192.168.0.255 netmask 255.255.255.0
ifconfig eth0:4 192.168.0.6 broadcast 192.168.0.255 netmask 255.255.255.0

Pot ser molt útil per afegir-nos a una xarxa si necessitem configurar un switch, router o qualsevol altre dispositiu que de fàbrica esta configurat amb una IP d'una xarxa diferent a la nostra.

Recursos:

NOTA IMPORTANT: TOTS els canvis realitzats amb ifconfig no són canvis permanents. Al reiniciar l'ordinador es restableixen els paràmetres 
establerts als fitxers de configuració (P.ex. en sistemes Debian el fitxer  /etc/network/interfaces).
  • Paquet: net-tools
  • Path: /sbin/ifconfig (podeu trobar el camí de la comanda executant which ifconfig)
  • Manual: man ifconfig

Recursos:

iwconfig

Aquesta comanda ens permet obtindre informació de les interfícies de xarxa que siguin wireless:

$ iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

eth1      IEEE 802.11g  ESSID:"WLAN_8A"
        Mode:Managed  Frequency:2.427 GHz  Access Point: 00:16:38:89:F6:57   
        Bit Rate:54 Mb/s   Tx-Power=20 dBm   Sensitivity=8/0  
        Retry limit:7   RTS thr:off   Fragment thr:off
        Power Management:off
        Link Quality=95/100  Signal level=-33 dBm  Noise level=-91 dBm
        Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
        Tx excessive retries:0  Invalid misc:0   Missed beacon:0

irda0     no wireless extensions.

sit0      no wireless extensions.

És un clon de la comanda ifconfig però adequada als paràmetres de les xarxes wireless.

Podeu trobar més informació a l'apartat iwconfig de l'article d'aquesta wiki sobre Xarxes Linux Wireless.

  • Paquet:wireless-tools
  • Path: /sbin/iwconfig (podeu trobar el path de la comanda executant which iwconfig)
  • Manual: man iwconfig

ifup

Arranca una interfície de xarxa:

$ sudo ifup eth0

Template:Nota

Si la interfície no apareix al fitxer interfaces la comanda ens donarà el següent error:

$ sudo ifup eth4
Ignoring unknown interface eth4=eth4.

Template:Nota.

Cal tenir en compte el funcionament el funcionament d'udev que assigna noms d'interfícies de xarxa segons la MAC en casos especials com:

  • Discs durs extraibles: El mateix sistema operatiu funcionant en diferents màquines idèntiques però que cada targeta de xarxa té la seva MAC
  • Màquines virtuals: Cal també tenir en compte el tema de la MAC
  • Imatges de disc: Si utilitzem eines com partimage o Ghost, tindrem sistemes iguals però cadascú un altre cop amb la seva MAC.

Per exemple en el cas dels discs durs extraibles, udev ens assignarà una ethX on x es diferent per a cada màquina segons la seva MAC. Pot ser que aquesta ethX no estigui al fitxer interfaces!!!. Si passa això hi han dos possibilitats:

  • No tenir Network-Manager: Per exemple amb Ubuntu Server. Aleshores la targeta de xarxa no es configurarà durant l'arrancada del sistema
  • Tenir Network-Manager: Aleshores network manager s'encarregarà de configurar la interfície de xarxa.

Per a tenir més informació sobre com udev i xarxa, consulteu l'apartat:

Si la interfície ja esta configurada ens avisarà:

$ sudo ifup eth0
ifup: interface eth0 already configured

Un altre error pot ser:

$ sudo ifdown eth0
............
SIOCSIFADDR: No such device
eth0: ERROR while getting interface flag: No such device
eth0: ERROR while getting interface flags: No such device
Bind socket to interface: No such device
Failed to bring up eth0.

Podeu consultar més errors i la seva possible solució a Errors de la comanda route.

Molt interessant per a saber més detalls quan tenim errors és utilitzar la opció --verbose:

$ sudo ifup --verbose -a
Configuring interface lo=lo (inet)
run-parts --verbose /etc/network/if-pre-up.d
run-parts: executing /etc/network/if-pre-up.d/050madwifi
run-parts: executing /etc/network/if-pre-up.d/bridge
run-parts: executing /etc/network/if-pre-up.d/uml-utilities
run-parts: executing /etc/network/if-pre-up.d/wireless-tools
run-parts: executing /etc/network/if-pre-up.d/wpasupplicant
ifconfig lo 127.0.0.1 up
run-parts --verbose /etc/network/if-up.d
run-parts: executing /etc/network/if-up.d/avahi-autoipd
run-parts: executing /etc/network/if-up.d/avahi-daemon
run-parts: executing /etc/network/if-up.d/mountnfs
run-parts: executing /etc/network/if-up.d/ntpdate
run-parts: executing /etc/network/if-up.d/openssh-server
run-parts: executing /etc/network/if-up.d/uml-utilities
run-parts: executing /etc/network/if-up.d/wpasupplicant
Configuring interface eth0=eth0 (inet)
run-parts --verbose /etc/network/if-pre-up.d
run-parts: executing /etc/network/if-pre-up.d/050madwifi
run-parts: executing /etc/network/if-pre-up.d/bridge
run-parts: executing /etc/network/if-pre-up.d/uml-utilities
run-parts: executing /etc/network/if-pre-up.d/wireless-tools
run-parts: executing /etc/network/if-pre-up.d/wpasupplicant

ifconfig eth0 192.168.1.2 netmask 255.255.255.0                 up
route add default gw 192.168.1.1 metric 100 eth0 
SIOCADDRT: File exists
Failed to bring up eth0.

Aquest error ens dona quan si que hi ha una entrada per a la interfície (en aquest cas eth0) però no existeix a nivell de hardware o no és la eth0.

És una drecera de la comanda equivalent amb ifconfig:

$ sudo ifconfig eth0 up

Amb el paràmetre -a podem arrancar totes les interfícies del sistema al mateix temps:

sudo ifup -a

Veieu l'exemple DHCP amb ifup i ifdown per a més informació.

  • Paquet: ifupdown
  • Path: /sbin/ifup (podeu obtenir el path amb la comanda which ifup)
  • Manual: man ifup

Script Hooks. Fitxers .d de configuració de la xarxa

Hi ha 4 tipus de fitxers Hook Script:

Template:Important

Hi ha una sèrie de variables que podeu utilitzar als scripts:

# Don't bother to restart sshd when lo is configured.
if [ "$IFACE" = lo ]; then
        exit 0
fi

# Only run from ifup.
if [ "$MODE" != start ]; then
        exit 0
fi

# OpenSSH only cares about inet and inet6. Get ye gone, strange people
# still using ipx.
if [ "$ADDRFAM" != inet ] && [ "$ADDRFAM" != inet6 ]; then
        exit 0
fi

ifdown

Atura una interfície de xarxa:

sudo ifdown eth0

És una dreçera de la comanda equivalent amb ifconfig:

sudo ifconfig eth0 down

Amb el paràmetre -a podem apagar totes les interfícies de xarxa al mateix temps

$ sudo ifdown -a

NOTA: Cal parar molta atenció a no aturar les interfícies de xarxa en servidors remots al quals ens connectem via SSH. Aquesta comanda ens impediria l'accés a la màquina i per tant obligaria a desplaçar-nos fins al DATACENTER per solucionar l'error.

Veieu l'exemple DHCP amb ifup i ifdown per a més informació.

  • Paquet: ifupdown
  • Path: /sbin/ifdown (podeu obtenir el path amb la comanda which ifdown)
  • Manual: man ifdown

ping

Consulteu:

ICMP#Ping

arp

El protocol ARP (Address Resolution Protocol) s'encarrega de traduir adreces IP a adreçes MAc al nivell d'enllaç en les xarxes LAN. ARP és un protocol que funciona que utilitza missatges de difusió a tota la xarxa per descobrir quin node de la xarxa té la IP demanada i aconseguir la seva MAC. Un cop aconsegueix la MAC, l'emmagatzema a la taula ARP.

Podem consultar aquesta taula amb la comanda:

$ arp
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.1.36             ether   00:0C:29:D3:47:00   C                     eth0
192.168.1.34             ether   00:0E:35:29:2A:48   C                     eth0
192.168.1.1              ether   00:30:DA:89:FC:8A   C                     eth0

Per afegir una entrada a la taula ARP:

$ sudo arp -s 192.168.1.35 00:50:04:62:F7:23

Ho podem comprovar amb:

$ arp
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.1.34             ether   00:0E:35:29:2A:48   C                     eth0
192.168.1.36             ether   00:0C:29:D3:47:00   C                     eth0
192.168.1.1              ether   00:30:DA:89:FC:8A   C                     eth0
192.168.1.35             ether   00:50:04:62:F7:23   CM                    eth0

Podeu obtenir totes les MACs de la xarxa i omplir la taula ARP amb la comanda nmap. Suposem la xarxa de tipus C 192.168.1.0, executem:

$ sudo nmap 192.168.1.1-255

Un cop finalitzi la comanda tornem a consultar la taula ARP

$ arp

NOTA: Com veieu, aquesta comanda, conjuntament amb la comanda nmap, pot ser molt útil per tal d'aconseguir totes les MACs dels PCs d'una xarxa.

  • Paquet Debian: [[Xarxes_Linux#Paquet_net-tools_.28abans_netbase.29 | net-tools
  • Path: /usr/sbin/arp (podeu executar which arp per conèixer el path de la comanda)
  • Manual: man arp

Ús de la comanda ping per entendre millor el funcionament del protocol ARP

Si consultem la taula arp d'una màquina (IP:192.168.0.7) dins d'una xarxa local de clase C 192.168.0.0:

$ arp
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.0.5              ether   00:30:05:4C:90:1C   C                     eth0
192.168.0.1              ether   00:13:49:87:40:66   C                     eth0

I executem:

$ ping 192.168.0.10
PING 192.168.0.10 (192.168.0.10) 56(84) bytes of data.
64 bytes from 192.168.0.10: icmp_seq=1 ttl=64 time=10.7 ms
64 bytes from 192.168.0.10: icmp_seq=2 ttl=64 time=0.289 ms
64 bytes from 192.168.0.10: icmp_seq=3 ttl=64 time=0.291 ms
64 bytes from 192.168.0.10: icmp_seq=4 ttl=64 time=0.302 ms
.............

Si us fixeu, el primer paquet ping tarda força més en respondre (10.7ms) que és unes 37 vegades més que el que tarden els següents paquets.... Recordeu que estem fent un ping a una màquina de la mateixa xarxa. Si consultem ara la taula arp:

$ arp
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.0.5              ether   00:30:05:4C:90:1C   C                     eth0
192.168.0.1              ether   00:13:49:87:40:66   C                     eth0
192.168.0.10             ether   00:48:54:8D:58:47   C                     eth0

Veiem que hi ha una nova entrada a la taula d'ARP. El primer paquet tarda més temps perquè ha de traduir l'adreça IP que li proporcionem (192.168.1.10) per la corresponent adreça MAC (00:48:54:8D:58:47). Per fer aquesta traducció s'executa el protocol ARP un cop, i una vegada resolta la MAC s'emmagatzema a la taula local ARP. Un cop emmagatzemada ja no cal fer més la traducció IP-->MAC i per això la resta de paquets o següents pings ja no tardaran tant:

$ ping 192.168.0.10
PING 192.168.0.10 (192.168.0.10) 56(84) bytes of data.
64 bytes from 192.168.0.10: icmp_seq=1 ttl=64 time=0.234 ms
64 bytes from 192.168.0.10: icmp_seq=2 ttl=64 time=0.291 ms
64 bytes from 192.168.0.10: icmp_seq=3 ttl=64 time=0.258 ms
..........................

arping

Arping és una comanda molt similar a ping però que utilitza el protocol ARP en comptes del ICMP. Com a conseqüència aquesta comanda només es pot utilitzar entre màquines de la mateixa xarxa local. Igual que ping envia un paquet ARP REQUEST. Exemple:

$ arping -c 4 192.168.0.10
WARNING: interface is ignored: Operation not permitted
ARPING 192.168.0.10 from 192.168.0.7 eth0
Unicast reply from 192.168.0.10 [00:48:54:8D:58:47]  0.663ms
Unicast reply from 192.168.0.10 [00:48:54:8D:58:47]  0.684ms
Unicast reply from 192.168.0.10 [00:48:54:8D:58:47]  0.681ms
Unicast reply from 192.168.0.10 [00:48:54:8D:58:47]  0.671ms
Sent 4 probes (1 broadcast(s))
Received 4 response(s)

Per instal·lar, cal executar la comanda:

$ sudo apt-get install iputils-arping

El funcionament és molt similar a la comanda ping. El paràmetre c és igual i l'opció per defecte també és il·limitats "pings" que els podem aturar amb la combinació de tetcles Ctrl+C.

  • Paquet: iputils-arping
  • Path: /usr/bin/arping (podeu consultar el path executant which arping)
  • Manual: man arping

Provocar arp-replys

Primer cal assignar-se una IP:

$ sudo ip addr add 192.168.9.35 dev wlan0

Ara enviar els paquets ARP-REPLY:

$ sudo arping -q -c 3 -A -I wlan0 192.168.99.35

On:

  • -q: sortida silenciosa
  • -c: número de peticions enviades
  • -A (o -U): arping envia peticions arp-request per defecte. Amb aquesta opció envia peticions ARP-REPLY.
  • -I device: Permet indicar la interfície de xarxa.

Els podeu observar amb:

$ sudo tcpdump -c 3 -nni wlan0 arp
...
06:02:50.626330 arp reply 192.168.99.35 is-at 0:80:c8:f8:4a:51 (0:80:c8:f8:4a:51) 
06:02:51.622727 arp reply 192.168.99.35 is-at 0:80:c8:f8:4a:51 (0:80:c8:f8:4a:51) 
06:02:52.620954 arp reply 192.168.99.35 is-at 0:80:c8:f8:4a:51 (0:80:c8:f8:4a:51)

Provocar arp-requests

$ sudo arping -q -c 3 -U -I eth0 192.168.99.35


Els podeu observar amb:

$ sudp tcpdump -c 3 -nni eth0 arp


Detectar duplicats

$ sudo arping -D -I eth0 192.168.99.147; echo $?

rarp

Aquest programa és obsolet (els nous kernels ja no l'utilitzen). Ho podeu comprovar executant:

$ rarp -a
This kernel does not support RARP.
  • Paquet Debian: net-tools
  • Path: /usr/sbin/rarp (podeu executar which rarp per conèixer el path de la comanda)
  • Manual: man rarp

dhclient

  • Paquet: net-tools
  • Path: /sbin/dhclient (podeu trobar el camí de la comanda executant which dhclient)
  • Manual: man dhclient

route

NOTA: Es recomana utilitzar la comanda ip per configurar rutes estàtiques.

La comada route permet mostrar o manipular la taula de rutes ip de la màquina. Igual que passa amb la comanda ifconfig, el seu ús més habitual és mostrar la taula de rutes, executant route sense paràmetres:

$ route
Kernel IP routeing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.196.0   *               255.255.255.0   U     0      0        0 vmnet8
192.168.1.0 *              255.255.255.0   U     0      0        0 eth0
192.168.252.0   *               255.255.255.0   U     0      0        0 vmnet1
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

En negreta trobem la taula de rutes de la targeta de xarxa principal (eth0). Les altres targetes (vmnet8 i vmnet1), són les targetes virtuals de l'emulador de màquines Vmware. Podeu trobar més informació sobre la xarxa de vmware aquí.

Si interpretem línia a línia:

192.168.1.0 *              255.255.255.0   U     0      0        0 eth0

Aquesta línia s'encarrega de les adreces de xarxa Local i ens indica que la ruta per arribar a totes les adreces de xarxa local (192.168.1.0 | rang: 192.168.1.1-254) és *. L'asterisc representa que no cal passar per cap node|router|gateway per arribar a una destinació local o, el que és el mateix, que les màquines amb adreça local estan connectades directament entre elles a nivell d'enllaç.

default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

Aquesta línia s'encarrega de la resta d'adreces (default). El que ens indica és que el primer node pel qual hem de passar per assolir qualsevol adreça IP és el node amb IP 192.168.1.1. Aquesta màquina és la que anomenen Gateway|pasarel·la o router.

Per tant, la forma més senzilla de consultar el nostre gateway és amb la comanda route.

Veiem ara un exemple més complex, amb la taula de rutes d'un router amb 5 targetes de xarxa (connectat a 5 subxarxes):

$ /sbin/route 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.213.0   *               255.255.255.0   U     0      0        0 eth2
192.168.0.0 *              255.255.255.0   U     0      0        0 eth0
192.168.217.0   *               255.255.255.0   U     0      0        0 eth4
192.168.216.0   *               255.255.255.0   U     0      0        0 eth3
192.168.10.0*              255.255.255.0   U     0      0        0 eth1
169.254.0.0 *              255.255.0.0     U     0      0        0 eth4
default         192.168.10.1    0.0.0.0         UG    0      0        0 eth1

Com podem veure hi ha 5 targetes de xarxa o NICs (eth0,eth1,eth2,eth3,eth4), 5 subxarxes de clase C (192.168.0.0, 192.168.10.0, 192.168.213.0, 192.168.216.0, 192.168.217.0) i una subxarxa de clase B (169.254.0.0). Per tant aquesta xarxa té 6 subxarxes connectades entre elles per un router i connectades a Internet a través del gateway 192.168.10.1 que està a la subxarxa 192.168.10.0.

La taula de rutes d'una màquina es compon de dues parts. Hi ha una part fixa|estàtica que es conserva al reiniciar l'ordinador i un part cache que emmagatzema rutes temporals. Podem veure totes dues taules amb la comanda:

$route -CFvee
Kernel IP routeing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface    MSS   Window irtt
192.168.196.0   *               255.255.255.0   U     0      0        0 vmnet8   0     0      0
192.168.1.0 *              255.255.255.0   U     0      0        0 eth0     0     0      0
192.168.252.0   *               255.255.255.0   U     0      0        0 vmnet1   0     0      0
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0     0     0      0
Kernel IP routeing cache
Source          Destination     Gateway         Flags Metric Ref    Use Iface    MSS   Window irtt  TOS HHRef HHUptod     SpecDst
nobel.upc.es    192.168.1.33    192.168.1.33    l     0      0       14 lo       0     0      0     0   -1    0      192.168.1.33
250.Red-80-58-6 192.168.1.33    192.168.1.33    l     0      0       55 lo       0     0      0     0   -1    0      192.168.1.33
192.168.1.33    post2.audioscro 192.168.1.1           0      0        1 eth0     1500  0      120   0   6     0      192.168.1.33
192.168.1.33    fiordland.ubunt 192.168.1.1           0      0        1 eth0     1500  0      0     10  6     0      192.168.1.33
192.168.1.33    post2.audioscro 192.168.1.1           0      0        0 eth0     1500  0      0     0   -1    0      192.168.1.33
192.168.1.35    192.168.1.255   192.168.1.255   ibl   0      0       38 lo       0     0      0     0   -1    0      192.168.1.33
fiordland.ubunt 192.168.1.33    192.168.1.33    l     0      0        1 lo       0     0      0     0   -1    0      192.168.1.33
192.168.1.33    nobel.upc.es    192.168.1.1           0      1        0 eth0     1500  0      0     0   6     0      192.168.1.33
192.168.1.1     192.168.1.33    192.168.1.33    il    0      0        3 lo       0     0      0     0   -1    0      192.168.1.33
post2.audioscro 192.168.1.33    192.168.1.33    l     0      0        6 lo       0     0      0     0   -1    0      192.168.1.33
192.168.1.33    250.Red-80-58-6 192.168.1.1           0      0       62 eth0     1500  0      0     0   -1    0      192.168.1.33
192.168.1.33    250.Red-80-58-6 192.168.1.1           0      0       62 eth0     1500  0      0     0   6     0      192.168.1.33
localhost       localhost       localhost       l     0      1        0 lo       16436 0      0     0   2     1         localhost
*               255.255.255.255 255.255.255.255 bl    0      0        3 lo       0     0      0     0   -1    0      192.168.1.33

La cache s'omple a mesura que s'utilitzen recursos de xarxa. Podem destacar (en negreta) la taula de rutes de localhost (127.0) a la interfície de loopback (lo).

Ara veiem alguns exemples de manipulació de la taula de rutes:

route add -net 127.0.0.0

Afegeix la entrada normal de loopback (normalment ja ho tenim configurat així)

route add -net 192.56.76.0 netmask 255.255.255.0 eth0

Afegeix una ruta a la xarxa 192.56.76.x a través de la targeta de xarxa eth0. La màscara de classe C 255.255.255.0 no és necessària perquè la xarxa 192.56.76.0 és de classe C.

route add default gw gateway-machine-name

Aquesta comanda configura un gateway. La passarel·la·la ha de ser accessible per xarxa local o sinó caldrà afegir una ruta estàtica fins l'encaminador. Per tal de tenir la línia de la taula de rutes següent (extreta de l'exemple anterior):

  default         192.168.10.1    0.0.0.0         UG    0      0        0 eth1

Hauríem d'executar

route add default gw 192.168.10.1 eth1

Per esborrar-lo:

route del default gw 192.168.10.1 eth1

La següent comanda elimina una ruta de la taula de rutes:

route del -net 10.207.161.0

El fitxer que emmagatzema físicament la taula de rutes actual és /proc/net/route.

NOTA: És important recordar que de la mateixa manera que succeïx amb ifconfig, les rutes afegides amb la comanda route
es perden al reiniciar o al  apagar la interfície de xarxa. Veieu el fitxer [[Xarxes_Linux#.2Fetc.2Fnetwork.2Finterfaces | /etc/network/interfaces] 
per tal d'afegir rutes de forma permanent.
  • Paquet: net-tools
  • Path: /sbin/route (podeu trobar el camí de la comanda executant which route)
  • Manual: man route

Missatges d'error de la comanda route

Els missatges d'error són una mica críptics. Anem a veure com funcionen...

Hi ha dos tipus:

  • SIOCDELRT: és un missatge d'error que succeïx quan s'està esborrant una ruta (DELeting RouTe)
  • SIOCDELRT: és un missatge d'error que succeïx quan s'està afegint una ruta (ADDing RouTe)

Errors típics:

IOCADDRT: Network is unreachable

Per exemple la comanda

$ sudo route add default gw 1.2.3.4

Pot donar aquest error si el gateway 1.2.3.4 no està directament connectat al mateix segment de xarxa que la màquina on executem aquesta comanda.

IOCADDRT: File exists

S'està afegint una ruta que ja existeix.

SIOCADDRT: No such device

    You omitted the gw keyword before the default gateway address, as in:
           route add -net 10.2.2.76/24 10.1.1.22                              wrong

SIOCDELRT No such process

S'està intentant esborrar una ruta que no existeix. Llisteu les rutes amb:

$ sudo route -n

I comproveu quin és l'error que esteu cometent.

SIOCADDRT: Operation not supported by device

S'està ometen el paràmetre gw:

$ sudo route add -net 10.0.0.0/8 10.1.1.254                               
$ sudo route add -net 172.23.24.128/25                                    

Són incorrectes:

$ sudo route add -net 10.0.0.0/8 gw 10.1.1.254                    
$ sudo route add -net 172.23.24.128/25 gw 10.1.1.22             

SIOCADDRT: Operation not permitted

No s'està executant route com a superusuari. Poseu el sudo davant.

SIOCADDRT: Invalid argument

Exemples incorrectes:

$ sudo route add -net 10.2.2.0 gw 10.1.1.254                             
$ sudo route del -net 172.23.0.0                                         

Falta la màscara. Correcte:

$ sudo route add -net 10.2.2.0 netmask 255.255.255.0 gw 10.1.1.254
$ sudo route add -net 10.2.2.0/24 gw 10.1.1.254                                 


Recursos:

netstat

Consulteu netstat.

ip

Template:Nota

ip és l'eina de nova generació pensada per substituir eines com ifconfig o route. Es proporcionada per LARTC (Linux Advanced Routing an Traffic Control)

  • Paquet: iproute
  • Path: /sbin/ip (podeu trobar el camí de la comanda executant which ip)
  • Manual:man ip

Recursos:

ip link

Exemples:

$ sudo ip link show eth0
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
   link/ether 00:1d:09:59:10:39 brd ff:ff:ff:ff:ff:ff

Activar mode promiscu:

$ sudo ip link set eth0 promisc on

Per desactivar-lo:

$ sudo ip link set eth0 promisc off

ip route

L'ordre ip route s'utilitza per configurar les rutes i està pensada per substituir route. A diferència de route permet Policy Routing (route només permet encaminar segons la IP de destinació) Vegeu:

http://lartc.org/howto/lartc.iproute2.html#LARTC.IPROUTE2.WHY

i lartc.

Per exemple la comanda:

$ sudo route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.1.20

És equivalent a:

$ sudo ip route add dev eth0 to 192.168.10.0/24 via 192.168.1.20

Per entendre les tècniques d'Advanced Routing cal entendre com el nucli del sistema encamina:

1) Primer es consulta el cache d'encaminament (routing cache). ES tracta d'una taula hash en memòria RAM que conté les rutes utilitzades recentment i permet encaminar de forma més ràpida. Si es troba una entrada a la cache aleshores s'aplica i no es continua el procés.
2) Si no hi ha entrada a la cache, aleshores el kernel comença el procés de selecció de ruta (route selection)
3) El nucli itera per prioritat a la base de dades d'encaminament (RPDB o Routing Policy DataBase). Per cada coincidència a la RPDB el nucli intenta trobar una ruta coincident a la ip de destinació a la taula de rutes especificada.
For each matching entry in the RPDB, the kernel will try to find a matching route to the destination IP address in the specified routing table using the aforementioned 
longest prefix match selection algorithm (LPM o Longest Prefix Match [1]). When a matching destination is found, the 
kernel will select the matching route, and forward the packet. If no matching entry is found in the 
specified routing table, the kernel will pass to the next rule in the RPDB, until it finds a match or falls through the end of the RPDB and all consulted routing tables.

Table 4.1. Keys used for hash table lookups during route selection

route cache RPDB 2 route table
destination source destination
ToS ToS scope
fwmark fwmark oif
iif iif

The route cache (also the forwarding information base) can be displayed using ip route show cache. The routing policy database (RPDB) can be manipulated with the ip rule utility. Individual route tables can be manipulated and displayed with the ip route command line tool.

Example 4.5. Listing the Routing Policy Database (RPDB)

[root@isolde]# ip rule show 0: from all lookup local 32766: from all lookup main 32767: from all lookup 253


Observation of the output of ip rule show in Example 4.5, “Listing the Routing Policy Database (RPDB)” on a box whose RPDB has not been changed should reveal a high priority rule, rule 0. This rule, created at RPDB initialization, instructs the kernel to try to find a match for the destination in the local routing table. If there is no match for the packet in the local routing table, then, per rule 32766, the kernel will perform a route lookup in the main routing table. Normally, the main routing table will contain a default route if not a more specific route. Failing a route lookup in the main routing table the final rule (32767) instructs the kernel to perform a route lookup in table 253.

A common mistake when working with multiple routing tables involves forgetting about the statelessness of IP routing. This manifests when the user configuring the policy routing machine accounts for outbound packets (via fwmark, or ip rule selectors), but forgets to account for the return packets. 4.5.3. Summary

For more ideas on how to use policy routing, how to work with multiple routing tables, and how to troubleshoot, see Section 10.3, “Using the Routing Policy Database and Multiple Routing Tables”.

Yeah. That's it. So there.

Script per reiniciar totes les rutes i normes
#!/bin/bash

    #During debugging, show pre-execution conditions
    echo ***Before
    echo ...Rules...
    ip ru sh
    echo ...Routes...
    ip ro sh
    echo ...Rules for table WAN1...
    ip ro sh table WAN1
    echo ...Rules for table WAN2...
    ip ro sh table WAN2
    echo

#This script flushes all routes and rules, EXCEPT those specified to remain
# Copyright, 2003, Carol Anne Ogdin.  This script is freely available
# for use under the terms of the GNU General Public License published at
# http://www.gnu.org/copyleft/gpl.html.  Any improvements/enhancements
# gratefully accepted; send them to caogdin (at) deepwoods (dot) com.

# (Constants for the script)
# We must know the device names of interfaces (such as our local LAN, and  lo)
#  that should NEVER be taken down, so we can retain LAN-based control of  the
#  router (where our administrator is working).  For AWK, they're separated
#  by an "or" operator (vertical bar)

iifs="eth0|lo"                # interfaces we never touch (awk regexp)

# Next, we need to know the non-standard tables (if any) we use.  Again,for
#  AWK, these need to be separated by vertical bars.
#  (In a future version, this information could be obtained by parsing
#  /etc/iproute2/rt_tables

ours="WAN1|WAN2"              # our table/lookup names used (awk regexp)

# (End of constants)

keepers="dev ($iifs)"         # devices NOT to be removed
tables="lookup ($ours)"       # rules that look like this are to be removed

# Initialize, and clean up any lingering stuff from prior test executions
# Step 1: Remove all default route(s), if any
#    Note a condition of this script:  Every ip ro sh and ip ru sh must
#    produce lines that are complete entries.  The only exception is the
#    "default" route which is separately deleted first because, if you're
#    configured for "split access," (see LARTC) may display on several
#    successive lines.

ip route delete default &>/dev/null  # Always get rid of default first

  # How the AWK program is constructed to delete all routes on $iifs
  # $0 !~ $keepers {{       Select only lines that aren't to be kept
  # print "ip route delete "Issue the command-building command
  # $0                        and output the routing table entry as  arguments
  # | "bash" }              Finally, pipe the constructed command to bash
# Step 2: Remove main routes not excluded by $keepers

ip route show | awk -v k="$keepers" '$0 !~ k \
    { print " ip route delete " $0 | "bash" }'

# Step 3: Remove all routes from our tables
for wan in ${ours//|/ }; do
  ip route flush table $wan &>/dev/null
done

# Remove all our rules
  # How the AWK program is constructed to get the results we want
  # $0 ~ $tables {{         Select only lines that are to be removed
  # sub(/from all /,"");    For those lines, delete any "from all " string
  # print "ip rule delete " Issue the command-building command
  # substr($0, 8)             and output all except the rule #
  # | "bash" }              Finally, pipe the constructed command to bash

ip rule show | awk -v k="$tables" '$0 ~ k \
    { sub(/from all/,""); print "ip rule delete " substr($0, 8) | "bash" }'

ip route flush cache        # Flush the cache so nothing lingers

# End of GNU General Public Licensed script.

    # While testing this script:  Show results.
    echo
    echo ***After
    echo ...Rules...
    ip ru sh
    echo ...Routes...
    ip ro sh
    echo ...Rules for table WAN1...
    ip ro sh table WAN1
    echo ...Rules for table WAN2...
    ip ro sh table WAN2
Tipus de normes
  • unicast: És la més comuna i el que s'aplica per defecte si no es diu res. L'únic que fa és indicar quina és taula que s'ha d'aplicar si es compleixen els criteris especificats. Exemples:
ip rule add unicast from 192.168.100.17 table 5

és el mateix que:

ip rule add from 192.168.100.17 table 5

Altres exemples:

ip rule add unicast iif eth7 table 5
ip rule add unicast fwmark 4 table 4
               
  • nat: The nat rule type is required for correct operation of stateless NAT. This rule is typically coupled with a corresponding nat route entry. The RPDB nat entry causes the kernel to rewrite the source address of an outbound packet. See Section 5.3, “Stateless NAT with iproute2” for a fuller discussion of network address translation in general.

Exemples:

ip rule add nat 193.7.255.184 from 172.16.82.184
ip rule add nat 10.40.0.0 from 172.40.0.0/16
               
  • unreachable: Any route lookup matching a rule entry with an unreachable rule type will cause the kernel to generate an ICMP unreachable to the source address of the packet.
Example 4.18. unreachable rule type
ip rule add unreachable iif eth2 tos 0xc0
ip rule add unreachable iif wan0 fwmark 5
ip rule add unreachable from 192.168.7.0/25
            
  • prohibit: Any route lookup matching a rule entry with a prohibit rule type will cause the kernel to generate an ICMP prohibited to the source address of the packet.

Example 4.19. prohibit rule type

ip rule add prohibit from 209.10.26.51
ip rule add prohibit to 64.65.64.0/18
ip rule add prohibit fwmark 7
               
  • blackhole: While traversing the RPDB, any route lookup which matches a rule with the blackhole rule type will cause the packet to be dropped. No ICMP will be sent and no packet will be forwarded.

Example 4.20. blackhole rule type

ip rule add blackhole from 209.10.26.51
ip rule add blackhole from 172.19.40.0/24
ip rule add blackhole to 10.182.17.64/28
  • throw: The throw route type is a convenient route type which causes a route lookup in a routing table to fail, returning the routing selection process to the RPDB. This is useful when there are additional routing tables. Note that there is an implicit throw if no default route exists in a routing table, so the route created by the first command in the example is superfluous, although legal.

Example 4.14. throw route types

ip route add throw default
ip route add throw 10.79.0.0/16
ip route add throw 172.16.0.0/12
  • broadcast: This route type is used for link layer devices (such as Ethernet cards) which support the notion of a broadcast address. This route type is used only in the local routing table [26] and is typically handled by the kernel.

Example 4.8. broadcast route types

ip route add table local broadcast 10.10.20.255 dev eth0 proto kernel scope link src 10.10.20.67
ip route add table local broadcast 192.168.43.31 dev eth4 proto kernel scope link src 192.168.43.14
                 
  • local: The kernel will add entries into the local routing table when IP addresses are added to an interface. This means that the IPs are locally hosted IPs [27].

Example 4.9. local route types

ip route add table local local 10.10.20.64 dev eth0 proto kernel scope host src 10.10.20.67
ip route add table local local 192.168.43.12 dev eth4 proto kernel scope host src 192.168.43.14
                                 
Routing cache o FIB (forwarding information base)

La memòria cau d'encaminament o aka routing cache o Forwarding Information Base (FIB). La seva funció és emmagatzemaar les entrades de rutes utilitzades recentment. Es tracta d'una taula Hash i es consulta abans que les taules de rutes. Si es troba una coincidència a la cache la ruta s'aplica automàticament i es deixa de provar la resta d'opcions de la resta de rutes i taules de rutes.

Quan es fa un canvi a les rutes no s'apliquen automàticament per culpa de la memòria cau. Es poden aplicar els canvis fent un flush.

$ sudo ip route flush cache

La memòria cau es pot consultar amb:

$ sudo ip route show cache

Les claus que es troben a la taula hash són:

TODO Compare this list with the elements identified in Table 4.1, “Keys used for hash table lookups during route selection”.
  • dst, Destination Address: The destination IP address of the packet. This is the destination address on the packet at the time of the route lookup. The address is a host address. All 32 bits are significant during this lookup.
  • src, Source Address: The source IP address of the packet. This is the source address on the packet at the time of the route lookup. The address is a host address. All 32 bits are significant during this lookup.
  • tos, Type of Service: The ToS marking on the packet. If there is no ToS marking on the packet (tos == 0), this lookup key is unused. If there is a ToS marking, the kernel will search for a match with this ToS value. If no matching (dst, src, tos) is found, the kernel will continue the search for a route by traversing the RPDB.
  • fwmark: The mark on a packet added administratively by the packet filtering engine (ipchains or iptables). This mark is not part of the physical IP packet, and only exists as part of the data structure held in memory on the routing device to represent the IP packet. If there is no fwmark on the packet, this lookup key is unused. When present, the kernel will search for a matching (dst, src, tos?, fwmark) entry. If no matching entry is found, the kernel will continue the search for a route by traversing the RPDB.
  • iif, inbound interface: The name of the interface on which the packet arrived.

The following attributes may be stored for each entry in the routing cache.

  • cwnd, FIXME Window
  • FIXME. A) I don't know what it is. B) I don't know how to describe it.
  • advmss, Advertised Maximum Segment Size
  • src, (Preferred Local) Source Address
  • mtu, Maximum Transmission Unit
  • rtt, Round Trip Time
  • rttvar, Round Trip Time Variation
  • FIXME. Gotta find some references to this, too.
  • age
  • users
  • used

TODO Collectively the hash keys uniquely identify routes in the forwarding information base (routing cache) and each entry provides attributes of the route.


Recursos:

Rutes per defecte i routing policy

Routing policy o política de rutes o encaminament ([2]) permet establir diferents polítiques segons certs criteris (segons l'usuari, la IP d'origen...). La base de dades de polítiques de rutes (routing policy database) permet tenir tenir diferents conjunts de taules de rutes. Quan el nucli del sistema operatiu (kernel) ha de prendre un decisió de rutes consulta les taules de rutes. Per defecte hi ha 3 normes:

$ ip rule list
0:	from all lookup local 
32766:	from all lookup main 
32767:	from all lookup default 

Template:Nota

Template:Nota

L'ordre ip rule list llista la prioritat de totes les normes. Totes les normes s'apliquen a tots els paquets ('from all'). La taula main és la que ens mostra per defecte l'ordre route i podeu observar que hi ha dues taules noves:

  • local:
  • default:

Amb l'ordre ip podem implementar polítiques de rutes, creant normes que s'apliquin a taules diferents a les per defecte, és a dir aquests polítiques sobreescriuen la política per defecte en certes situacions.

Les trobareu al fitxer /etc/iproute2/rt_tables

cat /etc/iproute2/rt_tables 
#
# reserved values
#
255	local
254	main
253	default
0	unspec
#
# local
#
#1	inr.ruhep

Template:Nota

Les podeu mostrar amb:

$ sudo ip route show table local
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1 
broadcast 192.168.111.255 dev wlan0  proto kernel  scope link  src 192.168.111.29 
local 192.168.111.29 dev wlan0  proto kernel  scope host  src 192.168.111.29 
broadcast 192.168.111.0 dev wlan0  proto kernel  scope link  src 192.168.111.29 
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1 
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1 
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1 
$ sudo ip route show table main
192.168.111.0/24 dev wlan0  proto kernel  scope link  src 192.168.111.29  metric 2 
169.254.0.0/16 dev wlan0  scope link  metric 1000 
192.168.0.0/16 via 192.168.111.100 dev wlan0 
10.0.0.0/8 via 192.168.111.100 dev wlan0 
default via 192.168.111.1 dev wlan0  proto static 
$ sudo ip route show table default
$ sudo ip route show table unspec
192.168.111.0/24 dev wlan0  proto kernel  scope link  src 192.168.111.29  metric 2 
169.254.0.0/16 dev wlan0  scope link  metric 1000 
192.168.0.0/16 via 192.168.111.100 dev wlan0 
10.0.0.0/8 via 192.168.111.100 dev wlan0 
default via 192.168.111.1 dev wlan0  proto static 
broadcast 127.255.255.255 dev lo  table local  proto kernel  scope link  src 127.0.0.1 
broadcast 192.168.111.255 dev wlan0  table local  proto kernel  scope link  src 192.168.111.29 
local 192.168.111.29 dev wlan0  table local  proto kernel  scope host  src 192.168.111.29 
broadcast 192.168.111.0 dev wlan0  table local  proto kernel  scope link  src 192.168.111.29 
broadcast 127.0.0.0 dev lo  table local  proto kernel  scope link  src 127.0.0.1 
local 127.0.0.1 dev lo  table local  proto kernel  scope host  src 127.0.0.1 
local 127.0.0.0/8 dev lo  table local  proto kernel  scope host  src 127.0.0.1 
fe80::/64 dev wlan0  proto kernel  metric 256  mtu 1500 advmss 1440 hoplimit 0
unreachable default dev lo  table unspec  proto kernel  metric -1  error -101 hoplimit 255
local ::1 via :: dev lo  table local  proto none  metric 0  mtu 16436 rtt 0.00ms rttvar 0.00ms cwnd 3 advmss 16376 hoplimit 0
local fe80::21f:3cff:fe52:79c0 via :: dev lo  table local  proto none  metric 0  mtu 16436 advmss 16376 hoplimit 0
ff00::/8 dev wlan0  table local  metric 256  mtu 1500 advmss 1440 hoplimit 0
unreachable default dev lo  table unspec  proto kernel  metric -1  error -101 hoplimit 255

o:

$ sudo ip route show table 255
$ sudo ip route show table 254
$ sudo ip route show table 253
$ sudo ip route show table 0

Eliminar una norma:

$ ip rule del XXXXXXXXXXXXXX

On XXXXXXXX és el mateix que es va posar al fer el add. Si per exemple vam executar:

$ ip rule add from 10.0.0.10 table John

Cal posar:

ip rule del from 10.0.0.10 table John

Template:Nota

Prioritat de les normes:

Exemple:

# ip rule add from I.P.OF.PPP0 pri 200 table PPP0
# ip rule add from I.P.OF.PPP1 pri 300 table PPP1

On pri (o priority) controla la prioritat. Quan major és el número que s'indica MENOR és la prioritat. LA prioritat va de 0 en endavant fins a la prioritat 32767 sent la 0 la més prioritària. Les taules per defecte són

$ sudo ip rule show
0:	from all lookup local 
32766:	from all lookup main 
32767:	from all lookup default 

És a dir la taula de rutes per a loopback/localhost és la de màxima prioritat i les taules main i default són les últimes taules.

Template:Nota

Recursos:

Source routing:

Cal afegir una nova norma a una nova taula:

Definim la nova taula de rutes:

# echo 200 John >> /etc/iproute2/rt_tables

Afegim la norma

# ip rule add from 10.0.0.10 table John
# ip rule ls
0:	from all lookup local 
32765:	from 10.0.0.10 lookup John
32766:	from all lookup main 
32767:	from all lookup default

En aquest cas, abans de la taula principal (i després de local!) s'aplicarà una nova taula de rutes quan els paquet provinguin de la IP 10.0.0.10. Ara només cal definir la ruta especial per a la taula John

# ip route add default via 195.96.98.253 dev ppp2 table John
# ip route flush cache

Template:Nota

Ara John utilitzarà un gateway que no és el gateway per defecte que apareix a l'ordre route!

Enrutament segons una marca establerta amb iptables:

Crear les taules:

# echo 200 PPP0 >> /etc/iproute2/rt_tables
# echo 201 PPP1 >> /etc/iproute2/rt_tables

Afegir les dos entrades a la taula de rutes (xarxa local i default gw). L'exemple és amb una interfície PPP directament connectada a Internet.

# ip route add MY.GA.TE.WAY dev ppp0 table PPP0
# ip route add default via MY.GA.TE.WAY dev ppp0 table PPP0

i el mateix amb ppp1

# ip route add MY.GA.TE.WAY dev ppp1 table PPP1
# ip route add default via MY.GA.TE.WAY dev ppp1 table PPP1

Mostreu els canvis:

# ip route list table PPP0
MY.GA.TE.WAY dev ppp0  scope link 
default via MY.GA.TE.WAY dev ppp0 

# ip route list table PPP1
MY.GA.TE.WAY dev ppp1  scope link 
default via MY.GA.TE.WAY dev ppp1 

Ara marquem els paquets, per exemple marcarem els paquets d'un usuari concret:

$ sudo iptables -t mangle -A OUTPUT -m owner --uid-owner 108 -j MARK --set-mark 1

L'usuari té el UUID 108.

Alternativa que no sabem si funciona:

$ sudo iptables -t mangle -A OUTPUT -m owner --cmd-owner sshd -j MARK --set-mark 1 
   ( another sidenote: AFAIK, the '--cmd-owner' flag does not work in recent ( >= 2.6.15 ) kernels 

Ara afegim una norma d'enrutament:

# ip rule add fwmark 1 pri 100 table PPP1

Envia tot el que tingui la marca 1 a la taula PPP1.

Encara ens queda activar el SNAT

# iptables -t nat -A POSTROUTING -o ppp1 -j SNAT --to-source=I.P.OF.PPP1

O Masquerade si la IP no és fixa:

# iptables -t nat -A POSTROUTING -o ppp1 -j MASQUERADE

També cal desactivar rp_filter

# echo 0 > /proc/sys/net/ipv4/conf/ppp1/rp_filter 

Ara cal assegurar-se que tots els paquets que entren per les interfícies de xarxa connectades a Internet, també utilizin la ruta que els asseguri que retornen per la mateixa targeta de xarxa:

# ip rule add from I.P.OF.PPP0 pri 200 table PPP0
# ip rule add from I.P.OF.PPP1 pri 300 table PPP1

FIxeu-vos que la prioritat d'aquestes dos normes ha de ser menor (número més alt!) que la norma ue qenvia cap a la taula PPP1 els paquets amb la marca 1.

Finalment la taula de normes ha de quedar:

# ip rule list
0:      from all lookup local 
100:    from all fwmark 0x1 lookup PPP1 
200:    from I.P.OF.PPP0 lookup PPP0 
300:    from I.P.OF.PPP1 lookup PPP1 
32766:  from all lookup main 
32767:  from all lookup default 

Recursos:

Provar rutes

Permet simular una petició provocant que s'inicii l'algorisme de "routing selection". Quan s'acaba l'algorisme aleshores mostra els camí escollit.

Template:Nota

# ip -s route get 127.0.0.1/32
ip -s route get 127.0.0.1/32
local 127.0.0.1 dev lo  src 127.0.0.1 
    cache <local>  users 1 used 1 mtu 16436 advmss 16396

# ip -s route get 127.0.0.1/32
local 127.0.0.1 dev lo  src 127.0.0.1 
    cache <local>  users 1 used 2 mtu 16436 advmss 16396
         
TODO: Once the route cache has been emptied, new route lookups (if not by a packet, then manually with ip route get) will result in a new lookup to 
the kernel routing tables.

Enrutament segons el TOS

Suposem creada la taula 8.

# ip route add default via 205.254.211.254 table 8
# ip rule add tos 0x08 table 8
# ip route flush cache
# ip rule show
0:      from all lookup local 
32765:  from all tos 0x08 lookup 8 
32766:  from all lookup main 
32767:  from all lookup 253

Tingueu en compte que la nova norma s'afegeix. Ho podem canviar especificant l'opció prio i indican directament el número de prioritat. Ara qualsevol paquet que s'enruti en aquesta màquina provingui de la targeta de xarxa que provingui serà enviat a la taula 8. Si cap ruta de la taula 8 se li apliques (no és el cas ja que em definit una ruta per defecte) aleshores s'aplicaria la taula de següent prioritat (main).

Especificant múltiples criteris d'encaminament

# ip rule add from 192.168.100.17 tos 0x08 fwmark 4 table 7

NAT ROUTING

TODO
$ ip rule add nat .... 

Split access

Si tenim 2 ADSL i hi ha peticions que venen de l'exterior (per exemple accés a servidors web amb ports DNAT) i tenim policy routing cal assegurar-se que les peticions que venen per una línia són contestades per la mateixa línia. Consulteu:

http://lartc.org/lartc.html#AEN268

També es pot fer amb iptables, marques i remarcant els paquets que són d'un connexió ja establerta.

ip monitor

Permet monitoritzar els esdeveniments de les targetes de xarxa del sistema:

$ sudo ip monitor all

Per exemple detectarà els link UP i link DOWN o els canvis a la taula arp. Per exemple

$ sudo ip monitor all
192.168.1.1 dev eth0 lladdr 00:25:69:3f:d5:ae STALE
192.168.1.1 dev eth0 lladdr 00:25:69:3f:d5:ae STALE
192.168.1.1 dev eth0 lladdr 00:25:69:3f:d5:ae REACHABLE
192.168.1.1 dev eth0 lladdr 00:25:69:3f:d5:ae STALE
192.168.1.1 dev eth0 lladdr 00:25:69:3f:d5:ae REACHABLE
192.168.1.1 dev eth0 lladdr 00:25:69:3f:d5:ae STALE
192.168.1.1 dev eth0 lladdr 00:25:69:3f:d5:ae REACHABLE
192.168.1.1 dev eth0 lladdr 00:25:69:3f:d5:ae STALE
192.168.1.1 dev eth0 lladdr 00:25:69:3f:d5:ae REACHABLE

Específicament podeu monitoritzar les rutes amb:

$ sudo ip monitor route
...
ff02::1:2 via ff02::1:2 dev alumnat  metric 0 
   cache  mtu 1500 advmss 1440 hoplimit 4294967295

Ho podeu provar si executeu en una terminal:

$ sudo ip monitor route

I sense tancar aquesta terminal a un altre terminal modifiqueu les taules de rutes, per exemple:

$ sudo ip route add 192.168.0.0/24 via 192.168.1.1

Per l'altre terminal apareixerà:

192.168.0.0/24 via 192.168.1.1 dev wlan0 

Si consulteu l'ajuda:

$ sudo ip monitor help
Usage: ip monitor [ all | LISTofOBJECTS ]

Si no s'especifica res s'aplica all. Segons els manual ($ man ip) els objectes possibles són:

OBJECT := { link | addr | addrlabel | route | rule | neigh | tunnel | maddr | mroute | monitor }

Exemples

multigateway

Si teniu un ruter o màquina connectat a més d'una línia ADSL, en algun moment us trobareu que voleu accedir des de Internet a aquest router i us plantejareu la opció d'accedir-hi des de qualsevol dels dos routers. Si tenim la màquina configurada amb taules de rutes normals (sense policy routing, configurades amb l'ordre route en comptes de l'ordre ip) només un dels dos routers ADSL serà el gateway per defecte.

Imagineu el següent esquema:

    /------\      ISP1           +----------+
   /-      -\     +--------------+          |
  / Internet |----|              | Firewall |----- Red Interna
  \        -/     +--------------+          |
   \-------/      ISP2           +----------+

ISP1: Router ADSL multilloc

  • IP pública del router: 77.230.8.90
  • IP privada del router: 192.168.11.1
  • IP de la interficie internet1 del firewall: 192.168.11.2
  • Connectat a la interfície de xarxa internet1

ISP2: Router ADSL monolloc

  • IP pública del router: 80.32.57.101
  • IP de la interfície internet2 del firewall: 80.32.57.101
  • Gateway del ISP: 80.32.57.65
  • Connectat a la interfície de xarxa internet2


Si la taula de rutes del router és només:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
80.32.57.64     0.0.0.0         255.255.255.192 U     0      0        0 internet2
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 intranet
192.168.11.0    0.0.0.0         255.255.255.0   U     0      0        0 internet1
0.0.0.0         192.168.11.1    0.0.0.0         UG    100    0        0 internet1

Si des de una màquina d'Internet feu un ping al ISP2:

$ ping 80.32.57.101
PING 80.32.57.101 (80.32.57.101) 56(84) bytes of data.
^C
--- 80.32.57.101 ping statistics ---
117 packets transmitted, 0 received, 100% packet loss, time 116169ms

Veureu que no respon. Però el paquet podeu comprovar que arriba a la màquina per la interfície que pertoca (internet2):

$ sudo tcpdump -n -i internet2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on internet2, link-type EN10MB (Ethernet), capture size 96 bytes
05:29:12.840780 IP 80.103.175.51 > 80.32.57.101: ICMP echo request, id 28754, seq 10, length 64
05:29:13.848222 IP 80.103.175.51 > 80.32.57.101: ICMP echo request, id 28754, seq 11, length 64
05:29:14.856897 IP 80.103.175.51 > 80.32.57.101: ICMP echo request, id 28754, seq 12, length 64
...

El problema és que el paquet de resposta surt pel gateway per defecte que és el connectat a la interfície internet1 en comptes de tornar per la mateixa interfície de xarxa (internet2):

$ sudo tcpdump -n -i internet1 not port 22
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on internet1, link-type EN10MB (Ethernet), capture size 96 bytes
05:31:03.298757 IP 80.32.57.101 > 80.103.175.51: ICMP echo reply, id 28754, seq 120, length 64
05:31:04.298311 IP 80.32.57.101 > 80.103.175.51: ICMP echo reply, id 28754, seq 121, length 64
05:31:05.297868 IP 80.32.57.101 > 80.103.175.51: ICMP echo reply, id 28754, seq 122, length 64
...

Anem a veure com ho podem solucionar amb policy routing. Primer cal configurar una taula de rutes per la internet2. Afegiu noves taules de rutes al fitxer /etc/iproute2/rt_tables:

$ sudo joe /etc/iproute2/rt_tables

Afegiu les línies:

200 internet1
201 internet2

Template:Nota

Consulteu la taula de rutes per defecte:

$ sudo ip route list
80.32.57.64/26 dev internet2  proto kernel  scope link  src 80.32.57.101 
192.168.1.0/24 dev intranet  proto kernel  scope link  src 192.168.1.5 
192.168.11.0/24 dev internet1  proto kernel  scope link  src 192.168.11.2 
default via 192.168.11.1 dev internet1  metric 100 

La taula de rutes internet2 encara està buida:

$ sudo ip route list table internet2

Afegim rutes a la taula de rutes 2. Es pot fer fàcilment copiant les rutes de la taula per defecte, la sintaxi és:

$ sudo ip route add RUTA_COPIADA_DE_LA_TAULA_PER_DEFECTE table internet2

És a dir:

$ sudo ip route add 80.32.57.64/26 dev internet2  proto kernel  scope link  src 80.32.57.101 table internet2
$ sudo ip route add 192.168.1.0/24 dev intranet  proto kernel  scope link  src 192.168.1.5 table internet2
$ sudo ip route add 192.168.11.0/24 dev internet1  proto kernel  scope link  src 192.168.11.2 table internet2

ara ja teniu rutes a la taula 2:

$ sudo ip route list table internet2
80.32.57.64/26 dev internet2  proto kernel  scope link  src 80.32.57.101 
192.168.1.0/24 dev intranet  proto kernel  scope link  src 192.168.1.5 
192.168.11.0/24 dev internet1  proto kernel  scope link  src 192.168.11.2 

Ara només falta el gateway per defecte. A aquesta taula el gateway per defecte serà el del ISP de la connexió internet2: 80.32.57.65. Per tant:

$ sudo ip route add default via 80.32.57.65 dev internet2  metric 100 table internet2

Ara la taula de rutes internet2 queda:

$ sudo ip route list table internet2
80.32.57.64/26 dev internet2  proto kernel  scope link  src 80.32.57.101 
192.168.1.0/24 dev intranet  proto kernel  scope link  src 192.168.1.5 
192.168.11.0/24 dev internet1  proto kernel  scope link  src 192.168.11.2 
default via 80.32.57.65 dev internet2  metric 100 

Aquesta taula de rutes però encara no l'utilitza ningú. Cal afegir alguna norma (policy) de rutes.

Template:Nota

Li diem al router que els paquets amb IP d'origen la IP de la interfície internet1 surtin per la taula internet1 i el mateix amb els paquets amb IP d'origen la de la ip de la interfície internet2:

$ sudo ip rule add from 80.32.57.101 table internet2

Si creesim la taula internet1 també faríem:

$ sudo ip rule add from 192.168.11.2 table internet1

Ara els pings ja contesten.

Per a comprovar el policy routing podeu utilitzar l'ordre traceroute:

$ sudo traceroute -n -s 80.32.57.101 www.google.com 
traceroute to www.google.com (66.249.92.104), 30 hops max, 60 byte packets
1  80.32.57.65  4.567 ms  4.560 ms  4.742 ms
2  10.0.209.129  42.872 ms  45.306 ms  47.519 ms
3  80.58.53.20  51.030 ms  53.645 ms  56.080 ms
4  84.16.6.69  109.057 ms  109.542 ms  110.231 ms
5  84.16.13.126  86.809 ms 84.16.13.142  89.503 ms  92.189 ms
6  84.16.6.106  110.836 ms 84.16.6.98  107.998 ms  110.953 ms
7  209.85.250.142  113.969 ms  78.295 ms  78.643 ms
8  64.233.175.115  74.147 ms  74.547 ms  74.381 ms
9  66.249.92.104  78.795 ms  77.541 ms  77.295 ms

Fixeu-vos que surt pel gateway del ISP2. En canvi amb l'altre IP:

$ sudo traceroute -n -s 192.168.11.2 www.google.com
traceroute to www.google.com (66.249.92.104), 30 hops max, 60 byte packets
 1  192.168.11.1  2.389 ms  2.668 ms  2.951 ms
 2  * * *
 3  10.4.13.29  18.271 ms  19.313 ms  20.802 ms
 4  212.145.1.238  23.072 ms  24.005 ms  24.889 ms
 5  217.130.2.225  36.108 ms  36.478 ms  37.652 ms
 6  * * *
 7  * * *
 8  85.205.24.225  27.876 ms 85.205.24.229  25.932 ms  26.266 ms
 9  195.81.200.209  27.413 ms 85.205.1.254  27.527 ms  28.117 ms
10  89.202.161.22  43.928 ms 216.239.49.230  28.574 ms  28.469 ms
11  74.125.50.105  62.854 ms 209.85.240.28  44.139 ms  44.313 ms
12  209.85.250.142  44.536 ms 66.249.95.24  43.602 ms 209.85.250.142  45.392 ms
13  64.233.175.115  69.461 ms  54.987 ms  49.192 ms
14  66.249.92.104  44.309 ms  44.293 ms  43.894 ms
DNAT i multigateway

Template:Nota

Continuem amb el mateix esquema que l'apartat anterior. Ara però volem fer DNAT (el que comunament es coneix com obrir un port). La idea és accedir al servidor web (Apache) d'una màquina de la xarxa interna, les dades de la màquina són;

  • IP: 192.168.1.7
  • Port: 80

Això ho fem amb iptables:

$ sudo iptables -t nat -A PREROUTING -i internet2 -p tcp --dport 8090 -j DNAT --to=192.168.1.7:80

Fixeu-vos que la connexió es farà des de la internet2, és a dir volem que el servidor web sigui accessible amb la URL:

http://80.32.57.101:8090/

Si ho proveu us donarà un error. Si tornem a depurar:

$ sudo watch iptables -nvL -t nat
Every 2,0s: iptables -nvL -t nat                                                                                  Fri Jul 16 06:07:50  2010

Chain PREROUTING (policy ACCEPT 1446 packets, 202K bytes)
 pkts bytes target     prot opt in     out     source               destination
    2   120 DNAT       tcp  --  internet2 *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8090 to:192.168.0.7:80
...

Com podeu veure la norma s'aplica (2 paquets al contador de l'exemple) i els paquets arriben:

Si feu un nmap al port us apareixerà com filtrat:

$ nmap -p 8090 80.32.57.101

Starting Nmap 5.00 ( http://nmap.org ) at 2010-07-16 05:59 CEST
Interesting ports on 101.Red-80-32-57.staticIP.rima-tde.net (80.32.57.101):
PORT     STATE    SERVICE
8090/tcp filtered unknown

I també podeu veure com rebeu els paquets:

$ sudo tcpdump -n -i internet2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on internet2, link-type EN10MB (Ethernet), capture size 96 bytes
06:11:19.094266 IP 80.103.175.51.45276 > 80.32.57.101.8090: Flags [S], seq 2436355941, win 5840, options [mss 1452,sackOK,TS val 29128727 ecr 0,nop,wscale 6], length 0

Per saber per que no funciona cal tenir en compte el camí que segueix un paquet al nucli del sistema operatiu Linux:

Citant http://bulma.net/body.phtml?nIdNoticia=2145:

Cuando un paquete va del cliente al servidor, lo primero que se encuentra (que sea relevante para esta explicación) es la lista PREROUTING de la tabla nat, donde se hace el DNAT. En el DNAT se cambia la dirección destino del paquete, y al enrutarse posteriormente, como el kernel ve que va dirigido al servidor, mete el paquete hacia la red interna.

El problema está en que cuando las respuestas del servidor hacia el cliente pasan por el firewall, no se deshace el DNAT antes del enrutado. El kernel primero enrutará el paquete y luego le cambiará la IP origen, deshaciendo el DNAT. ¡Pero nuestro policy routing estaba enrutando según la dirección origen! Ahí esta el problema, no podemos enrutar por dirección origen los paquetes que son respuesta de otro que sufrió un proceso de DNAT.

La solució és encaminar per marques combinant iptables i iproute utilitzant el mòdul d'iptables connection track match ( no confondre amb el mòdul conntrack) que s'encarrega de mantindre les taules de NAT al kernel que permeten fer i desfer NAT (tant SNAT com DNAT).

Cal afegir les següent normes ABANS del DNAT:

$ sudo iptables -t mangle -I PREROUTING 1 -m conntrack --ctorigdst 80.32.57.101 -j MARK --set-mark=2

Template:Important

Comproveu que els paquets es marquen executant:

$ sudo watch iptables -nvL -t mangle
Every 2,0s: iptables -nvL -t mangle                                                                            Fri Jul 16 06:38:37 2010

Chain PREROUTING (policy ACCEPT 1073 packets, 96360 bytes)
 pkts bytes target     prot opt in     out     source               destination
   5   300 MARK       all  --  *      *       0.0.0.0/0            0.0.0.0/0           ctorigdst 80.32.57.101 MARK xset 0x2/0xffffffff
...

I tornant a demanar la pàgina:

http://80.32.57.101:8090

Ara només falta que encaminem segons la marca:

$ sudo ip rule add fwmark 2 table internet2

Consulteu com queden les normes de Policy Routing:

$ sudo ip rule list
0:	from all lookup local 
32764:	from all fwmark 0x2 lookup internet2 
32765:	from 80.32.57.101 lookup internet2 
32766:	from all lookup main 
32767:	from all lookup default 

Template:Important

Recursos:

Enviar cap a un gateway especific només una màquina

Suposeu el següent esquema:

  • Estació de treball: 192.168.10.45. Gateway: 192.168.10.1
  • Router/Gateway: Dos targetes de xarxa:
  • intranet: IP: 192.168.10.1
  • internet1: Sortida cap a Internet per defecte del router i de totes les màquines que utilitzant aquest router com a gateway. Connexió PPPoE.
  • internet2: IP: 192.168.92.2. Connectat a un gateway amb IP: 192.168.92.1 que té connexió a una segona sortida cap a Internet. No està configurada per defecte. Esta connecta a una xarxa anomenada guifi.net que té accés a Internet.

Cal afegir una nova taula:

$ sudo joe /etc/iproute2/rt_tables 
#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
200 guifi

Per tal que el sistema comenci a aplicar aquesta taula:

$ sudo ip route flush table guifi

Si consulteu la taula per defecte:

$ sudo ip route show
172.31.255.254 dev ppp0  proto kernel  scope link  src 85.49.2.201 
192.168.93.0/24 dev internet3  proto kernel  scope link  src 192.168.93.2 
192.168.92.0/24 dev internet2  proto kernel  scope link  src 192.168.92.2 
192.168.111.0/24 dev internet1  proto kernel  scope link  src 192.168.111.19 
192.168.10.0/24 dev intranet  proto kernel  scope link  src 192.168.10.1 
default dev ppp0  scope link 

Template:Nota

Ara consulteu la taula nova:

$ sudo ip route show table guifi

Com l'acabem de crear està buida. Anem a afegir una entrada cap a la xarxa guifi.net. Per fer-ho a la taula de rutes per defecte seria:

$ sudo route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.92.1

Template:Nota

A la taula per defecte quedaria:

$ sudo ip route show 
172.31.255.254 dev ppp0  proto kernel  scope link  src 85.49.2.201 
192.168.93.0/24 dev internet3  proto kernel  scope link  src 192.168.93.2 
192.168.92.0/24 dev internet2  proto kernel  scope link  src 192.168.92.2 
192.168.111.0/24 dev internet1  proto kernel  scope link  src 192.168.111.19 
192.168.10.0/24 dev intranet  proto kernel  scope link  src 192.168.10.1 
10.0.0.0/8 via 192.168.92.1 dev internet2
default dev ppp0  scope link 

Però no volem posar-ho en aquesta taula:

$ sudo route del -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.92.1

Per afegir rutes a taules que no siguin la per defecte cal utilitzar ip route.

$ sudo ip route add table guifi 10.0.0.0/8 via 192.168.92.1 dev internet2

Ara la taula ja té una ruta:

$ sudo ip route show table guifi
10.0.0.0/8 via 192.168.92.1 dev internet2 

Ara només cal utilitzar aquesta ruta afegir una política de rutes (ip rule). Per defecte només s'apliquen les polítiques per defecte:

$ sudo ip rule show
0:	from all lookup local 
32766:	from all lookup main 
32767:	from all lookup default 

Per afegir una nova norma:

$ sudo ip rule add from 192.168.10.45 lookup guifi 
0:	from all lookup local 
32765:	from 192.168.10.45 lookup guifi 
32766:	from all lookup main 
32767:	from all lookup default

Ara només queda afegir el SNAT:

$ sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o internet2 -j MASQUERADE

L'única màquina que utilitza aquest gateway és la 192.168.10.45. Qualsevol altre (inclòs el router!) surt pel gateway per defecte del router.

traceroute

Per instal·lar traceroute:

$ sudo apt-get install traceroute

Hi ha diferents implementacions de traceroute. Si executeu:

$ whereis traceroute
traceroute: /usr/bin/traceroute /usr/bin/traceroute.db /usr/bin/traceroute6.iputils /usr/bin/traceroute6.db /usr/sbin/traceroute /usr/share/man/man8/traceroute.8.gz

Si busqueu el paquet:

$ dpkg -S /usr/bin/traceroute
...
dpkg: /usr/bin/traceroute no trobat.

Esteu utilitzant /usr/bin/traceroute.db i l'instal·la el paquet del mateix nom traceroute. Després s'utilitza alternatives per indicar la implementació de traceroute que volem utilitzar:

$ update-alternatives --display traceroute
traceroute - auto mode
 l'enllaç apunta actualment cap a /usr/bin/traceroute.db
/usr/bin/traceroute.db - prioritat 100
 esclau traceroute.8.gz: /usr/share/man/man8/traceroute.db.8.gz
 esclau traceroute.sbin: /usr/bin/traceroute.db
Actualment la «millor» versió és /usr/bin/traceroute.db. 

Traceroute és una comanda que s'utilitza per determinar quina ruta segueixen els paquets IP (per quins gateways o routers passen) per tal d'arribar a una màquina concreta. Exemple:

$ traceroute www.google.es
traceroute: Warning: www.google.es has multiple addresses; using 216.239.59.99
traceroute to www.l.google.com (216.239.59.99), 30 hops max, 40 byte packets
1  192.168.1.1 (192.168.1.1)  0.713 ms  0.482 ms  0.455 ms
2  192.168.153.1 (192.168.153.1)  50.780 ms  51.935 ms  49.973 ms
3  97.Red-81-46-52.staticIP.rima-tde.net (81.46.52.97)  55.980 ms  218.281 ms  51.631 ms
4  * * *
5  * * *
6  P12-0-grtlontl2.red.telefonica-wholesale.net (213.140.43.146)  99.036 ms  97.985 ms  98.048 ms
7  72.14.198.9 (72.14.198.9)  98.103 ms  99.954 ms  98.049 ms
8  66.249.95.107 (66.249.95.107)  109.915 ms  109.821 ms  108.130 ms
9  72.14.232.241 (72.14.232.241)  107.947 ms 64.233.174.185 (64.233.174.185)  108.198 ms  126.053 ms
10  216.239.49.126 (216.239.49.126)  111.904 ms  112.058 ms  111.769 ms
11  216.239.59.99 (216.239.59.99)  110.163 ms  107.823 ms  108.138 ms

Amb l'opció -n no s'intenta resoldre les IPs a noms de màquina. Els 3 últims camps són els temps del viatge d'anada i tornada de les tres proves que realitza traceroute per cada TTL.

Template:Important

Els asteriscs són màquines de la ruta que per protecció o errors de protocol no es poden mostrar.

NOTA: sovint els asterisc es poden solucionar executant traceroute com a superusuari:

$ sudo traceroute www.google.es
Password:
traceroute: Warning: www.google.es has multiple addresses; using 216.239.59.99
traceroute to www.l.google.com (216.239.59.99), 30 hops max, 40 byte packets
1  192.168.1.1 (192.168.1.1)  0.469 ms  0.496 ms  0.429 ms
2  192.168.153.1 (192.168.153.1)  50.701 ms  47.989 ms  48.041 ms
3  97.Red-81-46-52.staticIP.rima-tde.net (81.46.52.97)  51.949 ms  52.153 ms  51.969 ms
4  33.Red-81-46-5.staticIP.rima-tde.net (81.46.5.33)  63.792 ms  63.746 ms  64.027 ms
5  84.16.8.125 (84.16.8.125)  62.078 ms  64.046 ms  64.030 ms
6  P12-0-grtlontl2.red.telefonica-wholesale.net (213.140.43.146)  98.030 ms  99.910 ms  98.018 ms
7  72.14.198.9 (72.14.198.9)  98.140 ms  97.968 ms  98.028 ms
8  66.249.95.107 (66.249.95.107)  109.928 ms  110.080 ms  109.853 ms
9  64.233.174.185 (64.233.174.185)  109.930 ms 72.14.232.241 (72.14.232.241)  110.133 ms  109.800 ms
10  216.239.49.114 (216.239.49.114)  114.104 ms  114.010 ms  109.848 ms
11  216.239.59.99 (216.239.59.99)  110.093 ms  110.094 ms  109.865 ms

NOTA 2: Els paquets no sempre segueixen el mateix camí per arribar a un destinatari tal i com podeu comprovar en els nodes 9 i 10 de l'exemple anterior...

Actualment molts tallafocs impedeixen els paquets necessaris per tal que funcioni correctament traceroute. Per aquesta raó l'ordre premet provar amb diferents mètodes:

  • default: és el mètode tradicional i l'utilitzat per defecte. Aquest mètode el pot executar qualsevol usuari. S'envien paquets UDP amb ports poc probables (per defecte 33434 i es va augmentant). S'esperant missatges "icmp unreach port"
  • icmp: Opció -I. Si es pot fer un ping a totes les màquines de la ruta, també s'hauria de poder fer aquest tipus de tracerouting.
  • tcp: Opció -T. Utilitza el port 80

Hi ha algunes utilitats relacionades amb traceroute que poden ser interessants:

L'ordre:

$ traceroute6

és equivalent a:

$ traceroute -6

És a dir és fa un traceroute amb IPv6. Es necessita connectivitat IPv6.

Vegeu també tracert.

L'ordre ping també es pot utilitzar per traçar rutes:

$ ping -nR www.xtec.cat
PING xtec.cat (213.176.161.13) 56(124) bytes of data.
64 bytes from 213.176.161.13: icmp_seq=1 ttl=251 time=54.3 ms
NOP
RR: 	192.168.0.46 
	213.176.160.157
	213.176.160.26
	213.176.161.1
	213.176.161.13
	213.176.160.19
	213.176.160.153
	10.19.41.1
	85.192.120.9

64 bytes from 213.176.161.13: icmp_seq=2 ttl=251 time=52.9 ms
NOP	(same route)
64 bytes from 213.176.161.13: icmp_seq=3 ttl=251 time=53.1 ms
NOP	(same route)
  • Paquet: traceroute
  • Path: /usr/sbin/traceroute (podeu trobar el camí de la comanda executant which traceroute)
  • Manual: man traceroute

Una alternativa a traceroute és [[Paketto_Keiretsu#Paratrace Paratrace] de Paketto Keiretsu.

Com funciona traceroute

Traceroute utilitzar el protocol ICMP. Hi ha múltiples alternatives a l'hora d'intentar conèixer la ruta, però una de les més senzilles és enviat paquets de ping amb TTL (Times To Live) limitats.

Per conèixer la primera màquina d'una ruta enviem un paquet ping amb TTL=1

$ ping -t 1 www.google.com
PING www.l.google.com (209.85.227.105) 56(84) bytes of data.
From Livebox-D5AC (192.168.111.1) icmp_seq=1 Time to live exceeded

Ara ja sabeu que la primera màquina de la ruta és la 192.168.111.1. Si fem el mateix amb un TTL=2 obtindrem el nom de la segona màquina.

Podeu anar provant augmentant, fins que el paquet ping retorni.

mtr. My Traceroute

Un altre traceroute:

$ dpkg -S /usr/bin/mtr
mtr-tiny: /usr/bin/mtr
$ mtr www.upc.edu

tracepath

És una versió més senzilla de traceroute:

$ tracepath www.google.es
1:  192.168.1.33 (192.168.1.33)                            0.135ms pmtu 1500
1:  192.168.1.1 (192.168.1.1)                              0.898ms 
2:  192.168.1.1 (192.168.1.1)                            asymm  1   0.943ms pmtu 1492
3:  97.Red-81-46-52.staticIP.rima-tde.net (81.46.52.97)   91.871ms 
4:  33.Red-81-46-5.staticIP.rima-tde.net (81.46.5.33)    asymm  5 105.926ms 
5:  84.16.8.125 (84.16.8.125)                            asymm  6 103.997ms 
6:  P12-0-grtlontl2.red.telefonica-wholesale.net (213.140.43.146) 137.995ms 
.....................
  • Paquet: iputils-tracepath
  • Path: /usr/sbin/tracepath (podeu trobar el camí de la comanda executant which tracepath)
  • Manual: man tracepath

dig

$ dpkg -S dig | grep bin
dnsutils: /usr/bin/dig
..............

Podeu trobar més exemples a comanda dig.

  • Paquet: dnsutils
  • Path: /usr/bin/dig (podeu trobar el camí de la comanda executant which dig)
  • Manual: man dig

nslookup

  • Paquet: dnsutils
  • Path: /usr/bin/dig (podeu trobar el camí de la comanda executant which dig)
  • Manual: man dig

host

Consulteu host.

dnstracer

  • Paquet: dnstracer
  • Path: /usr/bin/dnstracer (podeu trobar el camí de la comanda executant which dnstracer)
  • Manual: man dnstracer

nmap

Consulteu nmap

ipcalc

Ipcalc és una eina que donada una ip i la seva màscara calcula les IPs de boradcast, xarxa, Cisco wildcard Mask, el rang de màquines, el tipus de xarxa i altres informacions interessants.

$ ipcalc 192.168.0.1
Address:   192.168.0.1          11000000.10101000.00000000. 00000001
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.0.0/24       11000000.10101000.00000000. 00000000
HostMin:   192.168.0.1          11000000.10101000.00000000. 00000001
HostMax:   192.168.0.254        11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255        11000000.10101000.00000000. 11111111
Hosts/Net: 254                   Class C, Private Internet

Si no s'especifica cap màscara, s'utilitza la màscara per defecte (255.255.255.0 o 24 en notació CIDR).

La sortida per pantalla és amb colors. Els colors ens permeten per exemple identificar els primers bits que corresponent a cada tipus de xarxa (A,B,C):

File:Ipcalc.jpg

$ ipcalc 192.168.0.1/24

És equivalent a ipcalc 192.168.0.1

$ ipcalc 192.168.0.1/255.255.128.0
Address:   192.168.0.1          11000000.10101000.0 0000000.00000001
Netmask:   255.255.128.0 = 17   11111111.11111111.1 0000000.00000000
Wildcard:  0.0.127.255          00000000.00000000.0 1111111.11111111
=>
Network:   192.168.0.0/17       11000000.10101000.0 0000000.00000000
HostMin:   192.168.0.1          11000000.10101000.0 0000000.00000001
HostMax:   192.168.127.254      11000000.10101000.0 1111111.11111110
Broadcast: 192.168.127.255      11000000.10101000.0 1111111.11111111
Hosts/Net: 32766                 Class C, Private Internet

Ipcalc és molt útil per al càlcul de subxarxes. Per fer subnetting, per exemple dividir una xarxa de màscara 24 en 4 subxarxes de màscara 26 podem utilitzar:

$ ipcalc 192.168.0.1/24 26
Address:   192.168.0.1          11000000.10101000.00000000. 00000001
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.0.0/24       11000000.10101000.00000000. 00000000
HostMin:   192.168.0.1          11000000.10101000.00000000. 00000001
HostMax:   192.168.0.254        11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255        11000000.10101000.00000000. 11111111
Hosts/Net: 254                   Class C, Private Internet

Subnets after transition from /24 to /26

Netmask:   255.255.255.192 = 26 11111111.11111111.11111111.11 000000
Wildcard:  0.0.0.63             00000000.00000000.00000000.00 111111 

 1.
Network:   192.168.0.0/26       11000000.10101000.00000000.00 000000
HostMin:   192.168.0.1          11000000.10101000.00000000.00 000001
HostMax:   192.168.0.62         11000000.10101000.00000000.00 111110
Broadcast: 192.168.0.63         11000000.10101000.00000000.00 111111
Hosts/Net: 62                    Class C, Private Internet 

 2.
Network:   192.168.0.64/26      11000000.10101000.00000000.01 000000
HostMin:   192.168.0.65         11000000.10101000.00000000.01 000001
HostMax:   192.168.0.126        11000000.10101000.00000000.01 111110
Broadcast: 192.168.0.127        11000000.10101000.00000000.01 111111
Hosts/Net: 62                    Class C, Private Internet

 3.
Network:   192.168.0.128/26     11000000.10101000.00000000.10 000000
HostMin:   192.168.0.129        11000000.10101000.00000000.10 000001
HostMax:   192.168.0.190        11000000.10101000.00000000.10 111110
Broadcast: 192.168.0.191        11000000.10101000.00000000.10 111111
Hosts/Net: 62                    Class C, Private Internet

 4.
Network:   192.168.0.192/26     11000000.10101000.00000000.11 000000
HostMin:   192.168.0.193        11000000.10101000.00000000.11 000001
HostMax:   192.168.0.254        11000000.10101000.00000000.11 111110
Broadcast: 192.168.0.255        11000000.10101000.00000000.11 111111
Hosts/Net: 62                    Class C, Private Internet  
 

Subnets:   4
Hosts:     248
   

També es pot utilitzar a l'inrevés, per fer supernetting:

$ ipcalc 192.168.0.1/24 23
Address:   192.168.0.1          11000000.10101000.00000000. 00000001
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.0.0/24       11000000.10101000.00000000. 00000000
HostMin:   192.168.0.1          11000000.10101000.00000000. 00000001
HostMax:   192.168.0.254        11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255        11000000.10101000.00000000. 11111111
Hosts/Net: 254                   Class C, Private Internet  

Supernet

Netmask:   255.255.254.0 = 23   11111111.11111111.1111111 0.00000000
Wildcard:  0.0.1.255            00000000.00000000.0000000 1.11111111

Network:   192.168.0.0/23       11000000.10101000.0000000 0.00000000
HostMin:   192.168.0.1          11000000.10101000.0000000 0.00000001
HostMax:   192.168.1.254        11000000.10101000.0000000 1.11111110
Broadcast: 192.168.1.255        11000000.10101000.0000000 1.11111111
Hosts/Net: 510                   Class C, Private Internet



  • Paquet: Xarxes_Linux#Paquet_ipcalc ipcalc
  • Path: /usr/bin/ipcalc (podeu trobar el camí de la comanda executant which ipcalc)
  • Manual: man ipcalc

tcpdump

Consulteu l'article tcpdump.

  • Paquet: tcpdump
  • Path: /usr/bin/tcpdump (podeu trobar el camí de la comanda executant which tcpdump)
  • Manual: man tcpdump

whois

  • Paquet: whois
  • Path: /usr/bin/whois (podeu trobar el camí de la comanda executant which whois)
  • Manual: man whois

Comandes wireless

Podeu consultar aquestes comandes a la pàgina Xarxes Linux Wireless d'aquesta wiki.

iptables

Consulteu la secció iptables de l'article Netfilter/iptables.

nc (netcat)

Consulteu nc (netcat).

ethtool

Consulteu l'article ethtool.

mii-tool

Consulteu mii-tool

mii-diag

Consulteu mii-diag

Fitxers de configuració

/etc/modules

Aquest fitxer es pot utilitzar per afegir un mòdul al kernel (per exemple de suport a la targeta de xarxa). Els mòduls que apareixen a aquest fitxer es carreguen durant la càrrega del sistema. Exemple de fitxer

$ cat /etc/modules 
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

lp
psmouse
sbp2
sr_mod

Els fitxers dels mòduls estan típicament a /lib/modules/. Aquí trobareu una carpeta per a cada versió del kernel (podeu utilitzar uname -r' per conèixer la vostra versió.

Per exemple, seguint les instruccions de la wiki d'Ubuntu (https://wiki.ubuntu.com/HardwareSupportComponentsWiredNetworkCards3Com), per fer funcionar una targeta 3COM 3c509TP Etherlink III, hem d'afegir el mòdul 3c509 al fitxer /etc/modules.

/etc/conf.modules

Mitjançant aquest fitxer podem configurar els paràmetres dels mòduls. Per exemple podem indicar a linux quin driver ha d'utilitzar per a la nostra targeta de xarxa. Exemple:

alias eth0 module_name
options module_name option1=value1 option2=value2 ...

Un mòdul proporciona al sistema operatiu (kernel) la informació necessària per controlar una targeta ethernet en particular. Per conèxer els noms dels mòduls (module_name) podeu consultar [aquesta pàgina http://tldp.org/HOWTO/Ethernet-HOWTO-2.html#what-card].

Les línies d'opcions només acostumen a ser necessàries per a antigues targetes ISA (obsoletes i no recomanables). Si es tenen més targetes serà necessari posar més línies al fitxer (eth1, eth2...).

NOTA: If you build your own kernel, you have the option of having all the drivers merged with the kernel right then and there, rather than existing as separate files. When this is done, the drivers will detect the hardware at boot up. Options to the drivers are supplied by the kernel command line prior to boot (see BootPrompt Howto for more details). The user chooses what drivers are used during the make config step of building the kernel (again see the kernel howto).

/etc/network/interfaces

Fitxer de configuració de les interfícies de xarxa (NICs) en sistemes Debian. Guarda la configuració de les interfícies de xarxa. Aquest fitxer és llegit per les comandes ifup i ifdown quan s'activen les interfícies de xarxa (ja sigui explícitament o en l'arrencada del sistema)

Exemple de fitxer interfaces totes configurades per DHCP:

$ cat /etc/network/interfaces 
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet dhcp

auto ath0
iface ath0 inet dhcp

auto wlan0
iface wlan0 inet dhcp

Exemple de fitxer interfaces amb configuració estàtica:

$ cat /etc/network/interfaces 
auto eth1
iface eth1 inet static
address 192.168.1.1
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1

Es pot utilitzar per automatitzar tasques abans i després d'activar les interfícies. Per això cal utilitzar les opcions pre-up o post-up:

Podeu trobar exemples de configuració al fitxer comprimit /usr/share/doc/ifupdown/examples/network-interfaces.gz:

$ sudo gunzip /usr/share/doc/ifupdown/examples/network-interfaces.gz 
$ cat /usr/share/doc/ifupdown/examples/network-interfaces

Trobareu exemples de configuració del fitxer /etc/network/interfaces per a xarxes wireless a http://acacha.dyndns.org/mediawiki/index.php/Xarxes_Linux_Wireless#.2Fetc.2Fnetwork.2Finterfaces.

Paràmetre allow-hotplug:

Del manual del fitxer interfaces:

Lines beginning with "allow-" are  used  to  identify  interfaces  that
should  be  brought  up automatically by various subsytems. This may be
done using a command such as "ifup --allow=hotplug  eth0  eth1",  which
will  only  bring up eth0 or eth1 if it is listed in an "allow-hotplug"
line. Note that "allow-auto" and "auto" are synonyms.

Sembla que és una línia per evitar problemes amb udev i dispositius connectables en calent (ethernet USB):

S'utilitza per marcar interfícies per tipologies. A Ubuntu per exemple no pareix al fitxer per defecte i a debian si. A Ubuntu el fitxer:

$ cat /etc/udev/rules.d/85-ifupdown.rules 
# This file causes network devices to be brought up or down as a result
# of hardware being added or removed, including that which isn't ordinarily
# removable.
# See udev(7) for syntax.  

SUBSYSTEM=="net", DRIVERS=="?*", GOTO="net_start"
GOTO="net_end"

LABEL="net_start"

# Bring devices up and down only if they're marked auto.
# Use start-stop-daemon so we don't wait on dhcp
ACTION=="add",          RUN+="/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifup -- --allow auto  $env{INTERFACE}"
ACTION=="remove",       RUN+="/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifdown -- --allow auto $env{INTERFACE}"

LABEL="net_end"


Manual:

Recursos:

  • Exemples de fitxers /etc/network/interfaces

/etc/init.d/networking

Aquest fitxer és un script estàndard de configuració de serveis System V. Permet controlar el servei de xarxa. Les opcions són les estàndard de SystemV:

Arrancar la xarxa:

sudo /etc/init.d/networking start

Apagar la xarxa:

sudo /etc/init.d/networking stop

Apagar i arrancar la xarxa (reiniciar) la xarxa:

sudo /etc/init.d/networking restart

Apagar i arrancar la xarxa (reiniciar) la xarxa:

sudo /etc/init.d/networking force-reload

En aquest cas, les opcions restart i force-reload són equivalents.

NOTA: Cal destacar que no és exactament el mateix executar /etc/init.d/networking start (o stop) que executar ifup. Ho podem comprovar si mirem l'script que conté el fitxer on veurem que s'utilitzen les comandes ifup i ifdown però que a més hi ha controls extres (com per exemple no apagar la xarxa si hi han unitats NFS encara muntades).

El link /etc/rcS.d/S40networking és l'encarregat d'iniciar la configuració de xarxa en Sistemes Debian seguint el sistema d' scripts d'inicialització de SystemV.

Podeu obtenir més informació sobre serveis i dimonis en Linux a l'article Configuració de serveis en Linux. Daemons d'aquesta wiki i concretament sobre els Scripts de control de serveis SystemV.

  • Paquet que el proporciona: netbase
NOTA: aquest fitxer es completament diferents en una Debian que en una Ubuntu. A Ubuntu es basa en simplement fer primer un ifdown -a i després un ifup -a a Debian fa altres coses...

Fitxer a Ubuntu (Feisty)

$ cat /etc/init.d/networking 
#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          networking
# Required-Start:    mountkernfs ifupdown $local_fs
# Required-Stop:     ifupdown $local_fs
# Default-Start:     S
# Default-Stop:      0 6
# Short-Description: Raise network interfaces.
### END INIT INFO

PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"

[ -x /sbin/ifup ] || exit 0 

. /lib/lsb/init-functions
 

case "$1" in
start)
        log_action_begin_msg "Configuring network interfaces"
        type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 120" || true
        if [ "$VERBOSE" != no ]; then
            if ifup -a; then
                log_action_end_msg $?
            else
                log_action_end_msg $?
            fi
        else
            if ifup -a >/dev/null 2>&1; then
                log_action_end_msg $?
            else
                log_action_end_msg $?
            fi
        fi
        type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 15" || true
        ;;

stop)
        if sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\2/p' /proc/mounts | 
                grep -qE '^(nfs[1234]?|smbfs|ncp|ncpfs|coda|cifs)$'; then
            log_warning_msg "not deconfiguring network interfaces: network shares still mounted."
            exit 0
        fi 

        log_action_begin_msg "Deconfiguring network interfaces"
        if [ "$VERBOSE" != no ]; then
            if ifdown -a --exclude=lo; then
                log_action_end_msg $?
            else
                log_action_end_msg $?
            fi
        else
            if ifdown -a --exclude=lo >/dev/null 2>/dev/null; then
                log_action_end_msg $?
            else
                log_action_end_msg $?
            fi
        fi
        ;;

force-reload|restart)
        log_action_begin_msg "Reconfiguring network interfaces"
        ifdown -a --exclude=lo || true
        if ifup -a --exclude=lo; then
            log_action_end_msg $?
        else
            log_action_end_msg $?
        fi
        ;;

*)
        echo "Usage: /etc/init.d/networking {start|stop|restart|force-reload}"
        exit 1
        ;;
esac

exit 0

Fitxer a Debian Etch

$ cat /etc/init.d/networking 
#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          networking
# Required-Start:    mountkernfs ifupdown $local_fs
# Required-Stop:     ifupdown $local_fs
# Default-Start:     S
# Default-Stop:      0 6
# Short-Description: Raise network interfaces.
### END INIT INFO

PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" 

[ -x /sbin/ifup ] || exit 0 

. /lib/lsb/init-functions

spoofprotect_rp_filter() {
    [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] || return 1
    RC=0
    for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
        echo 1 > $f || RC=1
    done
    return $RC
} 

spoofprotect() {
    log_action_begin_msg "Setting up IP spoofing protection"
    if spoofprotect_rp_filter; then
        log_action_end_msg 0 "rp_filter"
    else
        log_action_end_msg 1
    fi
}

ip_forward() {
    log_action_begin_msg "Enabling packet forwarding"
    if echo 1 > /proc/sys/net/ipv4/ip_forward; then
        log_action_end_msg 0
    else
        log_action_end_msg 1
    fi
}

syncookies() {
    log_action_begin_msg "Enabling TCP SYN cookies"
    if echo 1 > /proc/sys/net/ipv4/tcp_syncookies; then
        log_action_end_msg 0
    else
        log_action_end_msg 1
    fi
} 

doopt() {
    optname=$1
    default=$2
    opt=`grep "^$optname=" /etc/network/options || true`
    if [ -z "$opt" ]; then
         opt="$optname=$default"
    fi
    optval=${opt#$optname=}
    if [ "$optval" = "yes" ]; then
        eval $optname
    fi
}
process_options() {
    [ -e /etc/network/options ] || return 0
    log_warning_msg "/etc/network/options is deprecated (see README.Debian of netbase)."
    doopt spoofprotect yes
    doopt syncookies no
    doopt ip_forward no
}

case "$1" in
start)
        process_options
        log_action_begin_msg "Configuring network interfaces"
        if ifup -a; then
            log_action_end_msg $?
        else
            log_action_end_msg $?
        fi
        ;; 

stop)
        if sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\2/p' /proc/mounts | 
                grep -qE '^(nfs[1234]?|smbfs|ncp|ncpfs|coda|cifs)$'; then
            log_warning_msg "not deconfiguring network interfaces: network shares still mounted."
            exit 0
        fi 

        log_action_begin_msg "Deconfiguring network interfaces"
        if ifdown -a --exclude=lo; then
            log_action_end_msg $?
        else
            log_action_end_msg $?
        fi
        ;; 

force-reload|restart)
        process_options
        log_action_begin_msg "Reconfiguring network interfaces"
        ifdown -a --exclude=lo || true
        if ifup -a --exclude=lo; then
            log_action_end_msg $?
        else
            log_action_end_msg $?
        fi
        ;;  

*)
        echo "Usage: /etc/init.d/networking {start|stop|restart|force-reload}"
        exit 1
        ;;
esac 

exit 0

/etc/init.d/loopback

Igual que /etc/init.d/networking és un script de control de serveis ( init scripts) de UNIX System V. En aquesta cas s'encarrega de configurar la interfície de loopback. Permet controlar el servei d'interfície de loopback.

El link /etc/rcS.d/S08loopback és l'encarregat d'iniciar la interfície de loopbacken Sistemes Debian seguint el sistema d' scripts d'inicialització de SystemV.

Podeu consultar més sobre els serveis i dimonis Linux a l'article Configuració de serveis en Linux. Daemons.

  • Paquet que el proporciona: netbase

/etc/sysconfig/network

En sistemes RED HAT/Fedora o similars aquest fitxer és el que conté la configuració de xarxa (equivalent del fitxer /etc/network/interfaces en Sistemes Debian). Un exemple de configuració estàtica seria:

NETWORKING=yes
FORWARD_IPV4=false
HOSTNAME=milinux.localdomain
DOMAINAME=localdomain
GATEWAY=10.0.0.1
GATEWAYDEV=eth0
IPADDR=10.0.0.120
NETMASK=255.0.0.0
NETWORK=10.0.0.0
BROADCAST=10.255.255.255
ONBOOT=yes  

/etc/sysctl.conf

Controla paràmetres del kernel:

$ cat /etc/sysctl.conf

El podem utilitzar per activar ip_forwarding:

...
# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1
...

Consulteu l'article Sysctl._Tunning_del_kernel.

Carpeta /etc/sysconfig/networking

En sistemes RED HAT/fedora trobem en aquesta carpeta els perfils de xarxa i/o els fitxers ifcfg-xxx amb la configuració de la xarxa.

Carpeta /etc/sysconfig/network

Aquesta carpeta també s'utilitza en sistemes SUSE o derivats (openSuse, Linkat....)

  • Sistema: RED HAT
  • Paquet: ?

/etc/sysconfig/network/config

En sistemes com OpenSUSE hi ha paràmetres generals de configuració de xarxa.

Fitxers ifcfg-xxx

Els sistemes RED HAT, Fedora i Suse guarden la configuració de les interfícies de xarxa als fitxers ifcfg-xxx. Depenent de la distribució, de si s'utilitzen perfils o no i altres temes, aquests fitxers poden estar en diferents localitzacions (carpetes). Les xxxx del nom del fitxer se substitueixen pel nom del dispositiu de xarxa. Per exemple:

*loopback: ifcfg-lo
*eth0: ifcfg-eth0
*eth1: ifcfg-eth1

Altres noms són possibles (per exemple utilitzant identificadors ifcfg-eth-id-00\:0c\:29\:d3\:47\:00). Aquests fitxers de configuració contenen parells de valors.

A SUSE aquests fitxers es localitzen a la carpeta /etc/sysconfig/network

SUSE també ofereix un fitxer d'exemple (template) de configuració. Podem consultar aquest "template" per conèixer la utilitat de cadascun dels possibles paràmetres. També podem consultar l'entrada de manual de Linux man ifcfg

Exemple d'interfície configurada amb DHCP:

BOOTPROTO='dhcp'
BROADCAST=
ETHTOOL_OPTIONS=
IPADDR=
MTU=
NAME='AMD PCnet - Fast 79C971'
NETMASK='255.255.255.0'
NETWORK=
REMOTE_IPADDR=
STARTMODE='auto'
UNIQUE='rBUF.weGuQ9ywYPF'
USERCONTROL='no'
_nm_name='bus-pci-0000:00:10.0'
)

Exemple d'interfície amb configuracio estàtica:

DEVICE=eth0
IPADDR=208.164.186.1
NETMASK=255.255.255.0
NETWORK=208.164.186.0
BROADCAST=208.164.186.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

Configuració de loopback a Open Suse:

sergi@linux-ngx8:/etc/sysconfig/network> cat ifcfg-lo 
# Loopback (lo) configuration
IPADDR=127.0.0.1
NETMASK=255.0.0.0
NETWORK=127.0.0.0
BROADCAST=127.255.255.255
STARTMODE=onboot
USERCONTROL=no
  • Manual: man ifcfg

/etc/sysconfig/networking/profiles

Conté els perfils de xarxa de la màquina RED HAT/Fedora. El perfil per defecte és default /etc/sysconfig/networking/profiles/default. Els perfils poden sobrescriure les dades de configuració de xarxa generals (fitxer /etc/sysconfig/network).

Scripts de preconfiguració/postconfiguració de la xarxa.

Carpetes /etc/network/if-down.d /etc/network/if-post-down.d /etc/network/if-pre-up.d /etc/network/if-up.d

En aquestes carpetes es col·loquen els scripts que volem que s'executin abans o després de l'engegada o aturada de la xarxa. Per exemple, si fem una ullada a la carpeta /etc/network/if-up.d:

$ ls -l /etc/network/if-up.d/
total 16
-rwxr-xr-x 1 root root 3190 2006-10-06 13:34 mountnfs
-rwxr-xr-x 1 root root  551 2006-05-29 04:48 ntpdate
-rwxr-xr-x 1 root root  160 2006-09-18 21:09 ntp-server
-rwxr-xr-x 1 root root 1120 2006-09-10 12:48 postfix

Són scripts que configuren aplicacions després de la configuració de la xarxa:

  • mountnfs: Monta els recursos NFS i SAMBA
  • ntpdate i ntp-server: Configuren ntp (servei de temps).....

Aquests fitxers, juntament amb les comandes ifup i ifdown les proporciona el paquet ifupdown.

Podem veure el detall del que s'executa al aixecar/apagar una targeta de xarxa amb les comandes:

$ sudo ifdown --verbose eth0
Configuring interface eth0=eth0 (inet)
route del -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.1.20 dev eth0
run-parts --verbose /etc/network/if-down.d
run-parts: executing /etc/network/if-down.d/avahi-autoipd
run-parts: executing /etc/network/if-down.d/wpasupplicant

ifconfig eth0 down
run-parts --verbose /etc/network/if-post-down.d
run-parts: executing /etc/network/if-post-down.d/avahi-daemon
run-parts: executing /etc/network/if-post-down.d/bridge
run-parts: executing /etc/network/if-post-down.d/wireless-tools
run-parts: executing /etc/network/if-post-down.d/wpasupplicant
run-parts: executing /etc/network/if-post-down.d/z50madwifi 
$ sudo ifup --verbose eth0
Configuring interface eth0=eth0 (inet)
run-parts --verbose /etc/network/if-pre-up.d
run-parts: executing /etc/network/if-pre-up.d/050madwifi
run-parts: executing /etc/network/if-pre-up.d/bridge
run-parts: executing /etc/network/if-pre-up.d/uml-utilities
run-parts: executing /etc/network/if-pre-up.d/wireless-tools
run-parts: executing /etc/network/if-pre-up.d/wpasupplicant

ifconfig eth0 192.168.1.2 netmask 255.255.255.0  	   	up

route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.1.20 dev eth0
run-parts --verbose /etc/network/if-up.d
run-parts: executing /etc/network/if-up.d/avahi-autoipd
run-parts: executing /etc/network/if-up.d/avahi-daemon
run-parts: executing /etc/network/if-up.d/mountnfs
 * Starting portmap daemon...
 * Already running.
  ...done.
 * Starting NFS common utilities
   ...done.
run-parts: executing /etc/network/if-up.d/ntpdate
run-parts: executing /etc/network/if-up.d/openssh-server
run-parts: executing /etc/network/if-up.d/uml-utilities
run-parts: executing /etc/network/if-up.d/wpasupplicant

Carpetes /etc/sysconfig/network/scripts i /etc/sysconfig/network-scripts

A Open Suse els scripts de post o pre instal·lació de xarxa els trobem a la carpeta /etc/sysconfig/network/scripts. A Fedora sovint es troben a /etc/sysconfig/network-scripts. El nom d'aquests fitxers segueix la lògica següent:

  • ifdown i ifup: són links a les comanda ifdown/ifup
  • ifup-xxxx: On xxxx és el nom d'un servei o aplicació Linux. Per tant, l'script ifup-xxxx és l'script que s'executa referent a aquesta aplicació quan s'engega la xarxa. Exemple ifup-ippp.
  • ifdown-xxxx: On xxxx és el nom d'un servei o aplicació Linux. Per tant, l'script ifdown-xxxx és l'script que s'executa referent a aquesta aplicació quan s'apaga la xarxa.


/etc/protocols

Aquest fitxer guarda els noms de protocols de TRANPORT utilitzats (o que suporta) aquest sistema.

$ cat /etc/protocols 
# Internet (IP) protocols
#
# Updated from http://www.iana.org/assignments/protocol-numbers and other
# sources.
# New protocols will be added on request if they have been officially
# assigned by IANA and are not historical.
# If you need a huge list of used numbers please install the nmap package.

ip      0       IP              # internet protocol, pseudo protocol number
#hopopt 0       HOPOPT          # IPv6 Hop-by-Hop Option [RFC1883]
icmp    1       ICMP            # internet control message protocol
igmp    2       IGMP            # Internet Group Management
ggp     3       GGP             # gateway-gateway protocol
ipencap 4       IP-ENCAP        # IP encapsulated in IP (officially ``IP)
st      5       ST              # ST datagram mode
tcp     6       TCP             # transmission control protocol
egp     8       EGP             # exterior gateway protocol
igp     9       IGP             # any private interior gateway (Cisco)
pup     12      PUP             # PARC universal packet protocol
udp     17      UDP             # user datagram protocol
hmp     20      HMP             # host monitoring protocol
xns-idp 22      XNS-IDP         # Xerox NS IDP
rdp     27      RDP             # "reliable datagram" protocol
iso-tp4 29      ISO-TP4         # ISO Transport Protocol class 4 [RFC905]
xtp     36      XTP             # Xpress Transfer Protocol
ddp     37      DDP             # Datagram Delivery Protocol
idpr-cmtp 38    IDPR-CMTP       # IDPR Control Message Transport
ipv6    41      IPv6            # Internet Protocol, version 6
ipv6-route 43   IPv6-Route      # Routing Header for IPv6
ipv6-frag 44    IPv6-Frag       # Fragment Header for IPv6
idrp    45      IDRP            # Inter-Domain Routing Protocol
rsvp    46      RSVP            # Reservation Protocol
gre     47      GRE             # General Routing Encapsulation
esp     50      IPSEC-ESP       # Encap Security Payload [RFC2406]
ah      51      IPSEC-AH        # Authentication Header [RFC2402]
skip    57      SKIP            # SKIP
ipv6-icmp 58    IPv6-ICMP       # ICMP for IPv6
ipv6-nonxt 59   IPv6-NoNxt      # No Next Header for IPv6
ipv6-opts 60    IPv6-Opts       # Destination Options for IPv6
rspf    73      RSPF CPHB       # Radio Shortest Path First (officially CPHB)
vmtp    81      VMTP            # Versatile Message Transport
eigrp   88      EIGRP           # Enhanced Interior Routing Protocol (Cisco)
ospf    89      OSPFIGP         # Open Shortest Path First IGP
ax.25   93      AX.25           # AX.25 frames
ipip    94      IPIP            # IP-within-IP Encapsulation Protocol
etherip 97      ETHERIP         # Ethernet-within-IP Encapsulation [RFC3378]
encap   98      ENCAP           # Yet Another IP encapsulation [RFC1241]
#       99                      # any private encryption scheme
pim     103     PIM             # Protocol Independent Multicast
ipcomp  108     IPCOMP          # IP Payload Compression Protocol
vrrp    112     VRRP            # Virtual Router Redundancy Protocol
l2tp    115     L2TP            # Layer Two Tunneling Protocol [RFC2661]
isis    124     ISIS            # IS-IS over IPv4
sctp    132     SCTP            # Stream Control Transmission Protocol
fc      133     FC              # Fibre Channel
  • Paquet que el proporciona: netbase
  • Manual: man protocols

/etc/services

Conté una llista dels noms de serveis reconeguts pel sistema (protocols a nivell aplicació).

Un extracte del fitxer:

tcpmux          1/tcp                           # TCP port service multiplexer
echo            7/tcp
echo            7/udp
discard         9/tcp           sink null
discard         9/udp           sink null
systat          11/tcp          users
daytime         13/tcp
daytime         13/udp
netstat         15/tcp
qotd            17/tcp          quote
msp             18/tcp                          # message send protocol
msp             18/udp
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
telnet          23/tcp
smtp            25/tcp          mail
time            37/tcp          timserver
time            37/udp          timserver
rlp             39/udp          resource        # resource location
nameserver      42/tcp          name            # IEN 116
whois           43/tcp          nicname
tacacs          49/tcp                          # Login Host Protocol (TACACS)
tacacs          49/udp
re-mail-ck      50/tcp                          # Remote Mail Checking Protocol
re-mail-ck      50/udp
domain          53/tcp          nameserver      # name-domain server
domain          53/udp          nameserver
mtp             57/tcp                          # deprecated
tacacs-ds       65/tcp                          # TACACS-Database Service
tacacs-ds       65/udp
bootps          67/tcp                          # BOOTP server
bootps          67/udp
bootpc          68/tcp                          # BOOTP client
bootpc          68/udp
tftp            69/udp
gopher          70/tcp                          # Internet Gopher
gopher          70/udp
rje             77/tcp          netrjs
finger          79/tcp
www             80/tcp          http            # WorldWideWeb HTTP
www             80/udp                          # HyperText Transfer Protocol

Una de les utilitats d'aquest fitxer és consultar el port per defecte d'un protocol. Per exemple, si volem saber quin port utilitza el protocol smtp podem escriure:

$ cat /etc/services | grep smtp
smtp            25/tcp          mail
ssmtp           465/tcp         smtps           # SMTP over SSL

També es pot utilitzar al revés per conèixer el protocol més usual per a un port donat:

$ cat /etc/services | grep 80
www             80/tcp          http            # WorldWideWeb HTTP
www             80/udp                          # HyperText Transfer Protocol
...............

Cal tenir en compte que totes les aplicacions de xarxa (com nmap o netstat) utilitzant la informació d'aquest fitxer per traduir ports en serveis. Per exemple:

$ netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 localhost:2208          *:*                     LISTEN     
tcp        0      0 *:ldap                  *:*                     LISTEN     
tcp        0      0 localhost:47301         *:*                     LISTEN     
tcp        0      0 localhost:mysql         *:*                     LISTEN     
tcp        0      0 *:11211                 *:*                     LISTEN     
tcp        0      0 localhost:ipp           *:*                     LISTEN     
tcp        0      0 localhost:postgresql    *:*                     LISTEN     
tcp        0      0 *:smtp                  *:*                     LISTEN 

Els serveis als quals apareix el número de port són serveis que no apareixen al fitxer /etc/services. Els protocols que apareixen amb el seu nom (ipp,ldap,mysql,smtp...) són serveis que apareixen al fitxer /etc/protocols.

  • Paquet que el proporciona: netbase
  • Manual: man services

/etc/rpc

Tradueix noms de serveis de programes rpc (remote procedure control) en els seus corresponents números rpc

$ cat /etc/rpc 
# This file contains user readable names that can be used in place of rpc
# program numbers.

portmapper      100000  portmap sunrpc
rstatd          100001  rstat rstat_svc rup perfmeter
rusersd         100002  rusers
nfs             100003  nfsprog
ypserv          100004  ypprog
.........
  • Paquet que el proporciona: netbase
  • Manual: man rpc

/etc/host.conf

Vegeu Client_DNS#.2Fetc.2Fhosts.conf

/etc/hosts

Vegeu Client_DNS#.2Fetc.2Fhosts

/etc/hosts.allow i /etc/hosts.deny

Amb aquests fitxers es pot crear una llista ACL (Access Control List) de les màquines que poden (o no poden) accedir al nostre host.

$ cat /etc/hosts.allow 
# /etc/hosts.allow: list of hosts that are allowed to access the system.
#                   See the manual pages hosts_access(5), hosts_options(5)
#                   and /usr/doc/netbase/portmapper.txt.gz
#
# Example:    ALL: LOCAL @some_netgroup
#             ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
#
# If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper, as well as for
# rpc.mountd (the NFS mount daemon). See portmap(8), rpc.mountd(8) and 
# /usr/share/doc/portmap/portmapper.txt.gz for further information.
#
$ cat /etc/hosts.deny 
# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.
#                  See the manual pages hosts_access(5), hosts_options(5)
#                  and /usr/doc/netbase/portmapper.txt.gz
#
# Example:    ALL: some.host.name, .some.domain
#             ALL EXCEPT in.fingerd: other.host.name, .other.domain
#
# If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper. See portmap(8)
# and /usr/doc/portmap/portmapper.txt.gz for further information.
#
# The PARANOID wildcard matches any host whose name does not match its
# address.

# You may wish to enable this to ensure any programs that don't
# validate looked up hostnames still leave understandable logs. In past
# versions of Debian this has been the default.
# ALL: PARANOID
  • Manual: man hosts.allow
  • Manual: man hosts.deny


/etc/resolv.conf

Vegeu Client_DNS#.2Fetc.2Fresolv.conf

Fitxer /etc/ethers

Es pot utilitzar aquest fitxer per no haver d'utilitzar la mac cada cop que es fa un wakeonlan:

$ cat /etc/ethers
08:00:20:00:61:CA nommaquina

/etc/networks

Fitxer opcional (sovint no el tenim). Similar al fitxer /etc/hosts però per especificar xarxes. Exemple

loopback 127.0.0.0
localdomain 10.0.0.0

Manual:

  • man networks

/etc/hostname

Conté el nom de la màquina:

$ cat /etc/hostname 
casa-linux

La comanda hostname ens proporciona el nom de la màquina.

/etc/iftab

Aquest fitxer permetia assignar noms fixes a les interfícies de xarxa. Actualment s'ha substituit per udev,

$ cat /etc/iftab
# This file is no longer used and has benn automatically replaced
# See /etc/udev/rules.d/70-persistent-net.rules for more information
#

# This file assigns persistent names to network interfaces
# see iftab(5) for syntax

##eth0 mac 08:00:27:01:20:85

/proc/net/arp

Aquest fitxer conté la taula del protocol ARP (Adress Resolution Protocol). Aquest protocol és l'encarregat de transformar IPs en MACs i és el que ens permet treballar amb IPs al nivell d'enllaç (xarxa àrea local).

$ cat /proc/net/arp 
IP address       HW type     Flags       HW address            Mask     Device
10.0.2.101       0x1         0x2         00:11:09:CE:25:8E *       eth0
192.168.0.240    0x1         0x2         00:12:17:FC:98:87 *       eth1
10.0.2.1         0x1         0x2         00:50:7F:1F:2C:A3 *       eth0
10.0.2.107       0x1         0x2         00:11:09:CE:26:3E *       eth0
10.0.3.234       0x1         0x2         00:14:22:09:AA:3F *       eth0

Ens dóna el mateix resultat que la comanda arp (encara que la comanda arp no està sempre instal·lada)

NOTA: No s'ha d'editar aquest fitxer directament. Cal utilitzar la comanda arp NOTA1: Només conté les MACS dels nodes (pcs o dispositius de xarxa) amb els quals s'ha establert alguna comunicació.

El podem utilitzar per obtenir les MACS de tots els dispositius d'una xarxa d'àrea local. Per això primer utilitzem nmap

sudo nmap 192.168.0.1-255

i després consultem la taula arp amb

$ cat /proc/net/arp

o la comanda

$ arp

/etc/udev/rules.d/70-persistent-net.rules

La gestió del nom de les interfícies de xarxa, abans es feia amb ifrename, però ha estat substituit per udev:

$ sudo apt-get install ifrename 
S'està llegint la llista de paquets... Fet 
S'està construint l'arbre de dependències       
S'està llegint la informació de l'estat... Fet
El paquet ifrename no té versió disponible, però un altre paquet
en fa referència. Això normalment vol dir que el paquet falta,
s'ha tornat obsolet o només és disponible des d'una altra font.
Tot i que els següents paquets el reemplacen:
  udev
E: El paquet ifrename no té candidat d'instal·lació

Ara el gestor de dispositius de xarxa és udev i substitueix la funció del fitxer /etc/iftab. Veieu el següent exemple d'un disc dur en rack que és connecta a diferents màquines, totes iguals però cadascuna amb una adreça de xarxa amb una MAC diferent (disc dur de l'escola):

Template:Important

$ cat /etc/udev/rules.d/70-persistent-net.rules 
# This file maintains persistent names for network interfaces.
# See udev(7) for syntax.
#
# Entries are automatically added by the 75-persistent-net-generator.rules
# file; however you are also free to add your own entries.

# PCI device 0x10ec:0x8167 (r8169)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:30:05:eb:3a:e6", NAME="eth0"

# PCI device 0x10ec:0x8167 (r8169)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:30:05:eb:a2:fc", NAME="eth1"

# PCI device 0x10ec:0x8167 (r8169)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:30:05:eb:a3:8d", NAME="eth2" 

# PCI device 0x10ec:0x8167 (r8169)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:30:05:eb:38:55", NAME="eth3"

# PCI device 0x10ec:0x8167 (r8169)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:30:05:eb:38:04", NAME="eth4"

# PCI device 0x10ec:0x8167 (r8169)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:30:05:eb:38:11", NAME="eth5"

# PCI device 0x10ec:0x8167 (r8169)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:30:05:eb:38:0c", NAME="eth6"

A Debian Etch el fitxer s'anomena /etc/udev/rules.d/z25_persistent-net.rules:

$ cat /etc/udev/rules.d/z25_persistent-net.rules 
# This file was automatically generated by the /lib/udev/write_net_rules
# program, probably run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line. 

# PCI device 0x8086:0x2449 (eepro100)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:c0:a8:f9:7b:87", NAME="eth0" 

# PCI device 0x8086:0x2449 (e100)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:c0:a8:f9:7d:3d", NAME="eth0"

# PCI device 0x8086:0x2449 (e100)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:c0:a8:f9:82:10", NAME="eth0"

# PCI device 0x8086:0x2449 (e100)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:c0:a8:f9:89:2e", NAME="eth1"

NOTA: Exemple extret de l'aula Linux.

Canviar el nom d'una interfície de xarxa

Es pot fer modificant el fitxer /etc/udev/rules.d/70-persistent-net.rules:

$ cat /etc/udev/rules.d/70-persistent-net.rules
...
# Virtual network (eth0--> intranet)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:16:3E:00:AB:00", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="intranet"  
 
# Virtual network (eth1--> aula1)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:16:3E:00:AB:01", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="aula1" 

# Virtual network (eth2--> aula2)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:16:3E:00:AB:02", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="aula2"

# Virtual network (eth3--> aula3)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:16:3E:00:AB:03", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="aula3"

# Virtual network (eth4--> internet)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:16:3E:00:AB:04", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="internet"

Consulteu:

Tallafocs_Linux#domU

En alguns casos he trobat que només canvia algunes targetes de xarxa:

ifconfig abans:

$ sudo ifconfig -a
eth1     Link encap:Ethernet  HWaddr 00:16:3e:00:ab:01  
...
intranet  Link encap:Ethernet  HWaddr 00:16:3e:00:ab:00  
         inet addr:192.168.0.46  Bcast:192.168.0.255  Mask:255.255.255.0
         inet6 addr: fe80::216:3eff:fe00:ab00/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:80 errors:0 dropped:0 overruns:0 frame:0
         TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:5196 (5.1 K

En canvi al executar:

$ sudo udevadm test /sys/class/net/eth1
...
rename_netif: changing net interface name from 'eth1' to 'aula1'
udev_event_execute_rules: renamed netif to 'aula1'
udev_event_execute_rules: changed devpath to '/devices/vif-1/net/aula1'
udevadm_test: UDEV_LOG=6
udevadm_test: DEVPATH=/devices/vif-1/net/aula1
udevadm_test: INTERFACE=aula1
udevadm_test: IFINDEX=3
udevadm_test: ACTION=add
udevadm_test: SUBSYSTEM=net
udevadm_test: INTERFACE_OLD=eth1

Ja li canvia el nom de eth1 a aula1.

/etc/udev/rules.d/75-persistent-net-generator.rules

$ cat /etc/udev/rules.d/75-persistent-net-generator.rules
# these rules generate rules for persistent network device naming

ACTION=="add", SUBSYSTEM=="net", KERNEL=="eth*|ath*|wlan*|ra*|sta*" \
        NAME!="?*", DRIVERS=="?*", GOTO="persistent_net_generator_do"

GOTO="persistent_net_generator_end"
LABEL="persistent_net_generator_do"

# build device description string to add a comment the generated rule
SUBSYSTEMS=="pci", ENV{COMMENT}="PCI device $attr{vendor}:$attr{device} ($attr{driver})"
SUBSYSTEMS=="usb", ENV{COMMENT}="USB device 0x$attr{idVendor}:0x$attr{idProduct} ($attr{driver})"
SUBSYSTEMS=="ieee1394", ENV{COMMENT}="Firewire device $attr{host_id})"
SUBSYSTEMS=="xen", ENV{COMMENT}="Xen virtual device"
ENV{COMMENT}=="", ENV{COMMENT}="$env{SUBSYSTEM} device ($attr{driver})"

IMPORT{program}="write_net_rules $attr{address}"
ENV{INTERFACE_NEW}=="?*", NAME="$env{INTERFACE_NEW}" 

LABEL="persistent_net_generator_end"

A Debian Etch:

$ cat /etc/udev/rules.d/z45_persistent-net-generator.rules 
# These rules generate rules to keep network interface names unchanged
# across reboots write them to /etc/udev/rules.d/z25_persistent-net.rules.
#
# The default name for this file is z45_persistent-net-generator.rules. 

ACTION!="add",                          GOTO="persistent_net_generator_end"
SUBSYSTEM!="net",                       GOTO="persistent_net_generator_end"

# ignore the interface if a name has already been set
NAME=="?*",                             GOTO="persistent_net_generator_end"

# ignore "secondary" raw interfaces of the madwifi driver
KERNEL=="ath*", ATTRS{type}=="802",     GOTO="persistent_net_generator_end"

# provide nice comments for the generated rules
SUBSYSTEMS=="pci", \
ENV{COMMENT}="PCI device $attr{vendor}:$attr{device}"
SUBSYSTEMS=="usb", \
 ENV{COMMENT}="USB device $attr{idVendor}:$attr{idProduct}"
SUBSYSTEMS=="ieee1394", \
 ENV{COMMENT}="Firewire device $attr{host_id}"
SUBSYSTEMS=="xen", \
 ENV{COMMENT}="Xen virtual device"
ENV{COMMENT}=="", \
 ENV{COMMENT}="Unknown $env{SUBSYSTEM} device ($env{DEVPATH})"
ATTRS{driver}=="?*", \
 ENV{COMMENT}="$env{COMMENT} ($attr{driver})"
  
# ignore interfaces without a driver link like bridges and VLANs
KERNEL=="eth*|ath*|wlan*|ra*|sta*", DRIVERS=="?*",\
        IMPORT{program}="write_net_rules $attr{address}"

ENV{INTERFACE_NEW}=="?*", NAME="$env{INTERFACE_NEW}"

LABEL="persistent_net_generator_end"

/etc/udev/rules.d/85-ifupdown.rules

$ /etc/udev/rules.d/85-ifupdown.rules
# This file causes network devices to be brought up or down as a result
# of hardware being added or removed, including that which isn't ordinarily
# removable.
# See udev(7) for syntax.

SUBSYSTEM=="net", DRIVERS=="?*", GOTO="net_start"
GOTO="net_end"

LABEL="net_start" 

# Bring devices up and down only if they're marked auto.
# Use start-stop-daemon so we don't wait on dhcp
ACTION=="add",          RUN+="/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifup -- --allow auto $env{INTERFACE}"
ACTION=="remove",       RUN+="/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifdown -- --allow auto  $env{INTERFACE}"

LABEL="net_end"

/proc/net/route

Conté la taula de rutes de la màquina. Aquest fitxer és molt similar al fitxer /proc/net/arp però per a la comanda route.

$ cat /proc/net/route
Iface   Destination     Gateway         Flags   RefCnt  Use     Metric  Mask            MTU     Window      IRTT                                                       
vmnet8  00C4A8C0        00000000        0001    0       0       0       00FFFFFF        0       0  0                                                                             
eth0    0001A8C0        00000000        0001    0       0       0       00FFFFFF        0       0  0                                                                               
vmnet1  00FCA8C0        00000000        0001    0       0       0       00FFFFFF        0       0  0                                                                             
eth0    00000000        0101A8C0        0003    0       0       0       00000000        0       0  0

Ens dóna el mateix resultat que la comanda route (el format està però en hexadecimal).

NOTA: No s'ha d'editar aquest fitxer directament. Cal utilitzar la comanda route

/etc/nscd.conf

És el fitxer de configuració del servei NSCD (Name Service Cache Daemon) en tots els sistemes.

/etc/nsswitch.conf

Vegeu Client_DNS#.2Fetc.2Fnsswitch.conf

/etc/network/options

A Debian s'utilitza (és llegeix els continguts a l'executar l'init script /etc/init.d/networking/restart) per configurar les opciones d'arrancada de les targetes de xarxa. Exemple:

$ cat /etc/network/options
ip_forward=no
spoofprotect=yes
syncookies=no

'Recursos:

/proc/sys/net/ipv4

La carpeta proc conté el pseudo sistema de fitxers (realment aquest sistema de fitxers només existeix en memòria) que s'utilitza com una interfície per accedir a les estructures de dades del kernel de Linux. Majoritariament és de només lectura, però en alguns casos es poden modificar algunes variables. La informació del protocol IP es guarda a la carpeta:

/proc/sys/net/ipv4

/proc/sys/net/ipv4/ip_forward

Indica si la màquina fa o no les funcions d'Encaminador.

/proc/sys/net/ipv6

Equivalent a l'anterior però per a la versió 6 del protocol IP.

/etc/NetworkManager/dispatcher.d/01ifupdown

$ cat /etc/NetworkManager/dispatcher.d/01ifupdown
#!/bin/sh -e
# Script to dispatch NetworkManager events
#
# Runs ifupdown scripts when NetworkManager fiddles with interfaces. 

if [ -z "$1" ]; then
    echo "$0: called with no interface" 1>&2
    exit 1;
fi

# Fake ifupdown environment
export IFACE="$1"
export LOGICAL="$1"
export ADDRFAM="NetworkManager"
export METHOD="NetworkManager"
export VERBOSITY="0" 

# Run the right scripts
case "$2" in
    up)
        export MODE="start"
        export PHASE="up"
        exec run-parts /etc/network/if-up.d
        ;;
    down)
        export MODE="stop"
        export PHASE="down"
        exec run-parts /etc/network/if-down.d
        ;;
    pre-up)
        export MODE="start"
        export PHASE="pre-up"
        exec run-parts /etc/network/if-pre-up.d
        ;;
    post-down)
        export MODE="stop"
        export PHASE="post-down"
        exec run-parts /etc/network/if-post-down.d
        ;;
    *)
        echo "$0: called with unknown action \`$2'" 1>&2
        exit 1
        ;;
esac

Sembla doncs, que amb Netowrk manager els scripts de les carpetes /etc/network/if-x.d també s'executen.

/etc/bind

Veieu la secció Configuració de bind de l'article sobre DNS.

/etc/bind/named.conf

Veieu la secció /etc/bind/named.conf de l'article sobre DNS.

/etc/bind/named.conf.local

Veieu la secció /etc/bind/named.conf.local de l'article sobre DNS.

/etc/bind/named.conf.options

Veieu la secció /etc/bind/named.conf.options de l'article sobre DNS.

Configuració gràfica de xarxa a Ubuntu

Configuració gràfica de xarxa en sistemes Red Hat / Fedora

$ system-config-network

Altres configuradors de la xarxa a Red Hat/Fedora són:

  • netconfig: Obsolet.
  • system-config-network-tui: Versió de text de system-config-network.
  • system-config-network-druid (Menu System tools - Internet configuration wizard): Wizard pas a pas de configuració de la xarxa.

Els fitxers de configuració de la resolució de noms són els mateixos que a Debian. El fitxer /etc/hosts per a la configuració estàtica i el fitxer /etc/resolv.conf per a la configuració del client de DNS.

Red Hat com Ubuntu, també permet configurar diferents perfils d'accés a xarxa. Els perfils es guarden a la carpeta /etc/sysconfig/networking/profiles. Cada perfil es guarda en una carpeta amb el nom del perfil. Per exemple, si el perfil és casa tenim una carpeta:

/etc/sysconfig/networking/profiles/casa

amb la informació de xarxa d'aquest perfil. Al carregar Fedora utilitza el perfil default (/etc/sysconfig/networking/profiles/default). Per canviar de perfil podem executar:

$ system-config-network-cmd -p profilename --activate.

Recursos:

Configuració gràfica de xarxa en sistemes SUSE (OpenSuse, Linkat...)

La configuració gràfica es pot fer mitjançant la eina de Suse YAst, que normalment trobem al Menu Escriptori i busquem la configuració de la targeta de xarxa. Podem accedir al mateix lloc directament des de la línia de comandes:

/sbin/yast2 lan

Troubleshooting

Test de la xarxa

La següent bateria de comandes pot ser útil per tal de testejar el funcionament de la xarxa

$ping yahoo.com # verificar la conexión a Internet
$traceroute yahoo.com      # rastrear paquetes IP
$ifconfig                  # verificar la configuración del 
                               # anfitrión (host)
$route -n                  # verificar la configuración de la ruta
$dig [@dns-server.com] host.dom [{a|mx|any}] |less
         # verificar registros host.dom DNS [@ dns-server.com] para  
         # un registro {a|mx|any}
$ichains  -L -n |less      # verificar filtrado de paquetes (kernel 2.2)
$iptables -L -n |less      # verificar filtrado de paquetes (kernel 2.4)
$netstat -a                # mostrar todos los puertos abiertos
$netstat -l --inet         # mostrar los puertos en escucha
$netstat -ln --tcp         # mostrar puertos tcp en escucha (numérico)


Recursos

Categoria:Xarxa

Personal tools