# Links > Tutorials >  Ψευδο-bridge με Linux

## apoikos

* Ταρατσάτο PC με Linux και δύο interfaces* 

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

Το παρόν tutorial αναφέρεται στη χρήση ενός υπολογιστή με Linux ως pseudo-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 προς το εσωτερικό δίκτυο και αντίστροφα, προωθώντας έπειτα τα πακέτα στους κατάλληλους υπολογιστές. Τεχνικά τo εσωτερικό δίκτυο και το awmn παραμένουν χωριστά δίκτυα, όμως για το κάθε ένα το άλλο φαίνεται διαφανώς μέσω του «ταρατσάτου», σα να ήταν όλα ένα δίκτυο. Ας περάσουμε λοιπόν στο case study μας: 
Έστω ότι το εσωτερικό δίκτυο διαθέτει τους εξής υπολογιστές, και ότι έχουμε εξασφαλίσει για αυτούς τις αντίστοιχες διεθύνσεις στο domain του awmn: 

10.1.1.1 --> Ταρατσάτο 
10.1.1.2 --> Κουζίνα για να κάνει το ψυγείο παραγγελίες αυτόματα από το awmn-μανάβικο της γειτονιάς  ::  
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: 



```
 
# Ενεργοποίηση δικτυακών 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
```

Το μόνο που μένει είναι να δηλώσουμε στα Windows (κατά πάσα πιθανότητα) των PC του σπιτιού μας το «ταρατσάτο» ως gateway, από το network settings --> TCP/IP και να τους δώσουμε και έναν κατάλληλο DNS Server.

Αυτά για αρχή! Οποιεσδήποτε παρατηρήσεις / απορίες δεκτές !  ::   ::

----------


## Achille

Τη λύση αυτή την είχα προτείνει πριν καλά καλά ξεκινήσει το AWMN, και οι περισσότερο γνώστες σε θέματα δικτύων την είχαν απορρίψει ως εξαιρετικά πολύπλοκη (είχαν δίκιο).
Μπορείς να ζητήσεις από το AP που σε εξυπηρετεί να σου δώσει ένα subnet και να κάνεις κανονικά routing με τα πακέτα σου, αντί να στήσεις proxy arp. Απλά δίνεις τις σωστές IPs στις κάρτες δικτύου σου και ενεργοποιείς τη zebra για να στέλνει και να δέχεται RIP updates.

----------


## apoikos

Δεν ήξερα ότι είχε συζητηθεί (δεν έχω διαβάσει το forum από την αρχή του, ωστόσο έψαξα και δε βρήκα τίποτα σχετικό), ούτε έχω μεγάλη πείρα με δίκτυα (ελπίζω να απόκτησω κάποια μέσω του awmn).

Έχεις δίκιο, το δυναμικό routing με τη zebra είναι πιο απλό (από πλευράς παρέμβασης χρήστη), αν και εν γένει οι διαδρομές στη συγκεκριμένη περίπτωση είναι στατικές. Ωστόσο βλέπω δύο πλεονεκτήματα στη λύση του proxy ARP:

1ον: Ένας daemon λιγότερος.
2ον: Όλη η δουλειά γίνεται σε επίπεδο πυρήνα και είναι ίσως λίγο πιο γρήγορη απ' ότι με το zebra (δεν ξέρω τί καθυστέρηση εισάγει το ίδιο το proxy ARP). Αλλά μάλλον μιλάμε για απειροελάχιστες έως ανύπαρκτες διαφορές.

Τέλος πάντων, όταν το έστησα δεν είχα πρόσβαση στο internet για να κατεβάσω το zebra, οπότε προτίμησα τις στατικές routes. Ας παραμείνει λοιπόν ως ένα case study και παράδειγμα προς αποφυγήν.

----------


## kouk

