Αυτό το commit περιλαμβάνεται σε:
infl00p 2022-03-23 20:14:33 +02:00
commit 8ec8e9bee2
451 αρχεία άλλαξαν με 46736 προσθήκες και 0 διαγραφές

18
content/articles/33/01_editorial.md Κανονικό αρχείο

@ -0,0 +1,18 @@
+++
title = 'Editorial'
date = '2003-07-01T00:00:00Z'
description = ''
author = 'Ιατρού Μιχάλης iatrou ατ hellug.gr(mailto:iatrou%20%C3%A1%C3%B4%20hellug.gr)'
issue = ['Magaz 33']
issue_weight = 1
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
*Καλωσορίσατε στο καλοκαιρινό Magaz.*
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Το τεύχος αυτό είναι ένα \"δώρο\" σε όλους εκείνους που, ηθελημένα ή όχι, αψηφούν τις υψηλές θερμοκρασίες (και όχι μόνο) και μένουν μακριά από τις παραλίες,
κοντά στα \"μηχανάκια\" τους.
Καλή διασκέδαση και καλό καλοκαίρι.

534
content/articles/33/02_iptun.md Κανονικό αρχείο

@ -0,0 +1,534 @@
+++
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

320
content/articles/33/03_qos1.md Κανονικό αρχείο

