535 γραμμές
30 KiB
Markdown
535 γραμμές
30 KiB
Markdown
|
+++
|
|||
|
title = 'IP/Ethernet Tunnel Using Linux'
|
|||
|
date = '2003-06-01T00:00:00Z'
|
|||
|
description = ''
|
|||
|
author = 'Τοπογλίδης Κων/νος'
|
|||
|
issue = ['Magaz 33']
|
|||
|
issue_weight = 2
|
|||
|
+++
|
|||
|
|
|||
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
|||
|
*IP tunnels με απλά λόγια.*
|
|||
|
|
|||
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
|||
|
**1. Εισαγωγή**
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
- [1.1 Τι είναι όμως αυτά τα IP/Ethernet Tunnels;](#ss1.1)
|
|||
|
- [1.2 Γιατί όμως είναι χρήσιμα; Τι εφαρμογές έχουν;](#ss1.2)
|
|||
|
|
|||
|
**2. Τα εργαλεία**
|
|||
|
------------------------------------------
|
|||
|
|
|||
|
**3. Tunnel με το SSH**
|
|||
|
-----------------------------------------------
|
|||
|
|
|||
|
- [3.1 Socks 4 proxy](#ss3.1)
|
|||
|
- [3.2 Port Forwarding](#ss3.2)
|
|||
|
- [3.3 Και αν δεν μπορούμε να κάνουμε ssh;](#ss3.3)
|
|||
|
|
|||
|
**4. Vtun - Virtual tunnel**
|
|||
|
----------------------------------------------------
|
|||
|
|
|||
|
- [4.1 Εγκατάσταση](#ss4.1)
|
|||
|
- [4.2 Τι θα χρειαστούμε](#ss4.2)
|
|||
|
- [4.3 Εγκατάσταση](#ss4.3)
|
|||
|
- [4.4 Ρύθμιση του server](#ss4.4)
|
|||
|
- [4.5 Ρύθμιση του client](#ss4.5)
|
|||
|
- [4.6 Και τώρα;](#ss4.6)
|
|||
|
- [4.7 Και αν είμαστε πίσω από proxy;](#ss4.7)
|
|||
|
|
|||
|
**5. FreeS/WAN**
|
|||
|
----------------------------------------
|
|||
|
|
|||
|
**6. Επίλογος**
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
|
|||
|
### [1. Εισαγωγή]{#s1}
|
|||
|
|
|||
|
Όλοι μας, λίγο πολύ έχουμε ακούσει κάτι για τα IP tunnels και ίσως να έχουμε ακούσει περισσότερα τώρα που υπάρχει και έξαρση με τις wireless συσκευές.
|
|||
|
|
|||
|
### [1.1 Τι είναι όμως αυτά τα IP/Ethernet Tunnels;]{#ss1.1}
|
|||
|
|
|||
|
Τα IP Tunnels είναι, με απλά λόγια, μια σύνδεση 2 υπολογιστών μέσω κάποιου ευρύτερου (όχι απαραίτητα) δικτύου όπως το intenet. Όμως διαφέρει από τις υπόλοιπες
|
|||
|
συνδέσεις γιατί η σύνδεση που δημιουργείται μεταξύ των δύο υπολογιστών έχει κάποιες ιδιότητες. Για παράδειγμα, μπορεί να είναι encrypted ή και να σχηματίζουν
|
|||
|
ένα τοπικό δίκτυο μεταξύ τους.
|
|||
|
|
|||
|
### [1.2 Γιατί όμως είναι χρήσιμα; Τι εφαρμογές έχουν;]{#ss1.2}
|
|||
|
|
|||
|
Η κυριότερη εφαρμογή - ίσως και ο λόγος που δημιουργήθηκαν - είναι η απομακρυσμένη και ασφαλής σύνδεση ενός υπολογιστή σε ένα εταιρικό τοπικό δίκτυο για να μην
|
|||
|
υποκλαπούν δεδομένα και η απομακρυσμένη και ασφαλής σύνδεση δύο τοπικών δικτύων, για τον ίδιο λόγο. Οπότε μπορεί κανείς να δει την χρησιμότητα τους στα wireless
|
|||
|
δίκτυα. Άλλο όνομα για τα IP Tunnels είναι το VPN (δηλαδή Virtual Private Network). Όμως, μπορούν να χρησιμοποιηθούν και για να \"προσπεράσει\" κάποιος έναν
|
|||
|
πολύ \"αυστηρό\" proxy server.
|
|||
|
|
|||
|
|
|||
|
### [2. Τα εργαλεία]{#s2}
|
|||
|
|
|||
|
Υπάρχουν αρκετοί τρόποι για να κάνει κάποιος ένα Tunnel. Υπάρχουν αρκετές διανομές που είναι παρακλάδια μικρών διανομών όπως: Wolverine Firewall and VPN Server,
|
|||
|
Astaro Security Linux που δεν είναι όμως από την άδεια χρήσης GPL. Υπάρχουν και λύσεις όπως της Cisco και άλλων εταιριών, που πωλούν ένα συγκεκριμένο μηχάνημα
|
|||
|
και συνήθως κοστίζει αρκετά χρήματα ακόμα και για μεσαίες επιχειρήσεις.
|
|||
|
|
|||
|
Φυσικά όμως, υπάρχουν και αρκετά project τα οποία είναι Free/Open Source κάτω από την GPL άδεια χρήσης. Το άρθρο θα καλύψει μερικά από αυτά όπως: tunnels με το
|
|||
|
ssh, το vtun, και λιγότερο το FreeS/WAN. Φυσικά υπάρχουν και άλλα projects όπως το OpenVPN, το vpnd, το tinc, το SLAN, το CIPE, το Htun και άλλα.
|
|||
|
|
|||
|
|
|||
|
### [3. Tunnel με το SSH]{#s3}
|
|||
|
|
|||
|
Το ssh είναι από τα πιο γνωστά πλέον προγράμματα. Είναι για όλους σχεδόν ένα από τα πιο χρήσιμα εργαλεία για remote access. Το αγαπημένο μας ssh μπορεί να κάνει
|
|||
|
και κάποιες άλλες δουλειές, όπως να κάνει port forwarding ή να γίνει socks 4 proxy, διοχετεύοντας όλο το traffic από το τοπικό μηχάνημα στο απομακρυσμένο.
|
|||
|
|
|||
|
### [3.1 Socks 4 proxy]{#ss3.1}
|
|||
|
|
|||
|
Για να γίνει το ssh ένας μικρός τοπικός socks 4 proxy το μόνο που έχετε να κάνετε είναι:
|
|||
|
|
|||
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
|||
|
ssh -D 1080 my.linux.server.gr
|
|||
|
|
|||
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
|||
|
Τώρα όσο είμαστε συνδεδεμένοι στο απομακρυσμένο μηχάνημα my.linux.server.gr θα παρατηρήσουμε και την port 1080 στο μηχάνημά μας να ακούει για συνδέσεις. Το
|
|||
|
option -D ορίζει πως το τοπικό μηχάνημα θα εξυπηρετεί συνδέσεις στην port 1080. Άρα, αν ρυθμίσουμε τον φυλλομετρητή μας να χρησιμοποιεί proxy ή τον αγαπημένο
|
|||
|
μας IRC client να χρησιμοποιεί την port 1080 σαν proxy θα παρατηρήσουμε πως όλες πλέον οι συνδέσεις μας περνούν μέσα από το secure shell που έχουμε.
|
|||
|
|
|||
|
### [3.2 Port Forwarding]{#ss3.2}
|
|||
|
|
|||
|
Ένα άλλο option που έχει το ssh είναι να κάνει port forwarding από και προς το απομακρυσμένο μηχάνημα. Εδώ υπάρχουν δύο περιπτώσεις.
|
|||
|
|
|||
|
#### Να κάνει κάποιος forward μία port από το τοπικό μηχάνημα μέσω του ssh.
|
|||
|
|
|||
|
Για να γίνει αυτό το μόνο που πρέπει να κάνουμε είναι :
|
|||
|
|
|||
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
|||
|
ssh -L 1080:uk.irc.gr:6667 my.linux.server.gr
|
|||
|
|
|||
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
|||
|
όπου στην προκειμένη περίπτωση, ανοίγει μια port στο τοπικό μηχάνημα και στο παράδειγμά μας η port 1080 και ότι σύνδεση γίνει εκεί μεταφέρεται αμέσως μέσω του
|
|||
|
ssh και κάνει σύνδεση στο server uk.irc.gr στην port 6667. Με το συγκεκριμένο παράδειγμα μπορούμε να ανοίξουμε τον αγαπημένο μας IRC Client και να δώσουμε σαν
|
|||
|
server το local μηχάνημα και port την 1080
|
|||
|
|
|||
|
/server 127.0.0.1 1080
|
|||
|
|
|||
|
και να συνδεθούμε στο GRNet και συγκεκριμένα στον server uk.irc.gr. Ομοίως, μπορούμε να κάνουμε το ίδιο και για ένα web site ή ένα ftp server. Προσωπικά βρήκα
|
|||
|
πολύ χρήσιμο το option αυτό όταν ο διαχειριστής του proxy της εταιρίας σου επιτρέπει να κάνεις ssh άλλα δεν επιτρέπει τις port για να κάνει κανείς IRC.
|
|||
|
|
|||
|
#### Να κάνει κάποιος forward μία port από το απομακρυσμένο μηχάνημα στο τοπικό μηχάνημα ή σε κάποιο άλλο στο τοπικό δίκτυο.
|
|||
|
|
|||
|
Αυτό θα ήτανε ιδιαίτερα χρήσιμο αν θέλουμε να συνδεθεί κάποιος προσωρινά στο μηχάνημα μας ή σε κάποιο μηχάνημα στο τοπικό μας δίκτυο. Με την εντολή:
|
|||
|
|
|||
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
|||
|
ssh -R 5100:192.168.0.3:80 my.linux.server.gr
|
|||
|
|
|||
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
|||
|
ανοίγουμε την port 5100 στο μηχάνημα my.linux.server.gr και του ορίζουμε πως θα ανακατευθύνει ότι συνδέσεις γίνονται εκεί μέσω του ssh στο μηχάνημα 192.168.0.3
|
|||
|
και στην port 80 (που είναι οι web υπηρεσίες συνήθως). Έν ολίγοις αν στο μηχάνημα μας 192.168.0.3 έχουμε κάποιο web server όποιος χρήστης πάει να δει το site
|
|||
|
http://my.linux.server.gr:5100/ στην πραγματικότητα θα δει τον web server μας.
|
|||
|
|
|||
|
Σημείωση: Για να ανοίξουμε ports μικρότερα από την port 1024 θα πρέπει να έχουμε root access στα αντίστοιχα μηχανήματα, δηλαδή στο 3.2.2 πρέπει να έχουμε root
|
|||
|
access στο απομακρυσμένο μηχάνημα και στην ενότητα 3.2.1 θα πρέπει να έχουμε root access στο μηχάνημα το οποίο βρισκόμαστε.
|
|||
|
|
|||
|
### [3.3 Και αν δεν μπορούμε να κάνουμε ssh;]{#ss3.3}
|
|||
|
|
|||
|
Σε πολλές περιπτώσεις όμως, για πολλούς και διάφορους λόγους, κάποιος \"κακός\" διαχειριστής δεν μας αφήνει να έχουμε πρόσβαση με secure shell (ssh), και
|
|||
|
περνάει όλη την κίνηση του δικτύου προς το Internet από κάποιο proxy. Ευτυχώς όμως υπάρχουν εργαλεία που μας επιτρέπουν να μπορέσουμε να \"προσπεράσουμε\" τον
|
|||
|
proxy. Τέτοια εργαλεία είναι: το proxytunnel, το corkscrew, το desproxy, το Http Proxy και άλλα. Ύστερα από αρκετές δοκιμές εμένα μου άρεσε περισσότερο και μου
|
|||
|
δούλεψε αρκετά έως πολύ εύκολα το proxytunnel που δεν χρειάζεται καν root access, μπορείς να το έχεις στο home directory και υποστηρίζει και proxy
|
|||
|
authentication.
|
|||
|
|
|||
|
#### Εγκατάσταση - ρύθμιση
|
|||
|
|
|||
|
Μπορείτε να κατεβάσετε το πρόγραμμα από το http://proxytunnel.sf.net/ και να το εγκαταστήσετε πολύ εύκολα, είτε να κατεβάσετε binaries. Ίσως η ρύθμισή του να
|
|||
|
φανεί λιγάκι περίεργη αλλά είναι αρκετά εύκολη. Τα μόνα που έχετε να κάνετε είναι:
|
|||
|
|
|||
|
- Να δημιουργήσετε τον κατάλογο /.ssh στο home directory σας (mkdir /.ssh)
|
|||
|
|
|||
|
- Να δημιουργήσετε το αρχείο config (touch /.ssh/config)
|
|||
|
|
|||
|
- Να επεξεργασθείτε το αρχείο config με τον αγαπημένο σας επεξεργαστή κειμένου (πχ. vi, vim, mcedit, pico, joe ή όποιον προτιμάτε)
|
|||
|
|
|||
|
- και τέλος να προσθέσετε την γραμμή
|
|||
|
|
|||
|
Host foobar
|
|||
|
|
|||
|
ProtocolKeepAlives 30
|
|||
|
|
|||
|
ProxyCommand /path/to/proxytunnel -g proxy.customer.com
|
|||
|
-G 8080 -u user -s password -d my.linux.server.gr -D
|
|||
|
443
|
|||
|
|
|||
|
Όπου:
|
|||
|
|
|||
|
\* proxy.customer.com είναι ο proxy server (μπορεί να χρησιμοποιηθεί και η IP του server)
|
|||
|
|
|||
|
\* 8080 είναι η port του proxy
|
|||
|
|
|||
|
\* user είναι το username που χρησιμοποιείτε για τον proxy
|
|||
|
|
|||
|
\* password είναι το password για τον proxy
|
|||
|
|
|||
|
\* my.linux.server.gr είναι το μηχάνημα στο οποίο θέλετε να συνδεθείτε
|
|||
|
|
|||
|
\* και 443 είναι η port στο μηχάνημα αυτό (η port για το ssh συνήθως είναι η 22, αλλά μπορούμε να \"σηκώσουμε\" ssh server σε όποια port θέλουμε. Εδώ
|
|||
|
χρησιμοποιώ την 443 γιατί σε αυτήν την port επιτρέπει ο proxy secure connections, επειδή η 443 είναι η port για https)
|
|||
|
|
|||
|
Είναι πλέον έτοιμο το proxytunnel να το χρησιμοποιήσετε. Για να το χρησιμοποιήσουμε απλά γράφουμε:
|
|||
|
|
|||
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
|||
|
ssh foobar
|
|||
|
|
|||
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
|||
|
και το πρόγραμμα κάνει τα υπόλοιπα. Αν όλα πάνε καλά και είναι σωστές οι ρυθμίσεις θα συνδεθεί στο my.linux.server.gr χωρίς κανένα πρόβλημα.
|
|||
|
|
|||
|
|
|||
|
### [4. Vtun - Virtual tunnel]{#s4}
|
|||
|
|
|||
|
Το vtun είναι ένα πάρα πολύ καλό εύχρηστο και μικρό εργαλείο για την δημιουργία IP tunnel πάνω από ένα ήδη υπάρχον δίκτυο. Υποστηρίζει συμπίεση, κρυπτογράφηση
|
|||
|
ακόμα και περιορισμό κίνησης (compression, encryption and traffic shaping).
|
|||
|
|
|||
|
### [4.1 Εγκατάσταση]{#ss4.1}
|
|||
|
|
|||
|
Μπορείτε να κατεβάσετε το vtun από το site http://vtun.sf.net/ . Υπάρχει και σαν binary πακέτα, όπως επίσης υπάρχουν και πακέτα για FreeBSD, OpenBSD και
|
|||
|
Solaris.
|
|||
|
|
|||
|
Το πρόγραμμα χρησιμοποιείται και σαν server αλλά και σαν client, ανάλογα την ρύθμιση.
|
|||
|
|
|||
|
### [4.2 Τι θα χρειαστούμε]{#ss4.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 Εγκατάσταση]{#ss4.3}
|
|||
|
|
|||
|
Εφ\' όσον έχουμε όλα τα παραπάνω απλά κάνουμε unzip/untar το αρχείο
|
|||
|
|
|||
|
tar xzvf vtun-2.6.tar.gz
|
|||
|
|
|||
|
cd vtun
|
|||
|
|
|||
|
./configure
|
|||
|
|
|||
|
make
|
|||
|
|
|||
|
και τέλος σαν root για να το εγκαταστήσετε
|
|||
|
|
|||
|
make install
|
|||
|
|
|||
|
Την ίδια ακριβώς διαδικασία πρέπει να γίνει και στο μηχάνημα με το οποίο θέλουμε να κάνουμε το IP/Ethernet Tunnel.
|
|||
|
|
|||
|
### [4.4 Ρύθμιση του server]{#ss4.4}
|
|||
|
|
|||
|
Όταν εγκαταστήσουμε πλήρως και στα δύο μηχανήματα το 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]{#ss4.5}
|
|||
|
|
|||
|
Πάμε στο μηχάνημα που θα είναι ο 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 Και τώρα;]{#ss4.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;]{#ss4.7}
|
|||
|
|
|||
|
Φυσικά υπάρχει η περίπτωση να είμαστε πίσω από κάποιον 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 σας λειτουργεί.
|
|||
|
|
|||
|
|
|||
|
### [5. FreeS/WAN]{#s5}
|
|||
|
|
|||
|
Το FreeS/WAN είναι ένα πρόγραμμα που υλοποιεί το IPSec πρωτόκολλο. Το IPSec δεν είναι τίποτα άλλο παρά Security for the Internet Protocol, δηλαδή είναι η
|
|||
|
επέκταση ασφαλείας του απλού IP πρωτοκόλλου. Εν ολίγοις είναι ένα τυποποιημένο πρωτόκολλο που θα είναι μέρος της έκδοσης του Internet Protocol v6 (IPv6). Αυτό
|
|||
|
σημαίνει πως το IPSec είναι συμβατό και με άλλες εμπορικές εφαρμογές, όπως τα VPN clients της Cisco και τα hardware firewalls (PIX) της Cisco. Με το IPSec
|
|||
|
μπορούμε να δημιουργήσουμε VPN (Virtual Private Network), που είναι ακριβώς ίδιο με στην γενική ιδέα με το vtun αλλά τα tunnels που δημιουργούνται είναι
|
|||
|
κρυπρογραφημένα και εξακριβωμένα (encrypted and authenticated). Που σημαίνει πως κάθε πακέτο που ανταλλάσσεται μεταξύ των δύο μηχανημάτων, ελέγχεται πρώτα για
|
|||
|
να διαπιστωθεί αν είναι εξακριβωμένος (authenticated) ο αποστολέας και το πακέτο μετά μεταδίδεται μέσω του κρυπτογραφημένου tunnel ώστε να μην υποκλαπεί. Ένα
|
|||
|
μεγάλο μειονέκτημα που έχει το FreeS/WAN όμως είναι ότι είναι αρκετά περίπλοκο στην εγκατάστασή του, μίας και απαιτεί μερικές αλλαγές στην ρύθμιση του πυρήνα.
|
|||
|
Το δύσκολο κομμάτι δεν είναι στο να τα εγκαταστήσει τα επιπλέον κομμάτια, αλλά να γίνουν compile σωστά. Το άρθρο αυτό δεν θα αναφερθεί παραπάνω στο FreeS/WAN
|
|||
|
ακόμα. Όποιο θα θέλανε να το δοκιμάσουν μπορούνε να βρούνε αρκετά πακέτα σε binary μορφή και οδηγίες από το site του FreeS/WAN, http://www.freeswan.org . Τέλος
|
|||
|
να αναφέρω πως υπάρχουν μερικές διανομές που περιλαμβάνουν το FreeS/WAN στα CD τους. Τέτοιες διανομές όπως:
|
|||
|
|
|||
|
\* SuSE Linux
|
|||
|
|
|||
|
\* Conectiva
|
|||
|
|
|||
|
\* Mandrake
|
|||
|
|
|||
|
\* Version 3.0 of Debian will include FreeS/WAN. \"unstable\" and \"test\" versions already have it
|
|||
|
|
|||
|
\* the Polish(ed) Linux Distribution
|
|||
|
|
|||
|
\* Best Linux
|
|||
|
|
|||
|
|
|||
|
### [6. Επίλογος]{#s6}
|
|||
|
|
|||
|
Η δημιουργία και η υλοποίηση ενός IP Tunnel δεν είναι κάτι δύσκολο, ούτε κάτι το οποίο απαιτεί \"ειδικές\" γνώσεις και είναι αρκετά χρήσιμο σε πολλές
|
|||
|
περιπτώσεις. Ανάλογα και την περίπτωση το κάθε πρόγραμμα έχει τα αρνητικά και τα θετικά του στοιχεία. Το καλό όμως, είναι πως υπάρχουν αρκετά Free/Open Source
|