> 1ον: Ένας daemon λιγότερος.
> 2ον: Όλη η δουλειά γίνεται σε επίπεδο πυρήνα και είναι ίσως λίγο πιο γρήγορη απ' ότι με το zebra (δεν ξέρω τί καθυστέρηση εισάγει το ίδιο το proxy ARP). Αλλά μάλλον μιλάμε για απειροελάχιστες έως ανύπαρκτες διαφορές.


και άλλα πλεονεκτήματα:

σε bridge configuration μπορείς να στήσεις και firewall χωρίς προσβάσιμη IP address. Έτσι το firewall σου είναι αρκετά ασφαλές απέναντι σε επιθέσεις που χρησιμοποιούν το IP. (λέγεται transparent firewalling bridge)

επίσεις εγώ πρόσφατα ενημερώθηκα οτί έχω κατανεμηθεί 3 IP από το AP στο οποίο συνδέομαι. Βάζοντας το firewall χωρίς IP εξοικονομώ μία IP. (γιατί δεν κάνω αίτηση θα μου πεις.. ε βαριέμαι και εξάλλου δεν χρειάζομαι περισσότερες IP στην παρούσα φάση)

----------


## kouk

α επίσης, εκεί που λες οτι βάζεις το gateway να είναι το ταρατσάτο PC, θα μπορούσες να βάλεις να είναι το gateway του subnet του AWMN στο οποίο προσαρτάσαι. Έτσι γλυτώνεις από το PC την extra δουλειά του routing (τα πακέτα μπορούν να μείνουν σε χαμηλότερο επίπεδο).

----------


## kouk

> Απλά δίνεις τις σωστές IPs στις κάρτες δικτύου σου και ενεργοποιείς τη zebra για να στέλνει και να δέχεται RIP updates.


και μετά γίνεται η μετάβαση σε OSPF και άντε ξαναconfigure απ'την αρχή
 :: 
η μέθοδος με το bridge μπορεί να είναι πιο πολύπλοκη στο configuration αλλά είναι απλή και σταθερή λύση χωρίς πολλά εξαρτήματα. Δεν χρειάζεσαι την Zebra, ούτε να ασχολείσαι με το τι είναι το RIP ή το OSPF. Ίσως στο μέλλον αυτή η λύση να ενδείκνυται για απλούς client..

----------


## apoikos

> α επίσης, εκεί που λες οτι βάζεις το gateway να είναι το ταρατσάτο PC, θα μπορούσες να βάλεις να είναι το gateway του subnet του AWMN στο οποίο προσαρτάσαι. Έτσι γλυτώνεις από το PC την extra δουλειά του routing (τα πακέτα μπορούν να μείνουν σε χαμηλότερο επίπεδο).


Ναι, θα μπορούσενα γίνει κι έτσι, αλλά σε περίπτωση που αλλάξει η gateway του subnet θα πρέπει να κάνω reconfigure 3 PC, ενώ έτσι χρειάζεται reconfiguration μόνο το ταρατσάτο.

----------


## bond

> Το παρόν tutorial αναφέρεται στη χρήση ενός υπολογιστή με Linux ως pseudo-bridge που συνδέει ένα ενσύρματο δίκτυο με ένα ασύρματο, δίνοντας όμως τη δυνατότητα στους υπολογιστές του ασύρματου και του ενσύρματου δικτύου να ανήκουν στο ίδιο subnet.


Ποια η διαφορά από ένα κανονικό bridge σε Linux;

----------


## Ripper_gr

EEEE oxi!!!!! egrafa 20 lepta elinika!!! kai kolise o IE!!!!
---------------------------------------------------------------

Exo na rotiso ta eksis!sto linux router exo 2 wifi kai ena eth pou stelni sto spiti ena subnet .240 (me 16ips) mporo meta apo to eth0 kai prin apo to switch tou spitiou na valo ena PF firewall se OpenBSD pou na min exi IP apo to subnet kai an ginete na min fenete)?!?

thnx

PS:soory gia ta greeklish alla den antexo na skanagrafo to thema se eninika...kai anorthografa!

