Tag-Archive for » adsl «

Monday, May 04th, 2009 | Author: admin

Alice adsl funziona in pppoe, e da ormai qualche anno quasi tutti i modem alice funzionano in modalità routed+bridge. Quesa configurazione da la possibilità di utilizzare il modem come fosse un router, ma anche di lanciare una sessione pppoe direttamente da qualsiasi client in rete locale, e vedersi assegnare un ip pubblico.
E se lanciamo più sessioni pppoe sul nostro server linux?
Si, è possibile avere più device ppp, con ip differenti, utilizzabili a nostro piacimento, bisogna solo stare attenti al routing, che non è così immediato da gestire.

Per avere più device ppp in gentoo, è sufficiente creare più script net.pppX in /etc/init.d/ e configurare il device eth relativo all’adsl(sempre lo stesso), in /etc/conf.d/net in questo modo:
config_ppp0=( "ppp" )
config_ppp1=( "ppp" )
link_ppp0="eth2"
link_ppp1="eth2"

Per le altre distribuzioni (per quelle che utilizzano il classico adsl-start), forse è addirittura sufficente lanciare più volte il comando, e vedrete in automatico saltare fuori i vari device ppp!

Tutto si fa tramite iproute2, utilizzando il source-routing (questa è la bibbia):

1° passo:
aggiungiamo delle tabelle di routing nuove in questo file: /etc/iproute2/rt_tables, aggiungendo semplicemente delle righe per ogni tabella:

100 T1
101 T2
102 T3
103 T4
104 T5

per informazione, sia gli ID(prima colonna), che i nomi delle tabelle(seconda colonna), sono a vostra scelta.

2° passo:
Ora dobbiamo far i modo che ogni volta che un dev ppp divenga up, vengano settate le corrette regole di routing, questo si fa tramite il file /etc/ppp/ip-up e lo script /etc/ppp/fire-ppp1
Vediamo un po’ ip-up che chiama semplicemente fire-ppp1 con i parametri adeguati(device, ip4, e una tabella di routing):

if [ "$1" == "ppp1" ]; then
/etc/ppp/fire-ppp1 $1 $4 T1
exit;

mente fire-ppp1, fa quello che più ci interessa:

# Conf
EXT_PPP=$1
IP_PPP=$2
# Routing
ip rule add from ${IP_PPP} table $3
ip route add 192.168.6.0/24 dev eth0 table $3 # Mia rete locale.
ip route add 127.0.0.0/8 dev lo table $3
ip route add default via ${IP_PPP} table $3

Fondamentalmente, con la prima riga di iproute2 viene specificato che i pacchetti che hanno come sorgente l’ip4 di ppp1, devono riferirsi alla tabella di routing T1, e con la terza riga gli si specifica il default route corretto.

Bene, questo è il “cuore”: il routing funziona e non succederà che un pacchetto in entrata su ppp1, voglia uscire su ppp0, ora però ci sono diverse strategie per utilizzare concretamente i nostri svariati device.

La cosa più semplice è usare programmi unix che permettano di specificare l’interfaccia web da utilizzare, ping per esempio :)

gandalf ppp # ping -I ppp1 www.google.it
PING www.l.google.com (74.125.39.103) from 82.52.142.235 ppp1: 56(84) bytes of data.
64 bytes from fx-in-f103.google.com (74.125.39.103): icmp_seq=1 ttl=245 time=53.6 ms
64 bytes from fx-in-f103.google.com (74.125.39.103): icmp_seq=2 ttl=245 time=51.5 ms

Altra soluzione è attivare il masquerading sul device ppp1 aggiungendo queste 2 righe a fire-ppp1
iptables -t nat -D POSTROUTING -o ${EXT_PPP} -j MASQUERADE
e poi definire quale ip della rete locale debba attenersi alla tabella di routing di ppp1 così:
ip rule add from 192.168.6.101 table T1
In questo modo, l’ip 192.168.6.101, uscirà in NAT su ppp1, e non su ppp0.

Oppure ancora, utilizzare squid, definendo i due ip di uscita così:
tcp_outgoing_address 82.52.142.235 ppp1
tcp_outgoing_address 82.52.161.79 ppp0

e definire 2 utenti (ppp0 e ppp1) e la relativa acl

acl ppp0 proxy_auth ppp0
acl ppp1 proxy_auth ppp1
http_access allow ppp0
http_access allow ppp1

Infine si possono semplicemente redirigere porte con iptables nella propria rete, provate e divertitevi.

Queste sono le basi, poi si può fare di tutto, nei file che ho già lincato sopra e allego qui sotto, ci sono molti esempi, anche di utilizzo tramite iptables, di come gestire in automatico il cambio di ip in squid, di come redirigere o bloccare porte, pacchetti, e come farli andare sulla luna (questo no in realtà!)
Buon divertimento!!!

squid.conf
ip-up
fire-ppp1

Category: howto  | Tags: , , ,  | Leave a Comment