@ -0,0 +1,320 @@
+++
title = 'Τιθασεύοντας την κίνηση του δικτύου σας, Μέρος 1ο'
date = '2003-06-01T00:00:00Z'
description = ''
author = 'Στοΐλης Ιωάννης giannis@stoilis.gr'
issue = ['Magaz 33']
issue_weight = 3
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
*Δυστυχώς, το Ίντερνετ στην Ελλάδα είναι είδος πολυτελείας. Για εταιρείες που το χρειάζονται απαραίτητα, είναι ένας οικονομικός βραχνάς. Η σειρά των άρθρων που
θα ακολουθήσει, αποσκοπεί στο να ρυθμίσετε, με την χρήση ενός Linux server, με τον καλύτερο δυνατό την χρήση της γραμμή σας.*
----------------------------------------------------------------------------------------------------------------------------------------------------------------
**1. Πρόλογος**
--------------------------------------
- [1.1 Το πρόβλημα](#ss1.1)
- [1.2 Η λύση](#ss1.2)
- [1.3 Τι θα ακολουθήσει;](#ss1.3)
- [1.4 Τι ΔΕΝ θα ακολουθήσει;](#ss1.4)
- [1.5 \"Δεν μου δουλεύει όσο καλά λες ότι λειτουργεί\"](#ss1.5)
- [1.6 Επικοινωνία](#ss1.6)
**2. Το δίκτυο**
---------------------------------------
- [2.1 Σχηματική παράσταση του δικτύου.](#ss2.1)
- [2.2 Ανάλυση του δικτύου](#ss2.2)
- [2.3 Κοινές παραλλαγές του δικτύου](#ss2.3)
**3. Proxy server**
------------------------------------------
- [3.1 Τι είναι ο proxy server;](#ss3.1)
- [3.2 Σε τι μηχάνημα;](#ss3.2)
- [3.3 Τι είναι το latency;](#ss3.3)
- [3.4 Ποιον proxy server;](#ss3.4)
**4. Διαδικασία**
----------------------------------------
- [4.1 Download του squid](#ss4.1)
- [4.2 Μεταγλώττιση](#ss4.2)
- [4.3 Ρύθμιση του squid](#ss4.3)
- [4.4 Η πρώτη δοκιμή](#ss4.4)
**5. ΠΡΑΓΜΑΤΙΚΗ ρύθμιση του squid**
----------------------------------------------------------
**6. Επίλογος**
--------------------------------------
- [6.1 Ανασκόπηση](#ss6.1)
- [6.2 Τι θα ακολουθήσει;](#ss6.2)
### [1. Πρόλογος]{#s1}
### [1.1 Το πρόβλημα]{#ss1.1}
Η ιστορία αυτής της σειράς άρθρων, ξεκινά από τα παράπονα μιας εταιρείας πριν από περίπου δύο χρόνια. Παραπονιόντουσαν για αργή ταχύτητα σύνδεσης με το
Ίντερνετ, παρόλο που είχαν μισθωμένη γραμμή 256kbit. Όταν πήγα να ερευνήσω το θέμα, με έκπληξη βρήκα ένα δίκτυο με περίπου 100 υπολογιστές να βγαίνουν απευθείας
στο Ίντερνετ με NAT, χωρίς proxy. Η λύση ήταν προφανής.
### [1.2 Η λύση]{#ss1.2}
Μέσα σε λίγες μέρες, έστησα έναν Linux proxy server και η κατάσταση βελτιώθηκε αισθητά. Με τον καιρό, αυξήθηκαν οι απαιτήσεις και δεν είχα παρά να αξιοποιήσω
τον Linux server στο μέγιστο. Χρησιμοποίησα squid access pools, active directory authentication integration, QoS με tc και παραγωγή στατιστικών για σχεδόν
οτιδήποτε είναι δυνατόν να μετρηθεί. Μετά από ένα χρόνο, το όλο εγχείρημα έχει φτάσει σε ένα ώριμο στάδιο, οπότε θεώρησα χρήσιμο να καταγράψω όλες τις κινήσεις
μου, μέσω του [magaz](http://magaz.hellug.gr), ώστε να βοηθήσω όσους περισσότερο μπορώ.
### [1.3 Τι θα ακολουθήσει;]{#ss1.3}
Βασικά, αυτό που θα ακολουθήσει είναι \"Τι μπορούμε να κάνουμε με ένα proxy server\". Δεν είναι πρωτότυπο σαν άρθρο, υπάρχουν παρόμοιοι οδηγοί παντού στο
Ίντερνετ, στα αγγλικά. Ελπίζω όμως να παρέχω στον Έλληνα αναγνώστη την δυνατότητα να τα βρει όλα μαζεμένα σε μια γωνιά του Ίντερνετ, αλλά επίσης φιλοδοξώ και να
εξηγήσω τον τρόπο σκέψης που θα πρέπει να έχει ένας διαχειριστή που ξέρει μεν τι να κάνει, αλλά δεν ξέρει το πως.
### [1.4 Τι ΔΕΝ θα ακολουθήσει;]{#ss1.4}
Αυτή η σειρά των άρθρων δεν πρόκειται σε καμία περίπτωση να καλύψει τον κάθε τρόπο που μπορεί να γίνει μια οποιαδήποτε εργασία. Υπάρχουν πραγματικά αμέτρητοι
τρόποι και αμέτρητοι συνδυασμοί προγραμμάτων, ρυθμίσεων και τοπολογίας δικτύου, για να επιτύχετε αυτό που θέλετε. Εγώ θα παραθέσω αυτά που έκανα, και τα
αποτελέσματά τους. Είναι σίγουρο ότι μπορούν να γίνουν με διαφορετικό τρόπο, ευκολότερα ή δυσκολότερα.\
Επίσης, το άρθρο αυτό παίρνει ως δεδομένο ότι έχετε καλή γνώση του δικτύου σας, όπως επίσης και καλή γνώση διαχείρισης του Linux.
### [1.5 \"Δεν μου δουλεύει όσο καλά λες ότι λειτουργεί\"]{#ss1.5}
Δυστυχώς, αυτό είναι το μόνο σίγουρο. Το όλο εγχείρημα είναι αρκετά περίπλοκο και χρειάζεται αρκετό παιχνίδι και χρόνο εκ μέρους σας, για να φτάσει στο καλύτερο
δυνατό αποτέλεσμα. Ο λόγος που θα εξηγήσω τόσο λεπτομερώς τι έκανα και γιατί, είναι και για να σας δείξει πως μπορείτε να πειραματιστείτε μόνοι σας.
<giannis@stoilis.gr>.
### [2. Το δίκτυο]{#s2}
### [2.1 Σχηματική παράσταση του δικτύου.]{#ss2.1}
![](/33/img/net.gif)
Το παραπάνω σχεδιάγραμμα αντιπροσωπεύει ένα τυπικό δίκτυο, πάνω στο οποίο θα εφαρμόσω όλες τις τεχνικές.
### [2.2 Ανάλυση του δικτύου]{#ss2.2}
PC1, PC2, PC3 και PC4: Αυτοί είναι κάποιοι σταθμοί εργασίας του δικτύου μας. Οι μετρήσεις μας θα γίνουν από αυτούς. Στο δικό μου δίκτυο είναι περίπου 120 οι
υπολογιστές.\
WEB SERVER: Είναι ένας server με πραγματική διεύθυνση στο Internet, που σερβίρει τις σελίδες της εταιρείας.\
MAIL SERVER: Είναι άλλος ένας server με πραγματική διεύθυνση στο Internet, που ασχολείται με όλα τα εισερχόμενα και εξερχόμενα e-mails της εταιρείας.\
ΕΞΩΤΕΡΙΚΟΣ ROUTER: Μια δικτυακή συσκευή που συνδέει το εσωτερικό μας δίκτυο με το Internet μέσω μιας μισθωμένης γραμμής. Κάνει NAT και εκτελεί και χρέη
firewall. Στο δίκτυο μου είναι ένας Cisco router.\
INTERNET: Στο δικό μου δίκτυο, η γραμμή σύνδεσης με το Internet είναι 256kbit. Βασικά, δεν έχει καμία σημασία αν έχετε μικρότερη ή μεγαλύτερη ταχύτητα από
αυτήν. Η ανάγκη των τεχνικών που αναφέρω εφαρμόζονται καλύτερα ανάλογα με το πόσοι υπολογιστές θα μοιραστούν την ταχύτητα. Όσοι περισσότεροι υπολογιστές, τόσο
μεγαλύτερη η ανάγκη για εξοικονόμηση bandwidth, είτε πρόκειται για σύνδεση 33.6kbit, είτε για 1mbit.\
PROXY SERVER: Ο proxy server του δικτύου μας, με τον οποίο θα ασχοληθούμε. Προσέξτε ότι έχει δύο κάρτες δικτύου, μία για κάθε δίκτυο που συνδέεται.
### [2.3 Κοινές παραλλαγές του δικτύου]{#ss2.3}
Η πιο κοινή διαφορά του δικτύου αυτού με άλλα μικρότερα, είναι ο router. Πολλά δίκτυα έχουν ήδη έναν Linux server που κάνει το dialup στο Internet με ISDN. Δεν
έχει καμία απολύτως σημασία σε αυτά τα άρθρα, έχει όμως σημασία το θέμα της ασφάλειας, επειδή ο Linux server είναι αυτός που θα κάνει το NAT και το firewall. Η
εγκατάσταση αυτών δεν αφορά αυτό το άρθρο, θεωρώ ότι υπάρχουν ήδη.
### [3. Proxy server]{#s3}
### [3.1 Τι είναι ο proxy server;]{#ss3.1}
Proxy server ονομάζουμε οποιοδήποτε πρόγραμμα ή υπολογιστή λειτουργεί ως ενδιάμεσος για οποιαδήποτε σύνδεση δικτύου θέλουμε να κάνουμε. Ας πούμε για παράδειγμα
ότι και οι τέσσερις υπολογιστές θέλουν να συνδεθούν στην σελίδα <http://www.hellug.gr/>. Χωρίς proxy, η σελίδα αυτή θα ζητηθεί από το Ίντερνετ 4 φορές. Αν
χρησιμοποιούμε proxy, η σελίδα θα ζητηθεί μια φορά, και ο proxy θα αναλάβει να κρατήσει ένα αντίγραφο στην μνήμη ή τον δίσκο του. Μετέπειτα, όποιος ζητάει την
συγκεκριμένη σελίδα, o proxy δεν χρειάζεται να την ξαναζητήσει από το internet, εξοικονομώντας έτσι bandwidth για άλλες δουλειές.
### [3.2 Σε τι μηχάνημα;]{#ss3.2}
Όσοι έχουν ασχοληθεί με διαχείριση Linux και Windows 2000, γνωρίζουν από πρώτο χέρι, ότι το Linux είναι πιο ελαφρύ λειτουργικό σύστημα από τα Windows. Για αυτό,
υπάρχει μια τάση να εγκαθιστούμε το Linux σε απαρχαιωμένο hardware, για λόγους οικονομίας. Η αλήθεια είναι ότι δουλεύει, και δουλεύει καλά. Υπάρχει όμως ένα
μειονέκτημα που πρέπει να λάβετε υπόψιν. Το latency.
### [3.3 Τι είναι το latency;]{#ss3.3}
Αφότου χρησιμοποιήσετε ένα proxy server σε ένα δίκτυο μαζί με τεχνικές QoS που θα αναλύσω σε επόμενα άρθρα, να γνωρίζετε ότι αυτομάτως θα χαθεί η \"σπιρτάδα\"
του Internet. Οι συνδέσεις σε άλλους server αντί να γίνονται αστραπιαία, μπορεί να γίνονται πλέον σε ένα δευτερόλεπτο. Οι σελίδες του Internet θα αρχίσουν να
κατεβαίνουν με μεγαλύτερη αρχική καθυστέρηση αρκετών millisecond, αλλά σε τελική ταχύτητα θα είναι σίγουρα πιο γρήγορες από το να μην χρησιμοποιείτε καθόλου
proxy server.
Στην περίπτωση του QoS, αν δεν είναι καλο-ρυθμισμένο, αυτό το φαινόμενο μπορεί να ενταθεί σε μεγάλο βαθμό, διότι, ανάλογα με τους κανόνες που θα εφαρμόσουμε,
δίνουμε στον proxy server το δικαίωμα να σταματά κάθε πακέτο που περνά από μέσα του, να το κοιτάει, να συμβουλεύεται του κανόνες που θα του έχετε βάλει, να
κατηγοριοποιεί το πακέτο ανάλογα με την σπουδαιότητά του, και μετά να επεξεργάζεται όλα τα πακέτα που έχει στην ουρά, αρχίζοντας από τα σημαντικότερα.
Στην περίπτωση του squid, όταν ζητάμε μια σελίδα, πρώτα ελέγχει την βάση του στην μνήμη αν έχει αυτή την σελίδα. Αν την έχει, θα πρέπει να ψάξει τον δίσκο του,
ανάμεσα σε χιλιάδες άλλες. Μετά, θα πρέπει να διαπιστώσει αν το αντίγραφο που έχει είναι ξεπερασμένο. Σε αυτή την περίπτωση, θα πρέπει να κάνει νέο αντίγραφο.
Αν διαπιστώσει ότι δεν έχει χώρο, πρέπει βρει ποια είναι η σελίδα που έχει πιο πολύ καιρό να ζητηθεί, να την σβήσει και μετά να αφήσει εκεί ένα νέο αντίγραφο
της σελίδας που θέλει, στέλνοντας (ΕΠΙΤΕΛΟΥΣ!!!) την σελίδα σε αυτόν που την ζήτησε.
Η όλη διαδικασία, μπορεί να διαρκέσει μερικές φορές ακόμα και μερικά δευτερόλεπτα, στην χειρότερη περίπτωση. Αυτό το φαινόμενο όμως, είναι δυνατό να
ελαχιστοποιηθεί με ένα καλό και γρήγορο μηχάνημα, με γρήγορους δίσκους, και αρκετή μνήμη. Η χρήση RAID0 είναι συνηθισμένη, σε περιπτώσεις που θέλουμε να έχουμε
το καλύτερο δυνατό αποτέλεσμα. Επίσης, είναι καλό να μην τρέχει τίποτα άλλο, ώστε να μην τον απασχολούμε με περιττές εργασίες.
Τέλος, προτείνω το μηχάνημα να είναι εξοπλισμένο με δύο καλές και επώνυμες κάρτες δικτύου. Η διαφορά τιμής μιας καλής κάρτας δικτύου από μια παλιά ή και ανώνυμη
είναι γελοία.
### [3.4 Ποιον proxy server;]{#ss3.4}
Υπάρχει πραγματικά μεγάλη πληθώρα proxy server στο Ίντερνετ, με τον καθένα από αυτούς να υποστηρίζει περισσότερα ή λιγότερα πρωτόκολλα και δυνατότητες. Μετά από
έρευνα, κατέληξα στον [squid](http://www.squid-cache.org/). Είναι ο πιο διαδεδομένος, είναι GPLed, υπάρχει εδώ και πολλά χρόνια, είναι σταθερός, υποστηρίζεται
από πληθώρα εφαρμογών και υποστηρίζει τις περισσότερες λειτουργίες από αυτές που μας ενδιαφέρουν.
### [4. Διαδικασία]{#s4}
### [4.1 Download του squid]{#ss4.1}
Μπορείτε να κατεβάσετε τον squid από εδώ <http://www.squid-cache.org/Versions/> την τελευταία stable έκδοση.
**Σημείωση: ΠΡΕΠΕΙ να το κατεβάσετε και να το κάνετε compile, διότι μια δυνατότητα που θα χρησιμοποιήσουμε (delay pools) είναι απενεργοποιημένη από default στα
διάφορα pre-compiled binaries που περιλαμβάνονται ήδη στις διάφορες διανομές.**
### [4.2 Μεταγλώττιση]{#ss4.2}
Αφού το κατεβάσετε και το αποσυμπιέσετε σε ένα προσωρινό φάκελο, κάντε compile με τις εξής εντολές:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
./configure --enable-delay-pools
make
make install
----------------------------------------------------------------------------------------------------------------------------------------------------------------
### [4.3 Ρύθμιση του squid]{#ss4.3}
Ας σιγουρευτούμε καταρχήν ότι δουλεύει. Ξεκινήστε τον, με την εντολή:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
/usr/local/squid/bin/squid -z
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Η παραπάνω εντολή δημιουργεί την cache του. Χρειάζεται να χρησιμοποιηθεί μόνο την πρώτη φορά που θα τρέξετε το squid ή αν για οποιοδήποτε λόγο θέλετε να
μηδενίσετε την υπάρχουσα cache.
Τώρα μπορούμε να τον τρέξουμε κανονικά με την εντολή:
/usr/local/squid/bin/squid
### [4.4 Η πρώτη δοκιμή]{#ss4.4}
Ρυθμίστε τον browser από κάποιον υπολογιστή μέσα στο δίκτυο να χρησιμοποιεί ως proxy την IP διεύθυνση του proxy, με την πόρτα 3128. Δοκιμάστε να επισκεφτείτε
οποιαδήποτε σελίδα. Αν δείτε το μήνυμα \"Access Denied\", τότε είστε σε καλό δρόμο. Το μήνυμα αυτό σημαίνει ότι ο squid δεν είναι ρυθμισμένος να απαντάει σε
ερωτήματα από IP που δεν γνωρίζει. Για λόγους ασφαλείας, αυτό είναι καλό. Ας το ρυθμίσουμε και αυτό. Βάλτε τις παρακάτω παραμέτρους στο αρχείο ρυθμίσεων του
squid(/usr/local/squid/etc/squid.conf):
----------------------------------------------------------------------------------------------------------------------------------------------------------------
acl localnet src_ip 10.0.0.0/8
http_access allow localnet
----------------------------------------------------------------------------------------------------------------------------------------------------------------
**Σημαντικό: Ψάξτε το αρχείο και βάλτε την πρώτη ρύθμιση μαζί με τις ήδη υπάρχουσες. Δεν θα δημιουργηθεί πρόβλημα αν δεν το κάνετε, αλλά αν πάτε κάποτε να
κάνετε αλλαγές, θα χάσετε τον μπούσουλα.\
Την δεύτερη ρύθμιση ΠΡΕΠΕΙ να την βάλετε ΠΡΙΝ από την υπάρχουσα παράμετρο: \"http\_access deny all\". Αν δεν το κάνετε, δεν θα μετρήσει καθόλου.**
Κάντε reload το squid, με την εντολή:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
/usr/local/squid/bin/squid -k reconfigure
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Με αυτή την εντολή, λέμε στο squid να ξαναδιαβάσει το αρχείο ρυθμίσεών του.
Δοκιμάστε πάλι να δείτε κάποια από την σελίδα του browser σας. Αν όλα πάνε καλά, είστε έτοιμοι για παρακάτω.
### [5. ΠΡΑΓΜΑΤΙΚΗ ρύθμιση του squid]{#s5}
Αν θέλουμε απλά να παίξει, είναι εύκολο. Αν θέλουμε όμως να παίξει καλά, θα πρέπει να ρυθμίσουμε πολλά πράγματα. Κάθε παράμετρος εξηγείται σαφέστατα μέσα στο
αρχείο ρυθμίσεων. Δεν έχετε παρά να διαβάσετε τα σχόλια που προηγούνται κάθε παραμέτρου και να κάνετε δοκιμές. Επίσης, στην σελίδα του squid μπορείτε να βρείτε
το πλήρες manual του. Δυστυχώς όμως, μερικά πράγματα είναι θέματα εμπειρίας. Παρακάτω θα κοιτάξουμε μερικές από τις πιο σημαντικές ρυθμίσεις που μπορούμε να
κάνουμε.
**http\_port IP:PORT**\
Όπου IP, βάζουμε την εσωτερική διεύθυνση του proxy server. Όπου PORT, βάζουμε την πόρτα όπου θα δέχεται αιτήσεις. Π.χ: **http\_port 10.0.0.1:3128**. Μπορείτε να
παραλείψετε την δήλωση του IP και έτσι ο squid θα ακούει σε όλες τις διευθύνσεις του server. Για λόγους ασφαλείας, δεν προτείνεται.
**icp\_port**\
Ρύθμιση της πόρτας που ακούει το squid για επικοινωνία με άλλους proxy servers. To 0 το απενεργοποιεί. Απενεργοποιήστε το για να ελαφρύνετε το σύστημα.
**cache\_dir**\
Αυτή η παράμετρος ρυθμίζει το που θα αποθηκεύεται η cache του proxy. Π.χ: **cache\_dir ufs /usr/local/squid/cache 1000 16 256**\
ufs: Τύπος της cache. \"ufs\" είναι το πιο stable, αφήστε το έτσι, καλύτερα.\
/usr/local/squid/cache: Φάκελος που βρίσκεται η cache. Το καλύτερο είναι να βρίσκεται σε διαφορετικό δίσκο. Αν όχι, βάλτε το τουλάχιστον σε διαφορετική
κατάτμηση. Αν πάλι δεν μπορείτε, αφήστε το όπως είναι.\
1000: Μέγεθος της cache, σε Megabytes. Αυτή η τιμή είναι καθαρά θέμα εμπειρίας. Κάθε administrator έχει την προσωπική του άποψη για το πόσο πρέπει να είναι. Εγώ
το υπολογίζω με τον εξής εμπειρικό τύπο: **συνολικό bandwidth ΕΠΙ αναμενόμενος χρόνος χρήσης ανά ημέρα**. Π.χ., αν το bandwidth μου είναι 256kbit ανά
δευτερόλεπτο, και η αναμενόμενη χρήση της γραμμής γίνεται για 8 ώρες την ημέρα, τότε έχουμε 921 Mbytes για αυτή την cache, για αυτή τη χρήση.\
**ΣΗΜΕΙΩΣΗ: Αν για οποιοδήποτε λόγο αλλάξετε αυτήν την τιμή, π.χ. να την κάνετε μικρότερη για οικονομία χώρου, ΔΕΝ ΧΡΕΙΑΖΕΤΑΙ ΝΑ ΣΒΗΣΕΤΕ ΤΙΠΟΤΑ ΑΠΟ ΤΗΝ CACHE ΜΕ
ΤΟ ΧΕΡΙ (ναι, το έχω δει και αυτό). Σιγά σιγά μόνο του το squid θα την προσαρμόσει στα μέτρα που του ορίσατε.**\
Οι υπόλοιπες παράμετροι ρυθμίζουν κάποια πράγματα για την cache, με τα οποία δεν θεωρώ σημαντικό να ασχοληθούμε. Μην τα αλλάξετε, εκτός αν ξέρετε τι κάνετε.
**ftp\_user squid\@server.com**\
Αυτή η παράμετρος δηλώνει το e-mail που θα δίνει το squid στους ftp servers που συνδέεται με anonymous login. Δεν έχει καμία σημασία τι θα βάλετε εδώ, αρκεί να
μοιάζει με πραγματική e-mail διεύθυνση. Η προεπιλογή του squid δεν παίζει με μερικούς ftp server που κοιτάζουν αν η e-mail διεύθυνση αυτή μοιάζει πραγματική.
Πλέον αυτό το πρόβλημα δεν φαίνεται να υπάρχει, αλλά καλύτερα να φυλάμε τα ρούχα μας.
**shutdown\_lifetime 5 seconds**\
Είναι το περιθώριο που θα δώσουμε στις σελίδες που ήδη κατεβαίνουν, να τελειώσουν, αφότου δώσουμε εντολή τερματισμού στο squid. Καταντά ενοχλητικό, κατά την
γνώμη μου, να περιμένεις πάνω από μερικά δευτερόλεπτα, ακόμα και αν αυτό σημαίνει ότι θα διακόψουμε κάποιους χρήστες. Ένα shutdown, γίνεται για σημαντικό λόγο
μόνο και είναι πιο σημαντικό να τελειώσει το συντομότερο δυνατόν. Βάλτε ότι πιστεύετε.
**acl ACLNAME TYPE PARAMETERS**\
Οι access lists είναι αυτές που δίνουν στο squid την δυνατότητα να κατηγοριοποιεί είτε τις αιτήσεις που δέχεται, είτε τις σελίδες που τραβάει. Θα τις
χρειαστείτε αρκετές φορές στην διάρκεια των άρθρων αυτών. Η συνταξή τους είναι αρκετά απλή. Ας πάρουμε τις ρυθμίσεις που βάλαμε πριν, για να αφήσουμε το squid
να δεχτεί τις αιτήσεις μας, για την πρώτη μας δοκιμή:\
**acl localnet src\_ip 10.0.0.0/8**\
**acl all src\_ip 0.0.0.0/0**\
**http\_access allow localnet**\
**http\_access deny all** Οι access lists χωρίζονται σε δύο κατηγορίες. Η πρώτη κατηγορία περιλαμβάνει το \"τι θα πιάνει\". Η δεύτερη κατηγορία, δηλώνει το \"τι
θα κάνει αυτό που πιάνει\".\
H πρώτη γραμμή δηλώνει ότι υπάρχει μια ομάδα υπολογιστών που ονομάζεται all. Στην αυτήν την ομάδα συμπεριλαμβάνεται οποιαδήποτε IP.\
Η δεύτερη γραμμή δηλώνει ότι υπάρχει μια ομάδα υπολογιστών που ονομάζεται \"localnet\". Σε αυτήν την ομάδα ανήκουν όλοι όσοι είναι στο subnet 10.0.0.0/8. Οι δύο
τελευταίες γραμμές, κάνουν το εξής: Λένε ότι επιτρέπεται να έχουν πρόσβαση σε σελίδες όσοι ανήκουν στο γκρουπ \"localnet\", δηλαδή όλοι οι υπολογιστές στο
δίκτυό μας. Η επόμενη γραμμή απαγορεύει την πρόσβαση σε οποιονδήποτε υπολογιστή.\
Ο έλεγχος αυτών των παραμέτρων από το squid γίνεται από πάνω προς τα κάτω, και δεν κοιτάει παρακάτω αν βρει μια που ταιριάζει στο αίτημα που δέχτηκε. Οπότε, αν
ένας υπολογιστής του δικτύου μας ζητήσει μια σελίδα, θα \"πιαστεί\" από τον πρώτο κανόνα, θα γίνει δεκτό το αίτημα του και δεν θα προχωρήσει παραπέρα.\
Αν όμως κάποιος υπολογιστής που δεν είναι στο δίκτυό μας ζητήσει μια σελίδα από το squid, τότε δεν θα πιαστεί παρά μόνο από τον τελευταίο μας κανόνα. Άρα, θα
απορριφθεί.\
Οι access lists παρέχουν μεγάλη δύναμη ελέγχου στο squid και επίσης μπορούν να σας προκαλέσουν αρκετά προβλήματα αν δεν τις ρυθμίσετε σωστά.\
Υπάρχουν πραγματικά πάρα πολλοί τρόποι για να ρυθμίσετε ποίος δεν θα βλέπει τι. Το squid έχει access lists για να απαγορεύει σελίδες ανάλογα με το όνομα του
υπολογιστή που τις ζήτησε, ανάλογα από που τις ζήτησε, ή ακόμα και αν έχει συγκεκριμένες λέξεις μέσα στο url. Π.χ, θα μπορούσαμε να απαγορεύσουμε σελίδες που
έχουν την λέξη \"porn\" μέσα στο URL τους. Για περισσότερες πληροφορίες, δείτε τις εξηγήσεις μέσα στο αρχείο ρυθμίσεων του squid, ακριβώς εκεί που αρχίζει η
πρώτη access list.
**cache\_mgr webmaster**\
Δηλώνει το e-mail του υπεύθυνου αυτού του proxy server. Θα εμφανίζεται σε κάθε σελίδα του squid που δηλώνει ότι υπάρχει κάποιο πρόβλημα. Βάλτε εδώ την διεύθυνσή
σας. Π.χ. netadmin\@server.com.
**forwarded\_for off**\
Αυτή η παράμετρος ρυθμίζει το αν θα συμπεριλαμβάνει το squid την διεύθυνση του client που ζήτησε την σελίδα, στον server από τον οποίο θα την ζητήσει.
Απενεργοποιήστε το καλύτερα.
### [6. Επίλογος]{#s6}
### [6.1 Ανασκόπηση]{#ss6.1}
Είπαμε βασικά πράγματα, όπως το τι είναι ένας proxy server και που χρειάζεται. Είπαμε για τις επιπτώσεις που θα έχει το δίκτυό μας, καλές και κακές.\
Είπαμε πόσο εύκολο είναι να τον εγκαταστήσουμε, και πόσο δύσκολο είναι να ρυθμίσουμε τα πάντα όπως πρέπει για να δουλεύει τέλεια. Είπαμε ότι αν δεν παίξετε λίγο
με τις ρυθμίσεις, τότε πιθανότατα δεν θα παίξει με το μέγιστο των δυνατοτήτων του.
### [6.2 Τι θα ακολουθήσει;]{#ss6.2}
Στο επόμενο άρθρο θα ασχοληθούμε με πιο ενδιαφέροντα πράγματα, όπως το τι προγράμματα μπορούμε να χρησιμοποιήσουμε για να φτιάξουμε στατιστικά που θα μας
δείχνουν πόσο αποδοτικά λειτουργεί ο proxy server μας, αναφορές για το που πηγαίνουν οι χρήστες μας, περιορισμός ταχύτητας ανά χρήστη, έλεγχος πρόσβασης στον
proxy με την βοήθεια Windows NT domain ή Windows 2000 active directory, εξαναγκασμός χρήσης του proxy σε ένα δίκτυο, ακόμα και αν δεν το έχουν δηλώσει οι
χρήστες τους στον browser τους μέσω του transparent proxy.\
Επίσης, θα δημοσιεύσω και μερικές access lists που θα περιορίζουν σημαντικά τα διαφημιστικά banner σε Ελλάδα και εξωτερικό, όπως επίσης και σελίδες με

431
content/articles/33/04_mobile.md Κανονικό αρχείο

@ -0,0 +1,431 @@
+++
title = 'Επικοινωνία κινητού - υπολογιστή στο Linux'
date = '2003-06-01T00:00:00Z'
description = ''
author = 'Σιδηρόπουλος Αθανάσιος'
issue = ['Magaz 33']
issue_weight = 4
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------
**1. Εισαγωγή.**
-----------------------------------------
**2. Εν αρχή είναι η σύνδεση.**
--------------------------------------------------------
**3. Επικοινωνία κινητού - υπολογιστή.**
-----------------------------------------------------------------
- [3.1 Η ζωή με το kandy.](#ss3.1)
- [3.2 Η ζωή με το gsmlib.](#ss3.2)
**4. Επίλογος**
----------------------------------------
### [1. Εισαγωγή.]{#s1}
Όλοι ξέρουμε ότι το Linux είναι ένα καταπληκτικό λειτουργικό σύστημα που εξελίσσεται ραγδαία, καταφέρνοντας πρώτο αυτό που κανένα UNIX δεν έχει καταφέρει: να
γίνει προσιτό και να καλύψει τις ανάγκες του απλού χρήστη. Σε αυτό συνέβαλαν τα γραφικά περιβάλλοντα KDE και GNOME και μια πλειάδα εφαρμογών από επεξεργαστές
κειμένου, λογιστικά φύλλα, προγράμματα παρουσιάσεων και ένα σωρό άλλα που κάνουν την ζωή μας με τον υπολογιστή ευκολότερη κάθε μέρα, ειδικά γι αυτούς που δεν
είναι συνηθισμένοι στην γραμμή εντολών.
Μπορούμε να γράψουμε τα κείμενά μας σε επεξεργαστές WYSIWYG, να ετοιμάσουμε τις παρουσιάσεις για την δουλειά μας να υπολογίσουμε χίλια δυο πράγματα σε ένα
λογιστικό φύλο να δούμε τις φωτογραφίες μας και να ακούσουμε τα mp3 μας με την ίδια ευκολία ή ακόμα και περισσότερη κάποιες φορές από ότι άλλοι άνθρωποι μπορούν
να κάνουν χρησιμοποιώντας τα windows.
Όμως, καλά όλα αυτά, Αλλά\...
Αν θέλω να δημιουργήσω ένα αρχείο στον υπολογιστή μου με τα sms που μου έστειλε η κοπέλα μου; Αν θέλω να δημιουργήσω ένα άλλο αρχείο με τα sms κάποιων φίλων
μου; Θα κάθομαι και θα πληκτρολογώ ότι μου έχουν στείλει στον υπολογιστή μου; Και αν θέλω να απαντήσω ταυτόχρονα αυτά τα sms; Μήπως μετά πρέπει να παιδευτώ με
το πληκτρολόγιο του κινητού μου για να γράψω την απάντηση; Και αν θέλω να αλλάξω όλα τα νούμερα που έχω στο κινητό μου επειδή πάλη άλλαξε ο τρόπος κλίσης; (πχ.
από 093 έγινε 693). Η ακόμα χειρότερα να συγχρονίσω τον τηλεφωνικό κατάλογο του κινητού με τα περιεχόμενα ενός αντίστοιχου που διατηρώ στον υπολογιστή. Σε αυτό
το άρθρο θα δούμε πως μπορούν να γίνουν όλα τα παραπάνω, χωρίς να χαλάσουμε το uptime του Linux.
Ναι, το Linux έχει την δυνατότητα να κάνει και αυτά τα κόλπα και ίσως και καλύτερα από ότι τα windows. Ανάλογα βέβαια και με την \"ποιότητα\" της σχετικής
εφαρμογής που μας παρέχετε. Αν και είναι ακόμα αρκετά νωρίς και δεν είναι αρκετά εξελιγμένα τα αντίστοιχα GUI και μη προγράμματα η ωρίμανση και σε αυτό το
σημείο δεν είναι τόσο μακριά.
Άλλα αρκετά με τα εισαγωγικά. Ας πάμε στο ζουμί.
### [2. Εν αρχή είναι η σύνδεση.]{#s2}
Το πρώτο πράγμα που πρέπει να καταφέρουμε για να κάνουμε όλα αυτά τα ωραία κολπάκια είναι να επιτύχουμε σύνδεση μεταξύ του προσωπικού μας υπολογιστή και του
κινητού. Αυτή μπορεί να είναι ενσύρματη (RS 232, σειριακή θύρα) είτε ασύρματη (μέσω υπέρυθρων).
Να σημειώσουμε εδώ μια αρκετά σημαντική λεπτομέρεια. Η όλη διαδικασία δεν διαφέρει και πολύ από την σύνδεση υπολογιστή με modem. Τα περισσότερα, αν όχι όλα,
σημερινά κινητά άλλωστε ενσωματώνουν modem και απαντούν σε AT εντολές. Απλώς, έχουν μερικές ακόμη AT εντολές για να διαχειριστούν τον τηλεφωνικό κατάλογο τα sms
και άλλα.
Στην δική μου περίπτωση έπρεπε να ακολουθήσω τον μακρύ και δύσκολο δρόμο των υπερύθρων καθότι δεν διέθετα καλώδιο που να συνδέει το κινητό μου με τον
υπολογιστή. Και ευτυχώς ο φορητός μου διέθετε υπέρυθρες (γιατί δεν διαθέτει σειριακή) γιατί δεν ήθελα να ασχοληθώ με το ψάξιμο ενός δέκτη υπερύθρων για τον
σταθερό μου υπολογιστή.
Ας δούμε πως γίνεται.
Καταρχάς, πρέπει να πούμε στο Linux ότι υπάρχει θύρα υπερύθρων ώστε να \"ακούει\" και εκεί, όπως κάνει με τη σειριακή. Επειδή η διανομή μου (SuSE 7.2 τότε) έχει
ετοιμάσει τα απαραίτητα για να φορτωθούν τα modules που είναι απαραίτητα για να αναγνωριστεί η υπέρυθρη θύρα, το μόνο που χρειάστηκα να κάνω είναι ένα rcirda
start. Μετά έπρεπε να βάλω το κινητό μου να βλέπει το \"ματάκι\" των υπερύθρων στο φορητό και να ενεργοποιήσω την θύρα του κινητού από το menu. Εκτελώντας από
πριν το irdump σε ένα xterm έβλεπα αμέσως να εμφανίζεται το κινητό μου. Η σύνδεση είχε επιτευχθεί. Έμενε να αξιοποιηθεί πλέον από το απαραίτητο λογισμικό.
Αν δεν μου τα είχε έτοιμα όλα η διανομή μου, θα έπρεπε να έτρωγα κάποιες ώρες (?) διαβάζοντας το σχετικό how to για να βρω ποια είναι τα απαραίτητα modules
(αυτά που αντιστοιχούν στο hardware που διαθέτω) του πυρήνα που έπρεπε να φορτώσω (irtty & irda τουλάχιστον στην δικιά μου περίπτωση) και να ασχοληθώ με εντολές
όπως η irattach για να \"συνδέσω\" την θύρα με ένα οδηγό συσκευής. Όχι πολύ δύσκολα πράγματα δηλαδή.
### [3. Επικοινωνία κινητού - υπολογιστή.]{#s3}
Προγράμματα τα οποία να μπορούν να επικοινωνούν με το κινητό τηλέφωνο για να κάνουν την δουλειά που θέλουμε στο Linux γνωρίζω (έχω χρησιμοποιήσει / δοκιμάσει)
δύο.
Το ένα είναι μέρος του KDE, συγκεκριμένα του πακέτου pim και ονομάζεται kandy. Δυστυχώς είναι ακόμα αρκετά ανώριμο και μόλις πρόσφατα φαίνεται να το ξαναπιάσανε
για να το εξελίξουν περαιτέρω. Ακόμα κι έτσι όμως, είναι πανεύκολο στην χρήση και θα χαρώ πολύ να το δω να βελτιώνεται. Αποτελείται από δύο καρτέλες. Η μία
είναι η καρτέλα από όπου μπορείς να ελέγξεις τις διάφορες λειτουργίες που σου παρέχει το πρόγραμμα (μεταφορά τηλεφωνικού καταλόγου από το κινητό καθώς και
συγχρονισμός με τα στοιχεία που υπάρχουν στο pim). Η δεύτερη σου δίνει πλήρη πρόσβαση στις λειτουργίες του κινητού μέσω των εντολών AT και σου δίνει την
δυνατότητα για προγραμματισμό (εν μέρει) του προγράμματος για να ταιριάξει απόλυτα στις συγκεκριμένες ανάγκες του κινητού σου. Βασικός σκοπός του προγράμματος
είναι να διαχειριστεί τον τηλεφωνικό κατάλογο του κινητού τηλεφώνου, μη δίνοντας καμιά σημασία στα μηνύματα sms.
Το άλλο είναι βασικά μία συλλογή από προγράμματά που μπορεί να διαχειριστεί πλήρως τον τηλεφωνικό κατάλογο του τηλεφώνου καθώς και τα μηνύματα sms που υπάρχουν
στην κάρτα sim. Το \"πρόβλημα\" του είναι ότι δεν έχει GUI. Για τους λάτρεις του είδους αυτό δεν είναι πρόβλημα αλλά για τον μέσο χρήστη ίσως να είναι. Ελπίζω
σύντομα να αναπτυχθεί κάποιο front-end και γι αυτό.
Το πακέτο αυτό λέγεται gsmlib. Μπορεί κανείς να την βρει στην διεύθυνση www.phx.de/fs/gsmlib/index.html. Την στιγμή που γράφονταν το παρόν άρθρο η έκδοση ήταν
1.10. θα ασχοληθούμε κυρίως με αυτή την συλλογή καθότι είναι αρκετά ώριμη και λειτουργική και θα κάνουμε μια μικρή μόνο αναφορά στο kandy.
### [3.1 Η ζωή με το kandy.]{#ss3.1}
Το kandy είναι όπως είπαμε μέρος του πακέτου pim του KDE. Η τρέχουσα έκδοση είναι η 0.3 και έχει αρκετό δρόμο μπροστά του. Βασική του λειτουργία είναι η
διαχείριση του τηλεφωνικού καταλόγου του κινητού μας. Μπορεί να διαβάσει τα περιεχόμενα του (με πολύ δυσκολία και προσπάθεια σε πολλά κινητά) ή τουλάχιστον ένα
μέρος αυτού και να περάσει τα δεδομένα αυτά στο pim. Η επικονωνία με τον χρήστη επιτυγχάνεται χάρη σε δύο καρτέλες. Η κύρια καρτέλα (mobile GUI) αποτελείται από
δύο καταλόγους με τα τηλέφωνα που υπάρχουν, στο KDE address book ο ένας και στο κατάλογο του κινητού τηλεφώνου ο δεύτερος. Κάτω από κάθε ένα υπάρχουν τα κουμπιά
που θα πατήσει κανείς για να διαβάσει τα νούμερα από το κινητό τηλέφωνο ή το KDE address book καθώς και για να γράψει τα τηλέφωνά πίσω όπως τα βλέπει εκείνη την
στιγμή. Στα δεξιά μπορεί κανείς να δει πληροφορίες για το κινητό του τηλέφωνο, όπως το μοντέλο και την έκδοσή του καθώς και το ποσοστό φόρτισης της μπαταρίας.\
Την δεύτερη καρτέλα μπορεί κανείς να την δει επιλέγοντας show -\> terminal από τα μενού. Από εδώ έχει πρόσβαση στο κινητό του τηλέφωνο σε \"χαμηλό\" επίπεδο.
Μπορεί να δώσει εντολές απευθείας στο κινητό του καθώς και να διορθώσει τις ήδη υπάρχουσες για να καλύψουν τις συγκεκριμένες ιδιαιτερότητες του κινητού του
τηλέφωνο.
### [3.2 Η ζωή με το gsmlib.]{#ss3.2}
Το gsmlib είναι μία βιβλιοθήκη που συνοδεύεται από ένα σετ προγραμμάτων για γραμμή εντολής. Αυτά είναι:
- gsmpb: Πρόγραμμα διαχείρισης καταλόγου.
- gsmsctl: Διαχείριση κινητού τηλεφώνου. (ποικίλες δυνατότητες)
- gsmsmsd: Δαίμονας διαχείρισης μηνυμάτων sms.
- gsmsiectl: Δεν γνωρίζω δεν απαντώ. Μάλλον για low-level \"δουλειές\".
- gsmsendsms: Αποστολή sms σε άλλα κινητά.
- gsmsiexfer: Ούτε για αυτό γνωρίζω τίποτα.
- gsmsmsstore: Πρόγραμμα διαχείρισης sms.
Με αυτά τα απλά προγραμματάκια είναι δυνατόν κάποιος να διαχειριστεί με πολύ μεγάλη ευκολία τον τηλεφωνικό του κατάλογο καθώς και τα μηνύματα sms που έχει
αποθηκευμένα στο κινητό του. Ας δούμε πως.
#### Τηλεφωνικός κατάλογος κινητού τηλεφώνου.
Ας ξεκινήσουμε με τον τηλεφωνικό κατάλογο. Γι αυτόν τον σκοπό θα χρησιμοποιήσουμε το gsmpb. Το συγκεκριμένο πρόγραμμα μπορεί να διαβάσει τον κατάλογο του
κινητού μας αλλά και να γράψει σε αυτόν. Για να διαβάσει τον τηλεφωνικό κατάλογο και να τον αποθηκεύσουμε σε ένα αρχείο στον δίσκο μας δίνουμε την ακόλουθη
εντολή.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
gsmpb -b 19200 -c -d katalogos.txt -i -p MT -s /dev/ircomm0
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Ας δούμε όμως τι σημαίνει αυτό το μακρινάρι.
**-b 19200** είναι η ταχύτητα με την οποία θα γίνει η επικοινωνία μεταξύ υπολογιστή και κινητού. Δεν είναι απαραίτητο να δοθεί Η προεπιλεγμένη τιμή αν δεν δοθεί
είναι 38400bps.
**-c** Για να πραγματοποιηθεί η αντιγραφή των περιεχομένων της \"πηγής\" στον \"προορισμό\" που ορίσαμε.
**-d katalogos.txt** Το αρχείο προορισμού του τηλεφωνικού καταλόγου. Στην συγκεκριμένη περίπτωση είναι το katalogos.txt
**-i** Για να υπάρχει αύξων αριθμός εγγραφής (ένδειξη θέσης) στο αρχείο που θα δημιουργήσουμε. Αν θέλουμε να γνωρίζουμε ποία ακριβώς θέση στον τηλεφωνικό
κατάλογο έχει το κάθε τηλέφωνο. Αν δεν βάλουμε το -i τότε το αρχείο θα έχει την μορφή \[όνομα \| νούμερο\]. Αν το βάλουμε θα προστεθεί και ο αύξων αριθμός
εγγραφής στην αρχή του κάθε τηλεφώνου. Ο διαχωριστής τον πεδίων είναι το \|.
**-p MT** Εδώ είναι το ενδιαφέρον μέρος. Καταρχάς όλα τα σημερινά κινητά τηλέφωνα έχουν και δικό τους εσωτερικό τηλεφωνικό κατάλογο και δεν μας αφήνουν στον
περιορισμένο σε αριθμό εγγραφών κατάλογο της κάρτας sim. Τώρα εμείς μπορεί να θέλουμε είτε τον κατάλογό της κάρτας sim, είτε του κινητού τηλεφώνου, είτε και
τους δύο μαζί. Για να διευκρινίσουμε τι θέλουμε, δίνουμε έναν κωδικό δύο γραμμάτων. Έτσι αν θέλουμε τον κατάλογο της κάρτας sim θα δώσουμε -p SM. Αν πάλι
θέλουμε του κινητού τηλεφώνου μόνο δίνουμε -p ME. Στην περίπτωση που δώσουμε -p MT θα πάρουμε τον κατάλογο και του τηλεφώνου (πρώτα) και της κάρτας sim (αμέσως
μετά και ξεκινώντας από τον επόμενο αύξοντα αριθμό εγγραφής αν έχουμε δώσει -i)
**-s** dev/ircomm0/ Μα φυσικά η \"πηγή\" του τηλεφωνικού μας καταλόγου. Η θύρα πού είναι συνδεδεμένο το κινητό μας τηλέφωνο. Στην συγκεκριμένη περίπτωση στην
πρώτη θύρα υπερύθρων.
Για να κάνουμε την αντίθετη εργασία, να γράψουμε τα περιεχόμενα ενός αρχείου με ονόματα και τηλέφωνα που πιθανόν να το έχουμε διορθώσει από τον υπολογιστή μας
στο κινητό τηλέφωνο απλώς πρέπει να βάλουμε στην θέση του προορισμού την θύρα που συνδέεται το κινητό και στη θέση της πηγής το αρχείο που θέλουμε να
μεταφέρουμε. Τόσο απλά.
Ας δούμε όμως μερικές άλλες παραμέτρους που είναι δυνατόν να χρησιμοποιήσουμε με το gsmpb.
**-I \<init string\>**\
**\--init \<init string\>**\
Με αυτό μπορούμε να δώσουμε κάποιες εντολές αρχικοποίησης του κινητού μας. Το ποίες θα είναι αυτές, δεν το ξέρω. Ανάλογα τι γνωρίζετε ότι χρειάζεται το κινητό
σας τηλέφωνο αλλά δεν πρόκειται να το πάρει από το πρόγραμμα υπό κανονικές συνθήκες. Μάλλον δεν θα χρειαστείτε αυτή την παράμετρο, αν δεν θέλετε να κάνετε κάτι
\"περίεργο\".
**-V**\
**\--verbose**\
Για να σας δείχνει τι κάνει τόση ώρα που του παίρνει για να τελειώσει την μεταφορά :-)
**-v**\
**\--version**\
Ε, τα γνωστά. Τυπώνει την έκδοση του προγράμματος.
**-X**\
**\--xonoff**\
Για να χρησιμοποιηθεί η μέθοδος XON/XOFF κατά την \"συνομιλία\" μεταξύ υπολογιστή / κινητού. Αν αντιμετωπίζετε δυσκολίες με την συνήθη μέθοδο χρησιμοποιήστε
αυτήν. Αν όχι, καλύτερα με την hardware μέθοδο που είναι η προεπιλογή.
**-y**\
**\--sychronize**\
Αυτή η επιλογή κάνει συγχρονισμό μεταξύ των περιεχομένων \"πηγής\" και \"προορισμού\". Έτσι, αν μια εγγραφή δεν υπάρχει στον \"προορισμό\" θα προστεθεί. Αν μια
εγγραφή βρεθεί στην \"πηγή\" με όνομά που υπάρχει και στον \"προορισμό\", η εγγραφή στον \"προορισμό\" θα αλλαχθεί σύμφωνα με την εγγραφή της \"πηγής\". Εάν
όμως βρεθούν περισσότερες εγγραφές απλά θα προστεθεί μία ακόμα. Επίσης εγγραφές που δεν υπάρχουν στην πηγή θα διαγραφούν.
**-t \<character set\>**\
**\--charset \<character set\>**\
Εδώ υπάρχει πολύ ζουμί.\
Μπορεί κανείς να επιλέξει μία από τις διαθέσιμες στο κινητό του κωδικοσελίδες. Τα δεδομένα που θα μεταφερθούν θα είναι σε αυτήν την κωδικοσελίδα. Έτσι μπορεί
κανείς, με αρκετή προσπάθεια, να καταφέρει να μεταφέρει τα ονόματα του τηλεφωνικού καταλόγου με ελληνικά όπως τα έχει γραμμένα στο τηλέφωνό του. Όμως δυστυχώς η
προεπιλεγμένη GSM alphabet ΔΕΝ υποστηρίζει τα ελληνικά. Άρα\... πειράματα και προσπάθειες πολλές χρειάζονται, μέχρι να γίνει κάτι τέτοιο εφικτό.
#### Αποστολή λήψη μηνυμάτων sms.
Ως εδώ είδαμε έναν τρόπο για να διαχειριστούμε τον τηλεφωνικό κατάλογο του κινητού μας τηλεφώνου. Ας δούμε τώρα με ποία προγράμματα θα μεταφέρουμε τα μηνύματα
sms που έχουμε αποθηκευμένα στο κινητό μας.
Ας ξεκινήσουμε με το gsmsendsms, με το οποίο μπορεί κανείς να στείλει μηνύματα sms σε άλλα κινητά τηλέφωνα. Αυτό γίνεται με την παρακάτω εντολή:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
gsmsendsms -b 19200 -d /dev/ircomm0 <αριθμός τηλεφώνου> <μήνυμα>
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Θα παρατηρήσατε πιστεύω ότι το -b και -d είναι ίδια με το το προηγούμενο παράδειγμα. Αυτό συμβαίνει γιατί είναι μερικές από τις κοινές, μεταξύ των προγραμμάτων
του πακέτου, παραμέτρους. Δεδομένου ότι υπάρχει πιθανότητα να μας καλύπτουν οι προεπιλεγμένες τιμές για αυτές τις παραμέτρους, το μόνο που χρειάζονταν να
δώσουμε είναι ο αριθμός του κινητού στο οποίο θέλουμε να στείλουμε το μήνυμα και το ίδιο, φυσικά, το μήνυμα.
Να σημειωθεί ότι η παράμετρος -d έχει σαν προεπιλογή προορισμού την θέση /dev/mobilephone οπότε ένα link με το πραγματικό device που χρησιμοποιείτε για την
επικοινωνία με το κινητό τηλέφωνο είναι απαραίτητη.
Πρέπει να προσέξουμε ιδιαίτερα ένα σημείο. Το χρησιμοποιούμενο αλφάβητο και σε αυτήν την περίπτωση είναι το GSM alphabet (από την μεριά του κινητού) και το
latin 1 (από την μεριά του υπολογιστή). Το πρόγραμμα θεωρεί ότι το μήνυμά μας είναι γραμμένο με βάση την κωδικoσελίδα latin 1. Αν το μήνυμά μας περιέχει
χαρακτήρες που δεν υπάρχουν στην κωδικoσελίδα latin 1 σε αυτό θα αντικατασταθούν από τον GSM delta χαρακτήρα (GSM code 16).
Υπάρχουν βέβαια και πολλές άλλες παράμετροι με τις οποίες θα μπορούσαμε να παίξουμε κι εδώ για να κάνουμε κάτι πιο περίπλοκο. Αυτές είναι:
**-c \<ταυτότητα μηνύματος\>**\
**\--concatenate \<ταυτότητα μηνύματος\>**
Με αυτήν την παράμετρο μπορούμε να στείλουμε μηνύματα που είναι πολύ μεγαλύτερα από τα συνηθισμένα (160 χαρακτήρες). Το μήνυμά μας χωρίζεται σε μικρότερα με την
ίδια \"ταυτότητα\" και αύξοντα αριθμό μηνύματος. Αν το κινητό που λαμβάνει το μήνυμα μπορεί να χειριστεί αυτού του είδους τα μηνύματα θα το εμφανίσει σαν ενιαίο
μήνυμα. Ειδάλλως, θα το λάβει ως ξεχωριστά μηνύματα.
**-C \<διεύθυνση υπηρεσίας\>**\
**\--sca \<διεύθυνση υπηρεσίας\>**
Ο αριθμός του κέντρου αποστολής sms μέσω του οποίου θέλουμε να αποσταλούν τα sms μας.
**-r**\
**\--requeststat**
Ζητάει αναφορά για το μήνυμα που στείλαμε από το δίκτυο.
**-t**\
**\--test**
Για να δούμε πώς θα φτάσει το μήνυμα μας στον προορισμό του. Μην ξεχνάτε ότι το πρόγραμμα δέχεται σαν κωδικοσελίδα του μηνύματος την latin 1 και την μετατρέπει
σε GSM alphabet για να την στείλει στο κινητό τηλέφωνο. Αν δώσουμε αυτή την παράμετρο στο πρόγραμμά τότε δεν θα στείλει το μήνυμα αλλά θα το μεταφράσει πάλι σε
latin 1 και θα μας δείξει το πώς θα φαινόταν. Οτιδήποτε είναι εκτός των χρησιμοποιούμενων κωδικοσελίδων μετατρέπεται σε ASCII code 172.
Αφού μάθαμε να στέλνουμε sms ώρα να μάθουμε να τα αποθηκεύουμε κιόλας στον υπολογιστή μας. Αυτό μπορεί να το κάνει το πρόγραμμα gsmsmstore. Βεβαίως μπορεί να
κάνει και την αντίστροφη εργασία. Δηλαδή να αποθηκεύσουμε μηνύματα sms στην κάρτα sim του κινητού μας αν το επιθυμούμε. Αυτό γίνεται με την παρακάτω εντολή:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
gsmsmstore -b 19200 -c -d arxeio.sms -s /dev/ircomm0
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Ας δούμε τι κάνει καθετί:
Το **-b** φυσικά είναι ίδιο όπως και στα δύο προηγούμενα παραδείγματα.
**-c** σημαίνει αντέγραψε τα περιεχόμενα της πηγής στον προορισμό. Αν στο τέλος της εντολής δίναμε αριθμούς θα έπαιρνε μόνο τα μηνύματα που αντιστοιχούν σε
αυτές τις θέσεις. Αν, για παράδειγμα, θέλουμε μόνο το 5ο και το 7ο sms από το κινητό μας τηλέφωνο, δεν έχουμε παρά να προσθέσουμε ένα 5 7 στο τέλος.
**-d arxeio.sms** Ο προορισμός μας. Το αρχείο με τα sms που θέλουμε.
**-s** dev/ircomm0/ Είναι η \"πηγή\" μας. To device που αντιστοιχεί στη θύρα που έχουμε συνδεδεμένο το κινητό μας τηλέφωνο.
Ας δούμε τώρα μερικές ακόμα παραμέτρους που μπορούμε να χρησιμοποιήσουμε.
**-C \<διεύθυνση υπηρεσίας\>**\
**\--sca \<διεύθυνση υπηρεσίας\>**\
Τα είπαμε πριν αυτά έτσι δεν είναι;
**-k**\
**\--backup**
Παρόμοιο με το -c με μία διαφορά. Προσθέτει μόνο ότι δεν υπάρχει ήδη στον προορισμό. Με το -c αντιγράφονται όλα τα περιεχόμενα της πηγής στον προορισμό. Κι εδώ,
αν δώσουμε αριθμούς μηνυμάτων θα λάβει υπόψιν του μόνο τις ανάλογες θυρίδες μηνυμάτων.
**-l**\
**\--list**
Επειδή τα μηνύματα στο αρχείο είναι σε μη αναγνώσιμη μορφή, με αυτήν την παράμετρο βλέπουμε στην οθόνη μας σε αναγνώσιμη αυτήν την φορά μορφή και όχι
κωδικοποιημένα.
**-x**\
**\--delete**
Για να διαγράψουμε τα μηνύματα που θέλουμε από τον προορισμό.
#### Μηνύματα sms με άλλον τρόπο.
Ας δούμε και έναν άλλο τρόπο να διαχειριστούμε τα μηνύματα sms που λαμβάνουμε. Θα χρησιμοποιήσουμε το gsmsmsd. Τον δαίμονα διαχείρισης sms του πακέτου. Ο πιο
απλός τρόπος λειτουργίας του είναι να περιμένει να έρθει ένα sms στο κινητό μας και να το τυπώσει στην στάνταρ έξοδο. Για να το πετύχουμε αυτό δεν χρειαζόμαστε
να δώσουμε καμιά απολύτως παράμετρο εκτός ίσως από την επιθυμητή ταχύτητα επικοινωνίας καθώς και την συσκευή που αντιστοιχεί στο κινητό μας αν αυτή δεν την
έχουμε κάνει ήδη link στο /dev/mobilephone που είναι η προεπιλογή όπως έχουμε δει για όλα τα προγράμματα του πακέτου. Όμως, αν ας πούμε θέλουμε να λαμβάνουμε
email με τα sms που μας στέλνουνε στο κινητό μας; Τότε;
----------------------------------------------------------------------------------------------------------------------------------------------------------------
gsmsmsd -d /dev/ircomm0 -b 19200 -a "mail xrisths1"
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Πολλοί από εσάς θα βρείτε πολύ πιο χρήσιμες δουλειές για το gsmsmsd, όπως διαχείριση του server εξ\' αποστάσεως μέσω απλών εντολών στο κινητό τηλέφωνο που έχετε
μονίμως συνδεδεμένο επάνω του. Αφήστε την φαντασία σας να οργιάσει. Χρήσιμη σε μία τέτοια περίπτωση θα φανεί και η δυνατότητα του gsmsmsd να στέλνει μηνύματα
sms και όχι μόνο να λαμβάνει. Όχι ότι δεν θα ήταν δυνατόν κάτι τέτοιο με τα δύο προηγούμενα προγράμματα. Απλώς εδώ γίνεται αυτοματοποιημένα από ένα μόνο
πρόγραμμα.
Για να δουλέψει όμως το πρόγραμμα είναι απαραίτητο να υπάρχει τουλάχιστον μία κενή θέση αποθήκευσης sms στο κινητό.\
Ας δούμε εν συντομία τώρα τι άλλες παραμέτρους μπορούμε να δώσουμε στο gsmsmsd.
**-c \<ταυτότητα\>**\
**\--concatenate \<ταυτότητα\>**
Όπως και στο gsmsendsms έτσι κι εδώ με την χρήση αυτού του αριθμού ταυτότητας μπορούμε να στείλουμε μεγάλου μεγέθους sms κομμένα σε πολλά μικρότερα τα οποία αν
το υποστηρίζει το κινητό του παραλήπτη θα ανασυσταθούν σε ένα ενιαίο sms μεγάλου μεγέθους.
**-D**\
**\--direct**
Ενεργοποιεί την απευθείας δρομολόγηση των μηνυμάτων. Επειδή όμως δεν υποστηρίζεται από πολλά κινητά η προεπιλογή είναι να αποθηκεύονται πρώτα τα sms και μετά να
διεκπεραιώνονται.
**-f**\
**\--flush**
Διαβάζει και σβήνει τα περιεχόμενα της θυρίδας αποθήκευσης που δίνουμε με την παράμετρο -store. Τα περιεχόμενα ακολουθούν κανονικά τον δρόμο που θα ακολουθούσε
κάθε νεοεισερχόμενο μήνυμα. Δηλαδή τυπώνονται ή περνούνε στην εντολή που έχουμε δώσει να εκτελείται με την παράμετρο -a (\--action).
**-r**\
**-requeststat**\
Αιτείται αναφοράς κατάστασης από το δίκτυο για το sms που αποστέλλει.
**-s \<κατάλογος\>**\
**\--spool \<κατάλογος\>**
Εδώ είμαστε σε μια αρκετά σημαντική παράμετρο που μπορεί να φανεί ιδιαίτερα χρήσιμη σε μερικούς. Εδώ ορίζουμε έναν κατάλογο που ελέγχεται κάθε 5 δευτερόλεπτα
και που θα τοποθετήσουμε αρχεία με τα sms που θέλουμε να στείλουμε. Η μορφή των αρχείων αυτών είναι απλή. Περιέχουν τον αριθμό που θέλουμε να στείλουμε το sms
και αμέσως μετά το μήνυμα. Δηλαδή 6931234567 Sas omhlei o aftomatos thlefoniths toy ypologisth sas.
**-t \<Όνομα θυρίδας\>**\
**\--store \<όνομα θυρίδας\>**
Εδώ ορίζουμε που θα κοιτάει το πρόγραμμα για εισερχόμενα μηνύματα. Το σύνηθες είναι να κοιτάει στην κάρτα sim (SM).
#### Έλεγχος λειτουργιών κινητού τηλεφώνου.
Τέλος θα δούμε πως μπορούμε να παίξουμε με τις λειτουργίες του κινητού μας τηλεφώνου. Για τον σκοπό αυτό θα χρησιμοποιήσουμε το gsmctl. Με το gsmctl μπορούμε
τόσο να δούμε όσο και να ορίσουμε πολλές και διάφορες παραμέτρους του κινητού μας τηλεφώνου. Καλό είναι όμως πρώτον να μελετήσουμε πάρα πολύ καλά το manual του
gsmctl γιατί δεν είναι καθόλου δύσκολο να προξενίσουμε αρκετά μεγάλο πρόβλημα στην λειτουργία του κινητού μας τηλεφώνου. Αν δεν είμαστε σίγουροι για το τι
κάνουμε καλό είναι να το αφήσουμε.
Να σημειώσουμε ότι πολλές από τις λειτουργίες που είναι δυνατόν να διαχειριστούμε με το gsmctl ενδέχεται να μην υποστηρίζονται από το κινητό μας τηλέφωνο. Σε
αυτήν την περίπτωση παίρνουμε ένα ωραιότατο μήνυμα λάθους και διακόπτεται η προσπάθεια.
Η σύνταξη της σχετικής εντολής είναι (ανάλογα και με το αν θέλουμε να δούμε η να αλλάξουμε κάτι):
----------------------------------------------------------------------------------------------------------------------------------------------------------------
gsmctl -d /dev/ircomm0 -b 19200 <πληροφορία που θέλουμε>
gsmctl -d /dev/ircomm0 -b 19200 -o <παράμετρος που πειράζουμε>
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Με την πρώτη μορφή ρωτάμε το κινητό μας για διάφορες πληροφορίες που μπορεί να μας δώσει. Αυτές είναι:
**ALL** Όλες οι δυνατές πληροφορίες που μπορεί να μας δώσει.
**BATT** Κατάσταση μπαταρίας και επίπεδο φόρτισης.
**BITERR** Δίνει μία ένδειξη για τον ρυθμό λαθών που παρουσιάζει το σήμα.
**CLIP** Δείχνει αν είναι ενεργή ή όχι η αποστολή αριθμού κλίσης από το δίκτυο.
**CSET** Τρέχουσα και διαθέσιμες κωδικοσελίδες.
**CURROP** Δείχνει ποιος είναι ο τρέχον παροχέας δικτύου.
**FLCAP** Δίνει έναν συνδυασμό δύο γραμμάτων που δείχνει κάποιες από τις δυνατές φραγές που μπορούμε να ενεργοποιήσουμε. Αυτές μπορεί να είναι από το κλείδωμα
πληκτρολογίου (CS) και της sim (SC) μέχρι φραγή εισερχομένων και εξερχομένων κλίσεων.
**FLSTAT** Δείχνει τις ενεργοποιημένες φραγές (δες παραπάνω FLCAP).
**FORW** Πληροφορίες για τις προωθήσεις κλίσεων που είναι ενεργές.
**OP** Πληροφορίες για τους διαθέσιμους παροχείς δικτύου.
**PIN** Πληροφορίες για τον αριθμό PIN (αν απαιτείται η εισαγωγή του π.χ. κατά το άνοιγμα του κινητού).
**PW** Δείχνει της προστατευμένες με password φραγές.
**SCA** Δίνει το κέντρο διακίνησης sms.
**SIG** Μας δίνει έναν αριθμό που αντιστοιχεί με την ένταση λήψης σήματος από το κινητό με βήματα των 2 dBm.
Με την δεύτερη μορφή μπορούμε να επηρεάσουμε τον τρόπο που λειτουργεί το κινητό μας τηλέφωνο. Το μόνο που έχουμε να κάνουμε είναι να πούμε τι και πώς επιθυμούμε
να επηρεάσουμε. Βέβαια, ό,τι πάμε να κάνουμε εδώ θα πρέπει να γίνει με πολύ προσοχή γιατί δεν αποκλείεται να κλειδώσουμε την συσκευή μας καθιστώντας τη άχρηστη.
Ας δούμε εν συντομία τη μπορούμε να επηρεάσουμε.
**-o dial \<νούμερο\>**
Κάνει κλίση προς το νούμερο που ορίζουμε και περιμένει να πατήσουμε το \<CR\> για να τερματίσουμε την σύνδεση.
**-o forw \<κατάσταση\> \<λόγος\> \<νούμερο\> \[τάξη υπηρεσίας\] \[χρόνος\]**
Εδώ μπορούμε να ορίσουμε το που θα προωθούνται οι κλίσεις που δεχόμαστε (\<νούμερο\>) όταν ικανοποιούνται τα κριτήρια που ορίζουμε (\<λόγος\>). Επίσης μπορούμε
να διαγράψουμε κάποια ενεργή προώθηση κλίσεων (\<κατάσταση\> = erase). Επίσης μπορούμε να ορίσουμε (σε κάποιες περιπτώσεις) μετά από πόση ώρα θα γίνει η
προώθηση κλίσεως.
**-o pin \<νούμερο\>**
Ρυθμίζει τον αριθμό pin της κάρτας sim.
**-o setsca \<νούμερο\>**
Ορίζει τον αριθμό του κέντρου διαχείρισης μηνυμάτων.
### [4. Επίλογος]{#s4}
Μην περιμένετε όλα αυτά τα θαυμαστά πράγματα να δουλέψουν απρόσκοπτα σε όλα τα κινητά της αγοράς. Για παράδειγμα, δεν μπόρεσα να κάνω το gsmsmsd να δουλέψει με
το motorola timeport 250 που έχω καθώς και πολλές από τις πληροφορίες που δίνει το gsmctl έδιναν ένα θαυμάσιο μήνυμα λάθους. Παρόλα αυτά όμως με λίγο
πειραματισμό δεν αποκλείεται να καταφέρετε να κάνετε τα θαυμαστά πράγματα που υπόσχεται το άρθρο. Λίγος παραπάνω κόπος ίσως είναι αρκετός να σας δώσει την
δυνατότητα να διαχειριστείτε τον τηλεφωνικό σας κατάλογο ακόμα και στα ελληνικά καθώς και να διαχειριστείτε εξ\' αποστάσεως τον υπολογιστή σας με μόνο μέσο το
κινητό σας τηλέφωνο.
Όσο εξελίσσονται και ωριμάζουν σιγά-σιγά τα σχετικά προγράμματα (ίσως και με την δική σας συνεισφορά) η ευχρηστία τους θα γίνεται όλο και λιγότερη. Ελπίζω το
παρόν άρθρο να ήταν αρκετά ενδιαφέρον δίνοντας σας ερεθίσματα για πολλές εξαιρετικά ενδιαφέρουσες εφαρμογές.

1280
content/articles/33/05_rce2.md Κανονικό αρχείο

Το diff αρχείου καταστέλλεται επειδή είναι πολύ μεγάλο Φόρτωση διαφορών