IP/Ethernet Tunnel Using Linux: Vtun - Virtual tunnel
Description: This is issue 33 of Magaz, the Hellenic LinuxMagazine
Keywords: magaz hellenic greek hellas greece hellug linux magazine

Magaz, The Greek Linux Magazine
Τεύχος #33
Περιληπτικά Περιεχόμενα Αναλυτικά Περιεχόμενα Mirrors Links Πληροφορίες Συντάκτες Αναζήτηση Επικοινωνία
Επόμενο Προηγούμενο Περιεχόμενα ### 4. Vtun - Virtual tunnel Το vtun είναι ένα πάρα πολύ καλό εύχρηστο και μικρό εργαλείο για την δημιουργία IP tunnel πάνω από ένα ήδη υπάρχον δίκτυο. Υποστηρίζει συμπίεση, κρυπτογράφηση ακόμα και περιορισμό κίνησης (compression, encryption and traffic shaping). ### 4.1 Εγκατάσταση Μπορείτε να κατεβάσετε το vtun από το site http://vtun.sf.net/ . Υπάρχει και σαν binary πακέτα, όπως επίσης υπάρχουν και πακέτα για FreeBSD, OpenBSD και Solaris. Το πρόγραμμα χρησιμοποιείται και σαν server αλλά και σαν client, ανάλογα την ρύθμιση. ### 4.2 Τι θα χρειαστούμε Τα λιγότερα πράγματα που θα χρειαστείτε για να γίνει compile είναι: * Good C compiler (gcc, egcs, etc) * Lexical Analyzer (flex, lex) * YACC (yacc, bison, byacc) * Universal TUN/TAP driver http://vtun.sourceforge.net/tun * OpenSSL encryption library http://www.openssl.org και optional τα: * Zlib compression library * LZO compression library http://www.oberhumer.com/opensource/lzo Κατά ένα μεγάλο ποσοστό αυτό που θα χρειαστείτε και δεν θα υπάρχει ήδη στην διανομή σας είναι το TUN/TAP Driver, που θα πρέπει να κατεβάσετε και να εγκαταστήσετε. ### 4.3 Εγκατάσταση Εφ' όσον έχουμε όλα τα παραπάνω απλά κάνουμε unzip/untar το αρχείο
    tar xzvf vtun-2.6.tar.gz

    cd vtun

    ./configure

    make
και τέλος σαν root για να το εγκαταστήσετε
    make install
Την ίδια ακριβώς διαδικασία πρέπει να γίνει και στο μηχάνημα με το οποίο θέλουμε να κάνουμε το IP/Ethernet Tunnel. ### 4.4 Ρύθμιση του server Όταν εγκαταστήσουμε πλήρως και στα δύο μηχανήματα το vtun θα παρατηρήσουμε πως στον κατάλογο /etc υπάρχει το αρχείο vtund.conf, που έχει ήδη κάποια παραδείγματα από ρυθμίσεις. Εμείς θα το ρυθμίσουμε από την αρχή. Πρώτα πρέπει να ορίσουμε τα γενικά options:
    options {

    port 5000; # Listen on this port.

    # Syslog facility

    syslog daemon;

    # Path to various programs

    ppp /usr/sbin/pppd;

    ifconfig /sbin/ifconfig;

    route /sbin/route;

    firewall /sbin/ipchains;

    ip /sbin/ip;

    }

    # Default session options

    default {

    compress no; # Compression is off by default

    speed 0; # By default maximum speed, NO shaping

    }
