Ψευδο-Bridge με Linux

(Reference) Συγγραφέας: Apoikos

Disclaimer: Τα παρακάτω έχουν δοκιμαστεί και λειτουργούν άψογα σε ταρατσάτο PC με Slackware 9.0 και εσωτερικό δίκτυο με δύο PC, ένα με Slackware και ένα με Windows XP. Τα ονόματα των interfaces είναι ενδεικτικά και διαφέρουν από pc σε pc. Επίσης θεωρείται δεδομένο ότι στο ταρατσάτο pc είναι εγκατεστημένη κάποια διανομή Linux με πυρήνα τουλάχιστον 2.4 και ότι λειτουργεί σωστά, με όλο το hardware αναγνωρισμένο και εγκατεστημένο το πακέτο iproute2. Ουσιαστικά είναι το πως έστησα το δικό μου ταρατσάτο PC για να επικοινωνώ με το awmn, και ως εκ τούτου πιθανόν να περιέχει ανακρίβειες.

Ο παρόν Οδηγός αναφέρεται στη χρήση ενός υπολογιστή με Linux ως Ψευδο-Bridge που συνδέει ένα ενσύρματο δίκτυο με ένα ασύρματο, δίνοντας όμως τη δυνατότητα στους υπολογιστές του ασύρματου και του ενσύρματου δικτύου να ανήκουν στο ίδιο subnet.

