Page 1 of 1

Ενώνοντας 2 DSL για διπλό bandwidth

Posted: Sun Mar 02, 2008 12:23 pm
by mp
Τελικά μετά από αρκετή προσπάθεια κατάφερα να ενώσω δύο DSL σε linux ώστε να λειτουργούν σαν μία. Παραθέτω τα scripts που το πετυχαίνουν για όποιον ενδιαφέρεται:

Code: Select all

#!/bin/sh
# script variables: LINKNAME, IFNAME, IPLOCAL , IPREMOTE
# this is for DSL1

case "$1" in
 start)
        # disable reverse path filter on the interface
        echo 0 > /proc/sys/net/ipv4/conf/$IFNAME/rp_filter
        echo $IPREMOTE > /tmp/dsl1-gw
        echo $IFNAME > /tmp/dsl1-ifname
        # add default gateway to multilink table
        /sbin/ip route add table 1 default dev $IFNAME src $IPLOCAL
        # reply packets from the same connection
        /sbin/ip rule add from $IPLOCAL lookup 1
        # setup multipath routing if both lines are up
        if [ -s "/tmp/dsl2-ifname" ]; then
                DSL2IFNAME=`cat /tmp/dsl2-ifname`
                DSL2GW=`cat /tmp/dsl2-gw`
                /sbin/ip route del default
                /sbin/ip route add default scope global nexthop via $IPREMOTE dev $IFNAME weight 1 \
                                                        nexthop via $DSL2GW dev $DSL2IFNAME weight 1
        else
                /sbin/ip route add default dev $IFNAME
        fi
 
        ;;
 stop)
        # remove entries from multilink routing table, remove rule to reply from incoming line
        ip route flush table 1
        ip rule del from $IPLOCAL
        rm /tmp/dsl1-gw
        rm /tmp/dsl1-ifname
        if [ -s "/tmp/dsl2-ifname" ]; then
                DSL2IFNAME=`cat /tmp/dsl2-ifname`
                DSL2GW=`cat /tmp/dsl2-gw`
                /sbin/ip route add default dev $DSL2IFNAME
        fi
        ;;
 *)
        echo $"Usage: $0 {start|stop}"
        exit 1
esac
και

Code: Select all

#!/bin/sh
# script variables: LINKNAME, IFNAME, IPLOCAL , IPREMOTE
# this is for DSL2

case "$1" in
 start)
        # disable reverse path filter on the interface
        echo 0 > /proc/sys/net/ipv4/conf/$IFNAME/rp_filter
        echo $IPREMOTE > /tmp/dsl2-gw
        echo $IFNAME > /tmp/dsl2-ifname
        # add default gateway to multilink table
        /sbin/ip route add table 2 default dev $IFNAME src $IPLOCAL
        # reply packets from the same connection
        /sbin/ip rule add from $IPLOCAL lookup 2
        # setup multipath routing if both lines are up
        if [ -s "/tmp/dsl1-ifname" ]; then
                DSL1IFNAME=`cat /tmp/dsl1-ifname`
                DSL1GW=`cat /tmp/dsl1-gw`
                /sbin/ip route del default
                /sbin/ip route add default scope global nexthop via $IPREMOTE dev $IFNAME weight 1 \
                                                        nexthop via $DSL1GW dev $DSL1IFNAME weight 1
        else
                /sbin/ip route add default dev $IFNAME
        fi
 
        ;;
 stop)
        # remove entries from multilink routing table, remove rule to reply from incoming line
        ip route flush table 2
        ip rule del from $IPLOCAL
        rm /tmp/dsl2-gw
        rm /tmp/dsl2-ifname
        if [ -s "/tmp/dsl1-ifname" ]; then
                DSL1IFNAME=`cat /tmp/dsl1-ifname`
                DSL1GW=`cat /tmp/dsl1-gw`
                /sbin/ip route add default dev $DSL1IFNAME
        fi
        ;;
 *)
        echo $"Usage: $0 {start|stop}"
        exit 1
esac
Η συμπεριφορά ειδικά σε torrents με πολλαπλά connections είναι απλώς τέλεια, 100% utilisation και των δύο DSL.

mp

Posted: Sun Mar 02, 2008 12:32 pm
by korkakak
εχχμμμμμ μήπως αυτό δεν είναι bonding (Ενώνοντας...) αλλά load balancing?

Posted: Sun Mar 02, 2008 12:44 pm
by mp
korkakak wrote:εχχμμμμμ μήπως αυτό δεν είναι bonding (Ενώνοντας...) αλλά load balancing?
Για να κάνεις bonding πρέπει να έχεις τον έλεγχο και στα δύο άκρα. Προφανώς κάτι τέτοιο με DSL δε γίνεται, εκτός κι αν είναι από τον ίδιο provider και συμφωνήσουν να σου τις ενώσουν. Οπότε όταν μιλάμε για "Ενώνοντας δύο DSL" μιλάμε προφανώς για ένα τρόπο που προσπαθεί να πάρει το μέγιστο δυνατό bandwidth και από τις δύο. Θεωρητικά δεν είναι ούτε load balancing, γιατί το equal cost multipath routing δουλεύει σε επίπεδο routes και όχι load γραμμής.

mp

edit: Και μερικές επεξηγήσεις: Τα scripts πρέπει να εκτελούνται στο up και down των ppp interfaces, με παραμέτρους start και stop αντίστοιχα. Υπάρχει risk condition στα scripts, αν τη στιγμή που πέφτει μία DSL σηκώνεται η άλλη, αλλά δε προσπάθησα να το εξαλείψω.

Posted: Sun Mar 02, 2008 1:02 pm
by korkakak
Ναι το ECMP είναι η απλούστερη μορφή load balancing. Μια στέλνεις από το ένα μια από το άλλο if.

Κάντο race condition οχι risk :lol:

Posted: Sat Mar 08, 2008 4:47 pm
by korkakak
Και μερικά extra info μαζί με τα mechanics που δεν περιλαμβάνονται στο post του παναγιώτη εδώ:

http://lartc.org/howto/lartc.rpdb.multiple-links.html