Realizzare una piccola rete privata

Marco Marongiu

Gruppo Utenti Linux Cagliari

Sommario

Materiale occorrente

Configurazione NAT

Configurazione server DNS interno

Configurazione server DHCP interno

Configurazione client DHCP

Test della configurazione

Materiale occorrente

Un computer collegato in qualche modo a Internet (modem analogico, ADSL, ISDN...) e dotato di una ulteriore scheda ethernet

Cavi ethernet

Un hub o switch

Un altro computer con scheda ethernet

Avvertenze

Distribuzione Debian “Woody” 3.0, con kernel 2.4.18-586tsc

Hardware: Pentium 133, 64Mb RAM

Modem 28.8kbps

Schema

IP Masquerading

IP Masquerade, called "IPMASQ" or "MASQ" for short, is a form of Network Address Translation (NAT) which allows internally connected computers that do not have one or more registered Internet IP addresses to communicate to the Internet via the Linux server's Internet IP address. (IP Masquerading HOWTO)

IP Masquerading

È a tutti gli effetti un NAT 1:N

Genericamente, il NAT può essere definito come un'operazione che mappa un pool di indirizzi IP su un altro, in maniera trasparente per gli host mittente e destinatario

Ne esistono diversi tipi, che non approfondiamo

Not-NAT-Note

Un dispositivo NAT funziona modificando i pacchetti che lo attraversano

In alcuni casi questa modifica arriva fino al livello applicativo (es.: FTP)

L'affermazione che il NAT accresce la sicurezza di una rete è discutibile (cfr.IPSec)

Si raccomanda la lettura dell'RFC2993 ai più esperti

IPMASQ: cosa serve

Kernel 2.4 (nel nostro caso!)

Supporto IP Masquerading a livello di kernel (built-in o modulare)

Il programma iptables, versione 1.2.4+

Moduli di iptables per il supporto di vari protocolli

Connettività verso internet

Se non avete il supporto per IPMASQ nel kernel, dovrete procurarvelo!

Piano di indirizzamento

Ottenuto il supporto per IPMASQ nel kernel, possiamo procedere con la configurazione della rete interna

Occorre scegliere una classe privata di indirizzamento

10.0.0.0 - 10.255.255.255 (1 A)

172.16.0.0 - 172.31.255.255 (16 B)

192.168.0.0 - 192.168.255.255 (255 C)

Piano di indirizzamento

Ho scelto la classe C 192.168.1.x

La maschera di sottorete (netmask) è 255.255.255.0

Al gateway assegno l'indirizzo 192.168.1.1

Il range 2-127 lo assegnerò staticamente

Il range 128-254 lo assegnerò dinamicamente con DHCP

Attivazione IPMASQ

L'HOWTO riporta lo script rc.firewall-2.4 che potete modificare ed usare

Se intendete usare IPMASQ con un collegamento telefonico via PPP, potete inserire questo script in /etc/ppp/ip-up.d

In questo caso, una delle modifiche da fare è impostare INTIF=ppp0

Se intendete usare IRC, decommentate la linea che ne carica il supporto

Configurare il server DNS

Perché farlo