Έστω λοιπόν ότι μια ωραία πρωία αποφασίζουμε να βάλουμε στην ταράτσα μας (ή το μπαλκόνι ή το υπόγειο, ότι θέλει ο καθένας) ένα PC (εφ' εξής «ταρατσάτο») το οποίο θα εκτελεί χρέη διαμεσολαβητή για τη σύνδεσή μας ως απλοί πελάτες με το AWMN. Το PC αυτό διαθέτει δύο κάρτες δικτύου, ή, στη γλώσσα του Linux δύο interfaces, ένα ασύρματο και ένα ενσύρματο.

Ένας τρόπος να «βγει» το σπίτι μας στο AWMN θα ήταν να είναι ορατό μόνο το «ταρατσάτο» PC στο AWMN (με δική του IP δηλαδή), και όλα τα εσωτερικά pc να βγαίνουν προς τα έξω με την ίδια IP διεύθυνση, αυτή του «ταρατσάτου». Το «ταρατσάτο» στην περίπτωση αυτή αναλαμβάνει να «μασκαρέψει» (η μέθοδος λέγεται IP Masquerading) τα πακέτα από τους υπολογιστές του εσωτερικού δικτύου και να τα στείλει προς τα έξω σα να ήταν δικά του, ενώ πρέπει να αναλάβει και την αντίστροφη διαδικασία, δηλαδή να στείλει τις απαντήσεις από το AWMN προς τα μέσα. Αυτή η μέθοδος έχει κάποια πλεονεκτήματα όσον αφορά την ασφάλεια, αλλά το βασικό μειονέκτημα είναι ότι είναι ορατό μόνο ένα μηχάνημα στο AWMN, πράγμα το οποίο καθιστά δύσκολο το στήσιμο υπηρεσιών (ορατών από το AWMN) σε μηχανήματα του εσωτερικού δικτύου, ενώ δημιουργεί και διάφορα προβλήματα με multiplayer παιχνίδια και γενικά εφαρμογές που χρειάζονται άμεση σύνδεση με το PC.

Έστω τώρα ότι θέλουμε το εσωτερικό μας δίκτυο να είναι «προέκταση» του AWMN, να είναι δηλαδή ορατά όλα τα μηχανήματα από το AWMN με τις δικές τους 10.x.x.x IP διευθύνσεις. Η λύση που προτείνεται στον παρόντα οδηγό είναι γρήγορη, εύκολη και αξιόπιστη και εκμεταλλεύεται μια πολύ ενδιαφέρουσα δυνατότητα του πυρήνα του Linux, το Proxy ΑRP. Ας φανταστούμε ότι τα πράγματα είναι κάπως έτσι:

Εσωτερικό δίκτυο ----- «ταρατσάτο» PC ----- AWMN

Με το Proxy-Arp λέμε στο «ταρατσάτο» PC να απαντάει σε αιτήσεις που γίνονται από το AWMN προς το εσωτερικό δίκτυο και αντίστροφα, προωθώντας έπειτα τα πακέτα στους κατάλληλους υπολογιστές. Τεχνικά το εσωτερικό δίκτυο και το AWMN παραμένουν χωριστά δίκτυα, όμως για το κάθε ένα το άλλο φαίνεται διαφανώς μέσω του «ταρατσάτου», σα να ήταν όλα ένα δίκτυο. Ας περάσουμε λοιπόν στο case study μας... Έστω ότι το εσωτερικό δίκτυο διαθέτει τους εξής υπολογιστές, και ότι έχουμε εξασφαλίσει για αυτούς τις αντίστοιχες διευθύνσεις στο Domain του AWMN:

10.1.1.1 --> Ταρατσάτο
10.1.1.2 --> Κουζίνα
10.1.1.3 --> Γραφείο
10.1.1.4 --> Δωμάτιο

Το ταρατσάτο είναι πελάτης στον κόμβο του AWMN με διεύθυνση 10.1.1.5, ο οποίος routing.

Για να δουλέψει το όλο σύστημα πρέπει να γίνουν τα εξής:
Στο ταρατσάτο μας που έχει δύο interfaces (eth0 & wlan0 για παράδειγμα) πρέπει να δώσουμε:

ifconfig eth0 10.1.1.1 netmask 255.255.255.255
ifconfig wlan0 10.1.1.1 netmask 255.255.255.255

Έτσι θα φαίνεται και από το σπίτι και από το AWMN με την ίδια IP. ΠΡΟΣΟΧΗ! η netmask 255.255.255.255 είναι σημαντική!

Στη συνέχεια πρέπει να ορίσουμε στο ταρατσάτο ποια PC είναι στο ενσύρματο δίκτυο. Το κάνουμε ως εξής:

route add 10.1.1.2 dev eth0
route add 10.1.1.3 dev eth0
route add 10.1.1.4 dev eth0

Επίσης πρέπει να ορίσουμε ότι ο κόμβος στον οποίο συνδεόμαστε είναι στο ασύρματο δίκτυο, και ότι μέσω αυτού θα βγαίνουμε προς τα έξω:

route add 10.1.1.5 dev wlan0
route add default gw 10.1.1.5

Τέλος μας μένει να ενεργοποιήσουμε αυτό το μικρό (αλλά θαυματουργό) «τρικ», το Proxy ARP (χωρίς αυτό δεν πρόκειται να δουλέψει σωστά!), αλλά και το IP forwarding για να περνάνε τα πακέτα στους τελικούς τους προορισμούς:

echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/wlan0/proxy_arp
echo 1 > /proc/sys/net/ipv4/ip_forward

Είμαστε έτοιμοι!
Και επειδή θέλουμε αυτά να γίνονται αυτόματα κάθε φορά που ξεκινά το «ταρατσάτο» τα βάζουμε όλα μαζί στο /etc/rc.d/rc.local:

/etc/rc.d/rc.local
# Ενεργοποίηση δικτυακών interfaces
ifconfig eth0 10.1.1.1 netmask 255.255.255.255
ifconfig wlan0 10.1.1.1 netmask 255.255.255.255

# Καθορισμός static routes
route add 10.1.1.2 dev eth0
route add 10.1.1.3 dev eth0
route add 10.1.1.4 dev eth0
route add 10.1.1.5 dev wlan0

route add default gw 10.1.1.5

# Ενεργοποίηση proxy ΑRP και IP forwarding
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/wlan0/proxy_arp
echo 1 > /proc/sys/net/ipv4/ip_forward