Προς το περιεχόμενο

Bridge 2 dsl σαν μία


Cr33p

Προτεινόμενες αναρτήσεις

Γεια σε όλους κ χρόνια πολλά καταρχήν. Θέλω να συνδέσω 2 NIC που έχουν πάνω 2 dsl και να τις κάνω να λειτουργούν σαν μία.Κοινώς αυτο που θέλω να κάνω ειναι το μηχάνημα αυτό να ειναι μια ενιαία gateway για το LAN χωρίς να χωρίσω τα 6 pc ανα 3 στις 2 dsl.Εχετε υπόψην σας κάποιο πρόγραμμα για ,linux παντα,που θα μπορουσε να με βοηθήσει σε αυτό?Με το firestarter θα μπορούσα να το κάνω??

 

Ευχαριστώ εκ των προταίρων κ sorry αν ενδεχομένως το topic επρεπε να μπει στα δικτυα(δεν μπορούσα να αποφασισω :P)

 

Kαλές γιορτες σε ολους :)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 2 εβδομάδες αργότερα...

Αυτό που θέλεις μπορεί να γίνει μέσω του IProute2, δες στο Advanced Routing HOWTO.

 

Το firestarter αν δεν κάνω λάθος είναι front-end gui μόνο για iptables οπότε στην προκειμένη δε βοηθάει (παρά μόνο για να το NAT configuration που είναι ούτως ή άλλως απλό). Ενδεχομένως να μπορεί να γίνει και το balancing μέσω IPtables αλλά δε γνωρίζω συγκεκριμένα.

 

[EDIT] Tώρα ξαναδιάβασα την ερώτησή σου και δεν αναφέρεις πουθενά για load balancing. Αν θέλεις απλά NAT ανάλογα το source IP (συγκεκριμένοι hosts να ρουτάρονται από συγκεκριμένο interface) τότε αυτό γίνεται απλά και κατευθείαν από τα IPtables. Δες στο Documentation section του http://www.netfilter.org το NAT howto (αν δεν έχεις εξοικείωση με τα IPtables συμβουλέψου και κάποιο από τα unofficial tutorials που αναφέρονται εκεί, κατά προτίμηση του Oskar Andreason). Απλά με load balancing μπορείς να κατανέμεις το συνολικό traffic στα 2 interfaces που είναι πιο βελτιστοποιημένο.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το load balancing του tc δε θα δουλέψει για πολλούς λόγους (κυρίως γιατί κάνει roundrobin τα πακέτα και όχι τις συνδέσεις).

 

Έχω όμως μια χακιά με iptables+iproute2/fwmark στο μυαλό μου που μάλλον θα δουλέψει. Give me some time :-)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η χακιά μου δουλεύει μια χαρά σε ένα testbed με 2 tunnels. Είναι λίγο μανίκι και απαιτεί (κατά πάσα πιθανότητα στις περισσότερες διανομές) recompile του πυρήνα και των iptables. Υπάρχει ενδιαφέρον να γράψω ένα tutorial ή να το αφήσω καλύτερα; :-) Είναι καλή άσκηση για iptables + advanced routing πάντως.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η σύλληψη είναι σχετικά απλή:

Ο πυρήνας του linux επιτρέπει να κάνεις routing με βάση το firewall mark που βάζεις με τα iptables. Το ζητούμενο είναι να κάνουμε round-robin τις TCP και τις UDP «συνδέσεις» ανάμεσα στα 2 links, ή να τις κατανείμουμε ανάλογα με τη χωρητικότητα των γραμμών, σε πρίπτωση που αυτές δεν είναι ίδιες. Η αλγοριθμική διαδικασία είναι η ακόλουθη:

  • Αν μια σύνδεση υφίσταται ήδη, τότε τα πακέτα της πρέπει να routαρονται όλα από το ίδιο interface (αλλιώς δε θα συμπεριφέρεται σωστά το σύστημα).
  • Η πρώτη από κάθε 2 νέες συνδέσεις θα φεύγει από τη γραμμή 1 και η δεύτερη από τη γραμμή 2. Αυτό θα γίνεται σε περίπτωση που οι δύο γραμμές είναι ίδιες.

 

Αν και το setup μου είναι λίγο διαφορετικό (δεν είχα 2 φυσικές συνδέσεις, οπότε έκανα 2 tunnels), τα παρακάτω θα έπρεπε να δουλεύουν. Απαιτείται οπωσδήποτε πυρήνας και iptables με το Nth match (ipt_nth.ko module και /usr/lib/iptables/libipt_nth.so), καθώς και ενεργοποίηση των επιλογών IP: Advanced Routing και Route by firewall mark στο config του πυρήνα. Επιπρόσθετα χρειάζονται τα userspace εργαλεία της iproute2.

 