Όπου στην αρχή δηλώνουμε ότι ο vtun server "ακούει" στην port 5000 μετά ότι θα χρησιμοποιήσει τον syslog για τα logs και μετά οι τοποθεσίες που βρίσκεται κάθε πρόγραμμα, όπως ο pppd δαίμονας και άλλα προγράμματα που ίσως θα χρειαστούμε και τέλος ορίζουμε τα default options των συνδέσεών μας, για το αν θα έχει ή όχι κρυπτογράφηση ή αν θα έχει όριο στο bandwidth. Η βασική ρύθμιση για ένα Ethernet Tunnel είναι: Πρέπει να ορίσουμε ένα όνομα για να αναφερόμαστε στη συγκεκριμένη ρύθμιση μιας και μπορούμε να έχουμε παραπάνω από μία.
    alekos {
Μέτα ορίζουμε το password στον server μας
    passwd magaz; # Password
Μετά τι τύπος tunnel θα είναι. Εδώ μπορούμε να ορίσουμε είτε ether, είτε tun, είτε tty ή pipe
    type ether; # Ethernet tunnel
Ποια συσκευή θα χρησιμοποιήσει (αν δεν κάνετε και 2ο tunnel αφήστε το option ως έχει).
    device tap0; # Device tap0
Ποιο πρωτόκολλο θα χρησιμοποιήσει. Αυτό παίζει ρόλο αν είσαστε πίσω από proxy ή όχι. Προτιμήστε το udp αν δεν είσαστε πίσω από proxy, αλλιώς θα πρέπει να χρησιμοποιήσετε το tcp.
    proto tcp; # UDP protocol
Αν θέλουμε συμπίεση και σε τι επίπεδο (παίρνει περισσότερη επεξεργαστική ισχύ, αλλά μπορεί να δώσει περισσότερο bandwidth)
    # compress lzo:5; # LZO compression level 1
Αν θέλουμε να είναι το tunnel μας κρυπτογραφημένο (καταναλώνει αρκετό bandwidth). Καλό είναι να το έχουμε ενεργοποιημένο, εκτός αν το περνάμε μέσω ssh tunnel, όπου είναι περιττό.
    encrypt no; # Encryption
Αν θέλουμε να κρατάει log files στο syslog.
    stat yes; # Log connection statistic
Αν θέλουμε να προσπαθεί να κρατάει την σύνδεση ενεργή αν δεν την χρησιμοποιήσουμε για κάποια ώρα. Χρήσιμο αν κάνουμε tunnels μέσω dial-up συνδέσεων ή dial-on-demand συνδέσεων.
    keepalive yes; # Keep connection alive
Εδώ ορίζουμε τι θέλουμε να κάνει όταν ανοίξει η σύνδεση μεταξύ server και client.
    up { # Connection is Up
Να δώσει μία IP στο μηχάνημα (ορίζω την 192.168.0.1 μιας και είναι ο server)
    # Assign IP address
    ifconfig "%% 192.168.0.1 netmask 255.255.255.0";
Δίνουμε και μία δρομολόγηση (routing) για να ξέρει που πάνε τα IP πακέτα
    # Add route to net
    route "add -net 192.168.0.0 netmask 255.255.255.0 gw
    192.168.0.1";
Ενεργοποιούμε το firewall μας για masquerading (αν για παράδειγμα συνδεόμαστε στον server για να έχουμε internet access)
    # Enable masquerading for net 10.2.0.0.0/24
    # firewall "-A forward -s 192.168.0.0/24 -d 0.0.0.0/0
    -j MASQ";

    };
και τέλος τι κάνουμε όταν κλείνει η σύνδεση
    down { # Connection is Down
Κλείνουμε την συσκευή
    # Shutdown tap device.
    ifconfig "%% down";
και απενεργοποιούμε το firewall μας
    # Disable masquerading for net 10.2.0.0.0/24
    # firewall "-D forward -s 192.168.0.0/24 -d 0.0.0.0/0
    -j MASQ";

    };

    }
### 4.5 Ρύθμιση του client Πάμε στο μηχάνημα που θα είναι ο client στο tunnel μας. Πάλι στον κατάλογο /etc θα βρούμε το αρχείο vtund.conf . Οι ρυθμίσεις που θα μπουν εδώ θα πρέπει να είναι αντίστοιχες με τον server αλλά όχι ίδιες. Οπότε:
    options {

    port 5000; # Connect to this port.

    timeout 60; # General timeout

    # Path to various programs

    ppp /usr/sbin/pppd;

    ifconfig /sbin/ifconfig;

    route /sbin/route;

    firewall /sbin/ipchains;

    ip /sbin/ip;

    }
