Magaz, The Greek Linux Magazine
Magaz Logo

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 κλπ ισως ακολουθησει...


Valid HTML 4.01!   Valid CSS!