Επόμενο Προηγούμενο Περιεχόμενα
Το vtun είναι ένα πάρα πολύ καλό εύχρηστο και μικρό
εργαλείο για την δημιουργία IP tunnel πάνω από ένα ήδη
υπάρχον δίκτυο. Υποστηρίζει συμπίεση, κρυπτογράφηση ακόμα
και περιορισμό κίνησης (compression, encryption and
traffic shaping).
Μπορείτε να κατεβάσετε το vtun από το site
http://vtun.sf.net/ . Υπάρχει και σαν binary πακέτα, όπως
επίσης υπάρχουν και πακέτα για FreeBSD, OpenBSD και
Solaris.
Το πρόγραμμα χρησιμοποιείται και σαν server αλλά και σαν
client, ανάλογα την ρύθμιση.
Τα λιγότερα πράγματα που θα χρειαστείτε για να γίνει
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,
που θα πρέπει να κατεβάσετε και να εγκαταστήσετε.
Εφ' όσον έχουμε όλα τα παραπάνω απλά κάνουμε unzip/untar
το αρχείο
tar xzvf vtun-2.6.tar.gz
cd vtun
./configure
make
και τέλος σαν root για να το εγκαταστήσετε
make install
Την ίδια ακριβώς διαδικασία πρέπει να γίνει και στο μηχάνημα με το οποίο θέλουμε
να κάνουμε το IP/Ethernet Tunnel.
Όταν εγκαταστήσουμε πλήρως και στα δύο μηχανήματα το 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";
};
}
Πάμε στο μηχάνημα που θα είναι ο 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.
Αφού ρυθμίσαμε και τον 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!
Φυσικά υπάρχει η περίπτωση να είμαστε πίσω από κάποιον
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 σας λειτουργεί.
Επόμενο Προηγούμενο Περιεχόμενα