----------


## apoikos

> Ποια η διαφορά από ένα κανονικό bridge σε Linux;


Δεν είμαι πολύ σίγουρος για την ορθότητα όσον πρόκειται να πω, οπότε αν κάνω λάθος διορθώστε με  ::  

Σε ένα κανονικό bridge περνάει όλη η broadcast traffic από το ένα interface στο άλλο. Στην περίπτωση του proxy ARP περνάνε μόνο τα πακέτα που καταλαβαίνει ο πυρήνας.
Επιπλέον το κανονικό bridging γίνεται στο data link layer (Layer 2, OSI Reference Model), ενώ το proxy ARP γίνεται στο Network layer (Layer 3, OSI Reference Model), στο ίδιο layer που γίνεται το routing. 
Με το proxy ARP υπάρχει η δυνατότητα φιλτραρίσματος των πακέτων με το netfilter, κάτι που για να γίνει σε κανονικό bridging απαιτεί patchάρισμα του πυρήνα.

----------


## kouk

> Exo na rotiso ta eksis!sto linux router exo 2 wifi kai ena eth pou stelni sto spiti ena subnet .240 (me 16ips) mporo meta apo to eth0 kai prin apo to switch tou spitiou na valo ena PF firewall se OpenBSD pou na min exi IP apo to subnet kai an ginete na min fenete)?!?


φυσικά

----------


## kouk

> Αρχική Δημοσίευση από bond
> 
> Ποια η διαφορά από ένα κανονικό bridge σε Linux;
> 
> 
> Σε ένα κανονικό bridge περνάει όλη η broadcast traffic από το ένα interface στο άλλο. Στην περίπτωση του proxy ARP περνάνε μόνο τα πακέτα που καταλαβαίνει ο πυρήνας.
> Επιπλέον το κανονικό bridging γίνεται στο data link layer (Layer 2, OSI Reference Model), ενώ το proxy ARP γίνεται στο Network layer (Layer 3, OSI Reference Model), στο ίδιο layer που γίνεται το routing.


Σωστά. Στην περίπτωση του proxy ARP ο πυρήνας κάνει κανονικό routing ή αλλιώς packet forwarding. Αυτό σημαίνει οτί περίεργα πρωτόκολλα όπως IPX δεν θα μεταδίδονται αν δεν είναι ρυθμισμένος ο πυρήνας να τα μεταδίδει. Σε ένα κανονικό bridge όμως όλα αυτά περνάνε, καθώς το bridge απλά κάνει μεταγωγή των ethernet frames μέσα στα οποία είναι ενφωλευμένα τα πρωτόκολλα υψηλότερων επιπέδων.

----------


## dimkasta

Επαναφέρω το θέμα μετά από 2 και χρόνια, μιας και προέκυψε πρόβλημα με τη μετάβασή μου από wrt σε wrap.
Mε το wrt έπαιζα με bridge. Παρ' όλα αυτά, απ' ότι διαβάζω και απ' ότι μου λέει ο acoul, το voyage που έχω δεν συμπεριφέρεται καλά σε bridge

Το στήσιμό μου έχει ως εξής.

AP στο οποίο συνδέομαι
10.2.25.1 netmask 255.255.255.192 broadcast 10.2.25.63

Toπικά
eth0 10.2.25.31 netmask 255.255.255.192 broadcast 10.2.25.63
wlan0 10.2.25.32 netmask 255.255.255.192 broadcast 10.2.25.63
pc 10.2.25.33 mask 255.255.255.192 bcast 10.2.25.63
pc 10.2.25.34 mask 255.255.255.192 bcast 10.2.25.63
pc 10.2.25.35 mask 255.255.255.192 bcast 10.2.25.63

Θα παίξει το παραπάνω για μένα? Λογικά ναι ε?

Η απορία μου είναι για την ίδια ΙΡ στα 2 IFs  ::

----------

