IP Masquerading
Description: This is issue 05 of Magaz, the Hellenic LinuxMagazine
Keywords: magaz hellenic greek hellas greece hellug linux magazine

Magaz, The Greek Linux Magazine
Τεύχος #05
Περιληπτικά Περιεχόμενα Αναλυτικά Περιεχόμενα Mirrors Links Πληροφορίες Συντάκτες Αναζήτηση Επικοινωνία
# IP Masquerading Ευριπίδης Παπακώστας epapakostas@ametro.gr Ιούνιος 1998 Είχαμε την παρακάτω απορία. Διαβάσαμε ένα παλιό Linux Journal, ρωτήσαμε και ένα δύο φίλους και την λύσαμε Εχω μόνο ένα account/connection (είτε dialup, είτε permanent) σε κάποιον Internet provider. Εχω πάνω από ένα PCs και θέλω όλα να έχουν πρόσβαση στο Internet (ξαδέρφια, συνάδελφοι, το αφεντικό). Θέλω επίσης, είτε επειδή δεν μου δίνουν τόσα legal IPs, είτε γιατί θέλω αυξημένο security τα PCs αυτά να έχουν dummy IPs (π.χ 10.0.0.x). Τι χρειάζομαι: Ενα Linux Box.με kernel κάπως πρόσφατο = 2.0.30 μας κάνει σίγουρα.. Μια κάρτα δικτύου προς το εσωτερικό μου δίκτυο και άρα έστω το IP της 10.0.0.1. Σε περίπτωση dialup connection, ένα modem. IP θα πάρω δυναμικά (έστω ότι η σύνδεση είναι dynamic IP) και φυσικά να ξέρω να συνδέομαι με τον provider μέσω Linux. Σε περίπτωση permanent connection, μια κάρτα δικτύου προς το εξωτερικό υποδίκτυο (που πάει στον router) και άρα με ένα legal IP που μου δίνει ο provider. Εστω 195.175.200.1 το IP αυτό. Τι κάνω: Για nameserver στο linux (αν δεν το'χουμε λυσει αυτο το θεμα αλλοιως) βαζουμε του provider. π.χ. το /etc/resolv.conf μας ειναι search nini.gr nameserver 127.0.0.1 (εμεις οι ιδιοι) nameserver 195.170.0.2 (η ΟΤΕΝΕΤ). Για default gateway πρέπει να έχουμε το internet gateway (ειτε modem ειτε η δευτερη καρτα δικτυου μας). Θα μπορούσαμε και χειροκίνητα π.χ. για την δεύτερη κάρτα να δώσουμε: route add default eth1 (eth0=1η καρτα, eth1=2η καρτα). Στην περιπτωση του dialup connection ο τροπος συνδεσης σας, λογικα θετει ως default gateway to ppp0. Μαλλον τα default options που έχει ο precompiled kernel μας κάνουν, αλλά όπως και να'χει αυτά θα χρειαστείτε (αν όχι όλα, να το θέσουμε έτσι: εμάς με αυτά δουλεύει άψογα): Loadable Module Support Loadable module support = YES Version Information on all symbols = YES Kernel demon support = NO (αυτό παίζεται και αν το θέλετε) Networking Options Network Firewalls = YES Network Aliasing = YES TCP/IP Networking = YES IP: forwarding = YES IP: multicastiong = YES IP: syn cookies = YES IP: rst cookies = YES IP: firewalling = YES IP : packet logging = YES IP : masq = YES Protocol Specific masq modules IP: ipautofw masq = YES IP: ICMP masq = YES IP: transparent proxy support = YES IP: always defrag = YES IP : accounting = YES IP : optimize as router = YES ΟΚ. Τώρα τι κάνω: Αν είναι να το ξεκινήσω χειροκίνητα, γράφω τα εξής: ipfwadm -F -p deny (δηλαδή δεν πρόκειται να προωθούμε πακέτα πλεόν με διαφορετικές διευθύνσεις δικτύων από αυτές που έχει το μηχάνημά μας) ipfwadm -F -a m -S 10.0.0.0/0 -D 0.0.0.0/0 (εδώ τι λέμε: Θα κάνω modification στα forwarding rules που μέχρι τώρα όρισα, δηλάδη μόνο την παραπάνω εντολή και θα επιτρέψω το forwarding πακέτων από το εσωτερικό μου υποδίκτυο 10.0.0.0 και για όλα τα 255 IPs 10.0.0.1 - 10.0.0.255 προς οπουδήποτε θέλουν να πάνε. Επειδή δεν έχω πάνω από δυο κάρτες δεν θέλω τιποτα άλλο) Αν θελω το κανω και scriptακι να ξεκινάει αυτοματα:
    #!/bin/sh
    PATH=/usr/local/bin; export PATH
    # Αυτο το θέλω γιατι εκει ειναι το δικό μου ipfwadm.
    #Εσεις κάντε whereis ipfwadm και βάλτε το δικο σας
    ipfwadm -F -p deny
    ipfwadm -F -a m -S 10.0.0.0/0 -D 0.0.0.0/0