Per fare il caching degli indirizzi risolti (riduce il traffico verso l'esterno)

Per poter assegnare un nome alle macchine della nostra rete

Possiamo usare i nomi anziché gli indirizzi IP

Perché no

Già, perché?

BIND 9

Installare il pacchetto bind9

Consigliati anche bind9-doc e bind9-host

Per ogni dominio che volete definire (p.e.: marongiu.home) dovrete creare due file in /etc/bind

Il file per la risoluzione diretta (nomeIP) lo chiamiamo db.internal

Il file per la risoluzione inversa lo chiamiamo db.192.168

db.internal

$TTL	604800

@	IN	SOA	nonno.marongiu.home. root.marongiu.home. (

1 ; Serial

604800 ; Refresh

86400 ; Retry

2419200 ; Expire

604800 ) ; Negative Cache TTL

;

@	IN	NS	nonno.marongiu.home.

@	IN	MX 1	nonno.marongiu.home.

@	IN	A	192.168.1.1

nonno	IN	A	192.168.1.1

nonno	IN	HINFO	"PC Pentium 133"	"Debian 3.0"

gw	IN	CNAME	nonno

nat	IN	CNAME	nonno

nonno	IN	TXT	"Il nonno e` stanco"

marmotta	IN	A	192.168.1.2

marmotta	IN	HINFO	"Laptop P IV"	"WinXP HE, Debian 3.0"

cooper	IN	A	192.168.1.3

cooper	IN	HINFO	"Laptop P III" "Win2K AS, Debian 3.0"

SOA

$TTL	604800

@	IN	SOA	nonno.marongiu.home. root.marongiu.home. (

1 ; Serial

604800 ; Refresh

86400 ; Retry

2419200 ; Expire

604800 ) ; Negative Cache TTL

Name server e Mail Exchanger

@	IN	NS	nonno.marongiu.home.

@	IN	MX 1	nonno.marongiu.home.

@	IN	A	192.168.1.1

Informazioni sugli host

nonno	IN	A	192.168.1.1

nonno	IN	HINFO	"PC Pentium 133"	"Debian 3.0"

gw	IN	CNAME	nonno

nat	IN	CNAME	nonno

nonno	IN	TXT	"Il nonno e`	stanco"

db.192.168

;

; BIND reverse data file for internal network

;

$TTL 604800

@	IN	SOA	nonno.marongiu.home. root.marongiu.home. (

1 ; Serial

604800 ; Refresh

86400 ; Retry

2419200 ; Expire

604800 ) ; Negative Cache TTL

;

@ IN NS nonno.marongiu.home.

1.1 IN PTR nonno.marongiu.home.

2.1 IN PTR marmotta.marongiu.home.

3.1 IN PTR cooper.marongiu.home.

Pointer

@	IN	NS	nonno.marongiu.home.

1.1	IN	PTR	nonno.marongiu.home.

2.1	IN	PTR	marmotta.marongiu.home.

3.1	IN	PTR	cooper.marongiu.home.

named.conf

Costruite così le mappe DNS, bisogna fare in modo che bind le trovi e le utilizzi per il dominio che stiamo definendo. Questa funzione è svolta dal file/etc/bind/named.conf

Alle impostazioni di default andremo ad aggiungere una sezione per il dominio appena creato.

named.conf

zone "marongiu.home" {

type master;

file "/etc/bind/db.internal";

};

zone "168.192.in-addr.arpa" {

type master;

file "/etc/bind/db.192.168";

};

Significato del simbolo @

La @, in ogni mappa DNS, corrisponde alla stringa che segue la direttiva “zone” nel file named.conf

Nel nostro caso...

In db.internal significa marongiu.home

In db.192.168 significa 168.192.in-addr.arpa

Configurazione del server DHCP

Installare il pacchetto dhcp3-server (attenzione alle patch!)

In /etc/dhcp3/dhcpd.conf ci sono sezioni commentate che offrono numerosi esempi utili

Nella nostra configurazione indicheremo il dominio, il gateway, il name server, assegneremo due indirizzi fissi e un range di indirizzi dinamici

Dominio e name server

Nella prima parte del file vengono assegnate le opzioni comuni a tutte le reti gestite

Nel nostro caso:

option domain-name "marongiu.home";

option domain-name-servers nonno.marongiu.home;

Indirizzi assegnati dinamicamente

Per la sottorete che abbiamo scelto indichiamo l'intervallo di indirizzi, il gateway (opzione “routers”) e l'indirizzo di broadcast

subnet 192.168.1.0 netmask 255.255.255.0 {

range 192.168.1.128 192.168.1.254;

option routers 192.168.1.1;

option broadcast-address 192.168.1.255;

}

Assegnazione statica

è possibile assegnare anche staticamente gli indirizzi, in base al MAC address

in questo modo, le macchine indicate ottengono sempre lo stesso indirizzo quando si collegano alla rete

questo permette di utilizzare il nostro DNS per risolvere l'associazione nome/indirizzo

Assegnazione statica

per conoscere il MAC address si può usare il comando ifconfig:

marmotta:~# ifconfig eth0

eth0 Link encap:Ethernet Hwaddr 00:02:3F:75:D3:46

inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:170 errors:0 dropped:0 overruns:0 frame:0

TX packets:192 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:100

RX bytes:70586 (68.9 KiB) TX bytes:21209 (20.7 KiB)

Interrupt:11 Base address:0x4000

Assegnazione statica

A questo punto posso associare il MAC address all'indirizzo:

host marmotta {

hardware ethernet 00:02:3f:75:d3:46;

fixed-address 192.168.1.2;

}

Configurazione del client DHCP

installate il pacchetto dhcp3-client

avete già finito! Ma...

salvate il file /etc/resolv.conf, perché il client lo sovrascrive senza fare una copia del precedente

se lo usate a linea di comando, lanciatelo specificando l'interfaccia (p.e.: dhclient eth0)

è possibile farlo eseguire all'avvio

Configurazione automatica

# The loopback interface

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet dhcp

Protocolli supportati

Ho provato con successo i protocolli seguenti:

telnet, ssh

ftp, http (con e senza SSL), POP3, IMAP4 (con e senza SSL), SMTP

DNS, IRC...

Bibliografia

D.A. Ranch: Linux IP Masquerade HOWTO (http://www.tldp.org)

N.Langfeldt, J.Norrish et alii: DNS HOWTO (http://www.tldp.org)

Architectural implications of NAT, RFC 2993 (http://www.faqs.org/rfcs/)

M.Marongiu: Home Network HOWTO (non lo trovate su Internet, per ora :-)

Serve aiuto?

Leggete gli HOWTO in bibliografia e provate

Se, malgrado questo, qualcosa va storto...

Iscrivetevi e scrivete alla lista gulchelp@gulch.crs4.it (non occorre essere soci GULCh)

Per la debian, domandate su DebianHelp (http://www.debianhelp.org)

Informazioni su questo documento

Questo documento è stato composto utilizzando esclusivamente software libero

le pagine sono state composte con OpenOffice.org versione 1.0.1

gli schemi sono stati composti con Xfig

il logo del GULCh, Goppai, è una creazione di Ivana e Alceste Scalas

The end

Grazie per la vostra attenzione

Arrivederci al Linux Day 2004!

Costruire una piccola rete privata

Presentazione per Linux Day 2003 a Cagliari

Marco Marongiu

2003-10-18T18:35:53

Marco Marongiu