Vengono ora presentati esempi delle configurazioni più tipiche. Devono essere prese come spunto, visto che ci sono tanti modi di configurare reti, quanto il numero di reti stesso, ma possono comunque essere d'ispirazione.
Molti hanno delle piccole reti locali a casa e vogliono connettere le macchine ivi presenti alla rete radio. Questo è il tipo di configurazione che uso a casa. Ho fatto in modo di avere un blocco di indirizzi a me allocato che per comodità posso catturare in una singola route e che uso per la mia LAN domestica. Il vostro coordinatore IP locale vi assisterà se volete farlo anche voi. Gli indirizzi per la rete locale Ethernet formano un sottoinsieme degli indirizzi della LAN radio; quella che segue è la configurazione che adotto:
. . . . . . ___ _________ . | Rete / \ . Rete | 44.136.8.96/29| | . 44.136.8/24 \ | / | | Router | . \|/ | | | . _____ __________ | | eth0 | Linux | . / \ / \ | |_______________| |_____| TNC |____| Radio |__/ | 44.136.8.97 | e | . \_____/ \__________/ | | | sl0 | | Server | 44.136.8.5 | | | . | | | . | \_________/ . _|_ . . . . . . |
#!/bin/sh # /etc/rc.net # Questa configurazione rende disponibile una porta KISS AX.25 # e un dispositivo Ethernet. echo "/etc/rc.net" echo " Sto configurando:" echo -n " loopback:" /sbin/ifconfig lo 127.0.0.1 /sbin/route add 127.0.0.1 echo " fatto." echo -n " ethernet:" /sbin/ifconfig eth0 44.136.8.97 netmask 255.255.255.248 \ broadcast 44.136.8.103 up /sbin/route add 44.136.8.97 eth0 /sbin/route add -net 44.136.8.96 netmask 255.255.255.248 eth0 echo " fatto." echo -n " AX.25: " kissattach -i 44.136.8.5 -m 512 /dev/ttyS1 4800 ifconfig sl0 netmask 255.255.255.0 broadcast 44.136.8.255 route add -host 44.136.8.5 sl0 route add -net 44.136.8.0 window 1024 sl0 echo -n " NET/ROM: " nrattach -i 44.136.8.5 NET/ROM echo " Routing:" /sbin/route add default gw 44.136.8.68 window 1024 sl0 echo " default route." echo done. # end |
/etc/ax25/axports
# nome nominativo velocità paclen window descrizione 4800 VK2KTJ-0 4800 256 2 144.800 MHz |
/etc/ax25/nrports
# nome nominativo alias paclen descrizione NET/ROM VK2KTJ-9 LINUX 235 Linux Switch Port |
/etc/ax25/nrbroadcast
# nome_ax25 min_obs def_qual worst_qual verbose 4800 1 120 10 1 |
Occorre che IP_FORWARDING sia abilitato nel vostro kernel.
Quando necessario fare riferimento ai file di configurazione AX.25 presentati nelle sezioni precedenti.
Ho scelto di usare un indirizzo IP per la mia porta radio che non fa parte del blocco usato per la mia rete. Ciò non è obbligatorio, per quella porta si sarebbe potuto tranquillamente usare anche 44.136.8.97.
44.136.8.68 è il mio gateway locale dove il traffico IPIP viene incapsulato, e per questo vi punto la mia route di default.
Ogni macchina sulla mia rete Ethernet ha una route:
route add -net 44.0.0.0 netmask 255.0.0.0 \ gw 44.136.8.97 window 512 mss 512 eth0 |
L'uso dei parametri mss e window permette di ottimizzare le connessioni sia dal lato radio che da quello Ethernet.
Sulla macchina router vengono fatti girare smail, http, ftp ed altri demoni, in modo che questa sia l'unica macchina che fornisce servizi ad altri.
La macchina che funge da router è un piccolo 386DX20 con un disco fisso da 20Mb ed una installazione di Linux minimale.
Alcune informazioni sul routing qui fornite, sono obsolete. Il setup è cambiato dai tempi del kernel 2.0.x, e ora andrebbe utilizzato il comando "ip" presente nel pacchetto iproute2, come descritto nell'Advanced Routing HOWTO. |
Linux oggi è utilizzato spessissimo per i gateway di incapsulamento TCP/IP in tutto il mondo. Il driver per il tunneling supporta route di incapsulamento multiple rendendo obsoleto il vecchio demone ipip.
Una configurazione tipica è simile alla seguente:
. . . . . . ___ _________ . | Rete / \ . Rete | 154.27.3/24 | | . 44.136.16/24 \ | / | | Gateway | . \|/ | | | . _____ __________ | | eth0 | Linux | . / \ / \ | ___|_______________| |_____| TNC |____| Radio |___/ | 154.27.3.20 | IPIP | . \_____/ \__________/ | | | sl0 | | | 44.136.16.1 | | | . | | | . | \_________/ . _|_ . . . . . . |
I file di configurazione che si usano sono:
# /etc/rc.net # Questa è una semplice configurazione che rende disponibile una # porta radio KISS AX.25, un dispositivo Ethernet e sfrutta il tunnel # driver del kernel per effettuare l'incapsulamento/deincapsulamento # IPIP # echo "/etc/rc.net" echo " Sto configurando:" # echo -n " loopback:" /sbin/ifconfig lo 127.0.0.1 /sbin/route add 127.0.0.1 echo " fatto." # echo -n " ethernet:" /sbin/ifconfig eth0 154.27.3.20 netmask 255.255.255.0 \ broadcast 154.27.3.255 up /sbin/route add 154.27.3.20 eth0 /sbin/route add -net 154.27.3.0 netmask 255.255.255.0 eth0 echo " fatto." # echo -n " AX.25: " kissattach -i 44.136.16.1 -m 512 /dev/ttyS1 4800 /sbin/ifconfig sl0 netmask 255.255.255.0 broadcast 44.136.16.255 /sbin/route add -host 44.136.16.1 sl0 /sbin/route add -net 44.136.16.0 netmask 255.255.255.0 window 1024 sl0 # echo -n " tunnel:" /sbin/ifconfig tunl0 44.136.16.1 mtu 512 up # echo fatto. # echo -n "Routing ... " source /etc/ipip.routes echo fatto. # # end. |
e:
# /etc/ipip.routes # Questo file è generato dallo script munge # /sbin/route add -net 44.134.8.0 netmask 255.255.255.0 tunl0 gw 134.43.26.1 /sbin/route add -net 44.34.9.0 netmask 255.255.255.0 tunl0 gw 174.84.6.17 /sbin/route add -net 44.13.28.0 netmask 255.255.255.0 tunl0 gw 212.37.126.3 ... ... ... |
/etc/ax25/axports
# nome nominativo velocità paclen window descrizione 4800 VK2KTJ-0 4800 256 2 144.800 MHz |
Alcuni punti su cui soffermarsi:
Il nuovo driver per il tunnelling usa il campo gw nella tabella di routing al posto del parametro pointopoint per specificare l'indirizzo del gateway IPIP remoto. Questo è il motivo per cui ora sono supportate route multiple per ciascuna interfaccia.
Si possono configurare due dispositivi di rete con lo stesso indirizzo. In quest'esempio sia sl0 che tunl0 sono stati configurati con l'indirizzo IP della porta radio; in questo modo il gateway remoto vede l'indirizzo corretto nei datagrammi incapsulati che il gateway locale gli invia.
I comandi di routing usati per generare le route incapsulate possono essere generati da una versione modificata dello script munge che viene riportato più sotto. I comandi di routing vengono scritti in un file separato e letto usando il comando bash source /etc/ipip.routes (supponendo di aver chiamato /etc/ipip.routes il file in questione). Il file deve essere nel formato delle route di NOS.
Si noti l'uso dell'argomento window nel comando route. Impostando opportunamente questo parametro si migliorano le prestazioni del collegamento radio.
Il nuovo script tunnel-munge:
#!/bin/sh # # Da: Ron Atkinson <n8fow@hamgate.cc.wayne.edu> # # Questo script è basato sullo script 'munge' scritto da Bdale N3EUA # per il demone IPIP, modificato da Ron Atkinson N8FOW. Il suo scopo # è quello di convertire un file di gateway nel formato NOS di KA9Q # (chiamato di solito 'encap.txt') nel formato delle tabelle di # routing di Linux per il tunnel driver IP # # Uso: File dei gateway su stdin, file nel formato Linux su stdout. # esempio: tunnel-munge < encap.txt > ampr-routes # # NOTA: Prima di usare questo script assicurarsi di controllare ed # eventualmente cambiare i seguenti parametri: # # 1) Cambiare le sezioni 'Route locali e 'Altre route # dell'utente' con le route presenti nella vostra area # (rimuovete le mie!) # 2) Sulla riga di fgrep assicurarsi di cambiare l'indirizzo IP # con il VOSTRO indirizzo di gateway internet. Se non si # effettua questa operazione si rischiano seri routing loop. # 3) L'interfaccia ha nome di default 'tunl0'. Assicurarsi che # questa assunzione sia corretta sul vostro sistema. echo "#" echo "# Tabella di routing con IP tunnelling generata da $LOGNAME il `date`" echo "# dallo script tunnel-munge v960307." echo "#" echo "# Route locali" echo "route add -net 44.xxx.xxx.xxx netmask 255.mmm.mmm.mmm dev sl0" echo "#" echo "# Altre route dell'utente" echo "#" echo "# route remote" fgrep encap | grep "^route" | grep -v " XXX.XXX.XXX.XXX" | \ awk '{ split($3, s, "/") split(s[1], n,".") if (n[1] == "") n[1]="0" if (n[2] == "") n[2]="0" if (n[3] == "") n[3]="0" if (n[4] == "") n[4]="0" if (s[2] == "1") mask="128.0.0.0" else if (s[2] == "2") mask="192.0.0.0" else if (s[2] == "3") mask="224.0.0.0" else if (s[2] == "4") mask="240.0.0.0" else if (s[2] == "5") mask="248.0.0.0" else if (s[2] == "6") mask="252.0.0.0" else if (s[2] == "7") mask="254.0.0.0" else if (s[2] == "8") mask="255.0.0.0" else if (s[2] == "9") mask="255.128.0.0" else if (s[2] == "10") mask="255.192.0.0" else if (s[2] == "11") mask="255.224.0.0" else if (s[2] == "12") mask="255.240.0.0" else if (s[2] == "13") mask="255.248.0.0" else if (s[2] == "14") mask="255.252.0.0" else if (s[2] == "15") mask="255.254.0.0" else if (s[2] == "16") mask="255.255.0.0" else if (s[2] == "17") mask="255.255.128.0" else if (s[2] == "18") mask="255.255.192.0" else if (s[2] == "19") mask="255.255.224.0" else if (s[2] == "20") mask="255.255.240.0" else if (s[2] == "21") mask="255.255.248.0" else if (s[2] == "22") mask="255.255.252.0" else if (s[2] == "23") mask="255.255.254.0" else if (s[2] == "24") mask="255.255.255.0" else if (s[2] == "25") mask="255.255.255.128" else if (s[2] == "26") mask="255.255.255.192" else if (s[2] == "27") mask="255.255.255.224" else if (s[2] == "28") mask="255.255.255.240" else if (s[2] == "29") mask="255.255.255.248" else if (s[2] == "30") mask="255.255.255.252" else if (s[2] == "31") mask="255.255.255.254" else mask="255.255.255.255" if (mask == "255.255.255.255") printf "route add -host %s.%s.%s.%s gw %s dev tunl0\n"\ ,n[1],n[2],n[3],n[4],$5 else printf "route add -net %s.%s.%s.%s gw %s netmask %s dev tunl0\n"\ ,n[1],n[2],n[3],n[4],$5,mask }' echo "#" echo "# si utilizza mirrorshades.ucsd.edu come gateway di default per la parte rimanente di amprnet" echo "route add -net 44.0.0.0 gw 128.54.16.18 netmask 255.0.0.0 dev tunl0" echo "#" echo "# the end" |
Molti gateway radioamatoriali per Internet incapsulano l'AX.25, NET/ROM e Rose oltre che il tcp/ip. L'incapsulamento di frame AX.25 in datagrammi IP viene descritta nell'RFC-1226 da Brian Kantor. Nel 1991 Mike Westerhof ha scritto un'implementazione del demone di incapsulamento dell'AX.25 per Unix, che viene proposta per Linux nelle ax25-utils in una versione leggermente migliorata.
Un gateway di incapsulamento AXIP prende i frame AX.25, ne ricava l'indirizzo AX.25 di destinazione e in base a questo determina a quale indirizzo IP inviarli, dopo averli incapsulati in datagrammi tcp/ip, che vengono mandati all'indirizzo di destinazione. Inoltre permette anche il percorso inverso, accettando datagrammi tcp/ip che contengono frame AX.25. Questi vengono estratti e trattati come se fossero pervenuti direttamente da una porta AX.25. Per distinguere i datagrammi che contengono frame AX.25, li si marca con un protocol id uguale a 4 (o 94 anche se questo è ora sconsigliato), come descritto dalla RFC-1226.
Il programma ax25ipd incluso nelle ax-25utils gestisce un'interfaccia KISS sulla quale si possono far transitare pacchetti AX.25 ed un'interfaccia tcp/ip. Viene configurato tramite il file di configurazione /etc/ax25/ax25ipd.conf.
Il programma ax25ipd possiede due modi principali di funzionamento: il modo "digipeater" e il modo "tnc". Nel modo "tnc" il demone viene considerato come un tnc KISS, gli si passano frame KISS incapsulati in modo che li trasmetta, mentre nel modo "digipeater" si comporta, appunto, come un digipeater AX.25. Tra queste due modalità vi sono delle sottili differenze.
Nel file di configurazione si stabiliscono le "route" o le corrispondenze tra i nominativi AX.25 e gli indirizzi IP degli host ai quali si vogliono mandare i pacchetti AX.25. Ogni route possiede delle opzioni che verranno spiegate più avanti.
Altre opzioni che vengono configurate sono:
la tty che il demone ax25ipd apre e la sua velocità (di solito è un'estremità di una pipe)
che nominativo usare in modo "digipeater"
l'intervallo di emissione e il testo trasmesso dal beacon.
se si vogliono incapsulare i frame AX.25 in datagrammi IP oppure UDP/IP. Quasi tutti i gateway AXIP usano l'IP encapsulation, ma alcuni sono dietro a firewall che non permettono il passaggio a datagrammi col protocol id dell'AXIP, costringendoli ad usare UDP/IP. Quale che sia la scelta, deve essere uguale a quella dell'host TCP/IP dall'altra parte del collegamento.
# # file di configurazione ax25ipd per la stazione floyd.vk5xxx.ampr.org # # Selezione del tipo di trasporto. 'ip' permette la compatibilità # con la maggior parte dei gateway # socket ip # # Indicazione del tipo di modalità ax25ipd (digi or tnc) # mode tnc # # Se si è scelta la modalità digi, occorre definire un nominativo. # Se si è in modo tnc, il nominativo è attualmente opzionale, ma ciò # può cambiare in futuro (2 nominativi se si usano due porte kiss) # #mycall vk5xxx-4 #mycall2 vk5xxx-5 # # In modalità digi si può indicare un alias. (2 se si usano due porte kiss) # #myalias svwdns #myalias2 svwdn2 # # Si manda l'identificativo ogni 540 secondi ... # #beacon after 540 #btext ax25ip -- tncmode rob/vk5xxx -- Gateway sperimentale AXIP # # Porta seriale, o pipe connessa a kissattach in questo caso. # device /dev/ttyq0 # # Velocità del dispositivo # speed 9600 # # loglevel 0 - nessun output # loglevel 1 - solo informazioni di configurazione # loglevel 2 - principali eventi ed errori # loglevel 3 - principali eventi ed errori, nonchè la traccia dei # frame AX.25 # loglevel 4 - tutti gli eventi # log 0 per il momento, con syslog ancora non funziona .... # loglevel 2 # # Se siamo in modalità digi, ci dev'essere un vero tnc, # quindi uso param per settare i suoi parametri .... # #param 1 20 # # Definizione degli indirizzi di broadcast. Ognuno degli indirizzi # indicati sarà inoltrato ad ogni route indicate come in grado di effettuare il # broadcast. # broadcast QST-0 NODES-0 # # definizione delle route ax.25 # il formato è route (nominativo/carattere jolly) (ip dell'host di # destinazione) Se il ssid è zero la regola si applica a tutti i ssid. # # route <destcall> <destaddr> [flags] # # I flag validi sono # b - permette il transito dei broadcast attraverso questa # route # d - indica che questa è la route di default # route vk2sut-0 44.136.8.68 b route vk5xxx 44.136.188.221 b route vk2abc 44.1.1.1 # # |
# /etc/ax25/axports # axip VK2KTJ-13 9600 256 porta AXIP # |
/usr/sbin/kissattach /dev/ptyq0 axip 44.135.96.242 |
/usr/sbin/ax25ipd & |
call axip vk5xxx |
Col comando "route" si specifica dove si vuole che i propri pacchetti AX.25 siano incapsulati e spediti. Quando il demone ax25ipd riceve un pacchetto dalla sua interfaccia, confronta il nominativo di destinazione con tutti quelli presenti nella tabella di routing. Se lo trova, il pacchetto AX.25 viene incapsulato in un datagramma IP e poi trasmesso all'host avente l'indirizzo IP indicato.
Ci sono due flag che si possono aggiungere ad ogni comando di route nel file ax25ipd.conf:
il traffico che ha come destinazione gli indirizzi definiti dalla parola chiave "broadcast" devono essere trasmessi attraverso questa route.
ogni pacchetto il cui indirizzo non compare in alcuna route deve essere trasmessa attraverso questa route.
Il flag di broadcast è molto utile, poiché permette di inviare informazioni destinate a tutte le stazioni, a molte destinazioni AXIP. Normalmente le route AXIP sono di tipo punto-punto ed incapaci di gestire pacchetti di tipo 'broadcast'.
Molti radioamatori utilizzano alcune versioni di NOS sotto Linux, poiché hanno a disposizione tutte le funzionalità a cui sono abituati; a molti di questi piacerebbe che il loro NOS potesse colloquiare col kernel di Linux in modo di poter mettere a disposizione le funzionalità del sistema operativo agli utenti che si collegano via radio con NOS.
Brandon S. Allbery, KF8NH, ha fornito queste informazioni, che consentono di interconnettere il NOS con Linux tramite il dispositivo pipe.
Poiché sia Linux che NOS supportano il protocollo slip, si possono connettere creando un link di questo tipo. È possibile realizzare il collegamento utilizzando due porte seriali della stessa macchina con un cavo loopback tra loro, ma questa realizzazione risulterebbe lenta e costosa. Linux, al contrario, fornisce una funzionalità tipica dei sistemi Unix chiamata 'pipe'. I pipe sono degli 'pseudo-dispositivi' che vengono visti dai programmi come normali dispositivi tty, ma che in realtà fungono da collegamento verso un altro pipe. Per usarli il programma chiamante deve attivare il pipe master e, successivamente, il programma chiamato deve fare lo stesso col pipe slave. Una volta aperte le due porte, i programmi possono comunicare tra loro semplicemente scrivendo caratteri sul dispositivo pipe, esattamente come se fossero normali terminali seriali.
Per usare questa funzionalità per connettere il kernel di Linux con una copia di NOS od altri programmi, occorre per prima cosa scegliere il pipe da usare. I pipe trovano nella directory /dev; le parti master del pipe sono chiamate ptyq[1-f], mentre quelle slave sono ttyq[1-f]. Si ricordi che vanno sempre in coppia, per cui se si sceglie /dev/ptyqf come parte master, occorre scegliere /dev/ttyqf come parte slave.
Una volta scelta una coppia di dispositivi pipe da usare, la parte master va allocata al kernel Linux, mentre la parte slave va assegnata a NOS, poiché il kernel si attiva per primo e il master deve essere aperto prima dello slave; occorre quindi allocare un indirizzo unico per NOS, se non si è già provveduto a farlo.
I pipe si configurano come se fossero dispositivi seriali, per cui per creare il collegamento slip dal kernel Linux, si possono usare i seguenti comandi:
# /sbin/slattach -s 38400 -p slip /dev/ptyqf & # /sbin/ifconfig sl0 broadcast 44.255.255.255 pointopoint 44.70.248.67 / mtu 1536 44.70.4.88 # /sbin/route add 44.70.248.67 sl0 # /sbin/route add -net 44.0.0.0 netmask 255.0.0.0 gw 44.70.248.67 |
In questo esempio al kernel Linux è stato assegnato l'indirizzo IP 44.70.4.88, mentre NOS usa l'indirizzo 44.70.248.67. Il comando route nell'ultima riga indica al kernel Linux di instradare, attraverso il collegamento slip creato dal comando slattach, tutti i datagrammi indirizzati verso amprnet. Normalmente questi comandi vanno messi nel file /etc/rc.d/rc.inet2 immediatamente dopo tutti gli altri comandi di configurazione della rete, in modo che il collegamento slip sia creato alla partenza del sistema. Nota: non c'è alcun vantaggio nell'uso del comando cslip al posto di slip, anzi, con cslip si avverte un calo di prestazioni poiché, essendo un collegamento virtuale, il tempo impiegato per comprimere gli header è superiore di quello che viene impiegato per trasmettere i datagrammi non compressi.
Per configurare la parte NOS dall'altra parte del collegamento si può usare la seguente configurazione:
# si può chiamare l'interfaccia come si vuole, in questo caso la si è # chiamata "linux" per comodità attach asy ttyqf - slip linux 1024 1024 38400 route addprivate 44.70.4.88 linux |
Questi comandi creano una porta slip chiamata 'linux' attraverso la parte slave del pipe che lo collega al kernel di Linux, ed un comando di route per farla funzionare. Una volta fatto partire NOS, si deve essere in grado di eseguire ping e telnet da Linux a NOS e viceversa. Se ciò non si verificasse, controllare con attenzione soprattutto la corretta configurazione degli indirizzi e del pipe.