Το σώζω σαν π.χ. /etc/rc.d/rc.masq_rules (αντε και chmod 755 /etc/rc.d/rc.masq_rules) και μετά παω π.χ. στο /etc/rc.d/rc.local και στο τέλος του προσθέτω και: /etc/rc.d/rc.masq_rules Στα εσωτερικά PCs, τι κάνω εκεί; Εστω windows 95 PCs. Δινω IP του τύπου 10.0.0.x (2<=x<=254). Για DNS και δίνω το DNS μας (αν το Linux εκτελεί χρέη DNS δώστε αυτό, αλλοιώς δώστε του provider σας.). Στο Gateway δίνω 10.0.0.1 (να φέυγουν τα πακέτα μέσω του Linux). Αρχικά είσαστε έτοιμοι (αν είσαστε με dialup μένει να συνδεθείτε μέσω Linux όπως κάνατε πάντα) και τα PCs μπορούν επίσης να βλέπουν Internet παράλληλα με εσας. Εντυπωσιακο, πρακτικο, λειτουργικο, κομψο και γρηγορο. Τέλος. Όμως, αυτό λύνει το Internet Browser κομμάτι κλπ. Τι γίνεται με περιπτώσεις όπως το ftp? Καλή ερώτηση , την περιμέναμε. Μέχρι τώρα δεν είναι αναγκαστικό να μπορούν και τα PCs να κάνουν ftp προς τον έξω κόσμο με επιτυχία. Από το Linux, δώστε
    insmod ip_masq_ftp (για ftp)
    insmod ip_masq_raudio (για να ακούν και τα PCs real audio)
    insmod ip_mas_irc (για να έχετε και το IRC σας, θα πέσει φωτιά να μας κάψει!)
Για πιο σύνθετα προβλήματα, όπως να περνάει ICQ, CUSEEME κλπ. δεν υπάρχουν έτοιμα modules (τουλάχιστον όταν εμείς κοιτάγαμε αυτο το θέμα) και θα καταφύγετε στην χρήση της εντολής ipautofw (που κάναμε πιο πάνω include στον kernel μας). Μονο που επειδή θέλει settings...άλλη φορά. Το παραπανω ειναι πολυ γενικο και χοντροκομμενο. Finetunnings μπορουν να γινουν (και μερικες φορες πρεπει) στην περιπτωση που θελουμε να κανουμε forwarding μονο σε μερος του δικτυου μας η σε συγκεκριμενα IPs, εχουμε πανω απο δυο καρτες δικτυου, θελουμε τα εσωτερικα PCs να ειναι προσπελασιμα απο τους εξω (γιατι; γιατι; αφου ειναι επικινδυνο) κλπ. Δεν θα ασχοληθουμε, να τα βρειτε μονοι σας, αλλωστε ουτε εμεις τα ξερουμε σε μεγαλο βαθος :-) Επισης αν δε δουλεψει, μαλλον κατι ξεχασαμε έξω. Πειτε μας να το συμπεριλαβουμε. Τυφλοσουρτι για mail server, DNS server κλπ ισως ακολουθησει...