Θα χρησιμοποιήσουμε το mangle table του netfilter για να μαρκάρουμε το 1ο πακέτο κάθε σύνδεσης με το MARK target, να σώσουμε το mark για όλη τη σύνδεση (CONNMARK target) και να μαρκάρουμε και τα υπόλοιπα πακέτα της σύνδεσης με το ίδιο mark, ώστε να φεύγουν από το ίδιο interface.

 

Αρχικά δημιουργούμε την αλυσίδα `marking', την οποία θα χρησιμοποιήσουμε για το μαρκάρισμα των πακέτων:

>
iptables -t mangle -N marking

 

Κάνουμε restore τα connection marks (αν υπάρχουν) τόσο στην PREROUTING, όσο και στην OUTPUT, ώστε να γίνονται round-robin οι συνδέσεις τόσο οι διερχόμενες, όσο και οι δημιουργούμενες από το router:

>
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark

 

Στέλνουμε τα αμαρκάριστα πακέτα - τα οποία σύμφωνα με τα παραπάνω πρέπει να είναι νέα πακέτα μόνο - για μαρκάρισμα:

>
iptables -t mangle -A PREROUTING -m mark --mark 0x0 -j marking
iptables -t mangle -A OUTPUT -m mark --mark 0x0 -j marking

 

>
iptables -t mangle -A marking -m mark --mark 0x0 -m nth --every 2 --packet 0 -j MARK --set-mark 0x1
iptables -t mangle -A marking -m mark --mark 0x0 -m nth --every 2 --packet 1 -j MARK --set-mark 0x2
iptables -t mangle -A marking -j CONNMARK --save-mark

Η πρώτη από κάθε 2 συνδέσεις μαρκάρεται τελικά ολόκληρη με το mark 0x1 και η δεύτερη με το 0x2.

 

Δημιουργία δύο routing tables, ένα για κάθε σύνδεση. Θεωρώ ότι το εσωτερικό δίκτυο έχει IP's του Class B 192.168.0.0/16, οι οποίες δε θέλουμε να φεύγουν προς το internet. Αν οι συνδέσεις είναι τύπου PPPoE κατευθείαν από το linux (λέγε με USB modem), τότε χρειαζόμαστε απλά τα interface names (π.χ. ppp0 και ppp1):

 

>
ip route add default dev ppp0 table 10
ip route add throw 192.168.0.0/16 table 10
ip route add default dev ppp1 table 20
ip route add throw 192.168.0.0/16 table 20

 

Ειδάλλως (αν πρόκειται για routers) χρειαζόμαστε τις IP's των routers:

>
ip route add default via ip-router1-here table 10
ip route add throw 192.168.0.0/16 table 10
ip route add default via ip-router2-here table 20
ip route add throw 192.168.0.0/16 table 20

 

Ρυθμίζουμε το routing ανάλογα με το fwmark. Τα πακέτα με mark 0x1 φεύγουν από το 1ο interface, αυτά με 0x2 από το 2ο:

>
ip rule add fwmark 0x1 lookup 10
ip rule add fwmark 0x2 lookup 20

 

Σημειώσεις:

  • Κάποιος που κατέχει από iptables θα ήξερε ότι θα μπορούσαμε να χρησιμοποιήσουμε το 'state' match για να βρούμε τις νέες συνδέσεις. Δυστυχώς όμως δε δουλεύει σωστά με το Nth, οπότε βρίσκουμε τις νέες συνδέσεις ως αμαρκάριστες (πρακτικά είναι το ίδιο).
  • Δεν παρέχει redundancy προς το παρόν. Αυτό μπορεί να υλοποιηθεί είτε χρησιμοποιώντας το condition match (έξτρα patchάρισμα iptables και πυρήνα), είτε βάζοντας ένα script να φορτώνει διαφορετικά rulesets ανάλογα με το αν τα interfaces είναι up ή όχι. edit: To condition match δεν παίζει στους 2.6 πυρήνες προς το παρόν, οπότε ο μόνος τρόπος να επιτευχθεί redundancy είναι μέσω διαφορετικών rulesets.
  • Δεν έχω δοκιμάσει αυτό ακριβώς το setup, γιατί σε εμένα έκανα mangle μόνο την OUTPUT και όχι την PREROUTING (αφού το έκανα σε κοινό pc και όχι router), αλλά θα έπρεπε να δουλεύει κανονικά.
  • Εννοείται ότι ο router/οι routers πρέπει να κάνει NAT προς τις 2 συνδέσεις internet.

 

Τα παραπάνω είναι πολύ χύμα, το ξέρω, αλλά το setup είναι τόσο πολύπλοκο που δεν είναι εύκολο να τα κάνω πιο "λιανά" με το χρόνο που διαθέτω. Για περισσότερες διευκρινήσεις είμαι στη διάθεσή σας :-)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...