Όπως και πριν, το πρώτο option αναφέρεται στο port που θα συνδεθεί στον server, το timeout για να κλείσει την σύνδεση και τέλος τα διάφορα προγράμματα. Και οι ρυθμίσεις που θα πρέπει να κάνουμε για την αντίστοιχη σύνδεση στον server. Οι ρυθμίσεις είναι στο ίδιο μοτίβο: Το όνομα της ρύθμισης για να αναφερόμαστε σ' αυτήν
    alekos {
Το password που έχουμε ορίσει στον server
    passwd magaz; # Password
Τι τύπος tunnel θα είναι πρέπει να είναι ίδιο με τον server
    type ether; # Ethernet tunnel
Ποια συσκευή να χρησιμοποιήσει, αφήστε το default εκτός και αν θέλετε να κάνετε πάνω από ένα tunnel
    device tap0; # Device tap0
Τι θα κάνει όταν γίνει η σύνδεση
    up { # Connection is Up
Πρέπει να ορίσουμε μία IP αλλά φυσικά όχι ίδια με τον server εδώ ορίζουμε την IP 192.168.0.2
    # Assign IP address and netmask.
    ifconfig "%% 192.168.0.2 netmask 255.255.255.0";
Ορίζουμε και την δρομολόγηση (routing) για τα IP πακέτα
    route "add default gw 192.168.0.1";

    };
Τι να κάνουμε όταν κλείσει η σύνδεση
    down { # Connection is Down
Να κλείσει την συσκευή.
    # Shutdown tap device
    ifconfig "%% down";
    };
    }
Και στον client θα μπορούσαμε να ανοίγουμε και να κλείνουμε κάποιο firewall αν θέλαμε να περάσουμε μέσω του tunnel κίνηση (traffic) μεταξύ δύο τοπικών δικτύων. Περισσότερα παραδείγματα θα βρείτε και στο site του vtun αλλά και στα configuration files (στο /etc/vtund.conf) που καλύπτουν σχεδόν κάθε περίπτωση IP/Ethernet tunnel. ### 4.6 Και τώρα; Αφού ρυθμίσαμε και τον vtun server μας αλλά και τον client, ήρθε η ώρα να ενεργοποιήσουμε το tunnel που ρυθμίσαμε. Από τον server σαν root λοιπόν, δίνουμε την εντολή:
    vtund -s alekos
Όπου -s είναι το option για τρέξει τον server και να περιμένει για συνδέσεις, και alekos είναι το όνομα της ρύθμισης που κάναμε στο server. Τώρα ο server μας λειτουργεί και περιμένει να συνδεθούμε. Οπότε, πάμε στο client και πάλι σαν root δίνουμε την εντολή:
    vtund alekos my.linux.server.gr
Αν όλα έχουν πάει καλά και οι ρυθμίσεις μας είναι σωστές μπορούμε να δούμε αν έχει πραγματοποιηθεί το IP tunnel μας με την εντολή:
    /sbin/ifconfig
Όπου θα δούμε κάτι σαν:
    tap0 Link encap:Ethernet HWaddr 00:FF:AE:E8:EC:85

    inet addr:192.168.0.2 Bcast:192.168.0.255
    Mask:255.255.255.0

    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

    RX packets:432204 errors:0 dropped:0 overruns:0 frame:0

    TX packets:151242 errors:0 dropped:0 overruns:0
    carrier:0 collisions:0 txqueuelen:100

    RX bytes:612105831 (583.7 Mb) TX bytes:9998554 (9.5 Mb)
Επιτυχώς λοιπόν έχουμε φτιάξει το πρώτο μας IP Tunnel! ### 4.7 Και αν είμαστε πίσω από proxy; Φυσικά υπάρχει η περίπτωση να είμαστε πίσω από κάποιον proxy που δεν μας επιτρέπει να κάνουμε IP Tunnels. Η γνώση και οι δοκιμές που περιέχονται σε αυτό το άρθρο αποκτήθηκαν στην προσπάθεια να "προσπεράσουμε" κάποιον proxy server που δεν μας επέτρεπε να κάνουμε σχεδόν τίποτα. Η λύση λοιπόν είναι η εξής: Κάνουμε όλα τα configurations και όλες τις ρυθμίσεις μας για το tunnel με το vtun. Επίσης ρυθμίζουμε το proxytunnel όπως περιγράφετε στο πρώτο μέρος και πρώτα κάνουμε ένα ssh tunnel κάνοντας forward το port 5000 από το τοπικό μας μηχάνημα στο server. Παράδειγμα: Έστω πως το proxytunnel δουλεύει κανονικά για να κάνουμε και IP Tunnel δίνουμε:
    ssh -L 5000:127.0.0.1:5000 foobar
    <verb>
    Οπότε και ανοίγουμε μία σύνδεση με το μηχάνημα που
    θέλουμε να κάνουμε IP Tunnel οπότε δίνουμε την εντολή:
    <verb>
    vtund alekos 127.0.0.1
και το tunnel σας λειτουργεί. Επόμενο Προηγούμενο Περιεχόμενα