Το προφίλ μας στο Google Plus
2

Στον αγώνα για ανέμελο torrenting, μέρος 2/3: Δημιουργία βολικού κι ασφαλούς Seedbox

Φανταζόμαστε πως θα συμφωνείτε κι εσείς ότι αλλιώς ακούγεται όταν μιλάμε για “κατεβαστήρι” κι αλλιώς όταν μιλάμε για “Seedbox”. Όπως και να ‘χει, το προαναφερθέν είναι ένα κατεβαστήρι όπου χρησιμοποιείται το πρωτόκολλο BitTorrent. Θα δούμε σε λίγο ότι είναι πολύ βολικό να έχουμε το δικό μας Seedbox. Φυσικά, πέρα από την ευκολία χρειαζόμαστε κι ασφάλεια — ή ακριβέστερα ανωνυμία και ιδιωτικότητα. Ευτυχώς, μπορούμε να τα έχουμε και τα δύο.

Μέρος 1/3: Οι προδιαγραφές μιας ιδανικής λύσης και οι πρώτες δοκιμές
Μέρος 2/3: Δημιουργία βολικού κι ασφαλούς Seedbox
Μέρος 3/3: Πρώτη γραμμή άμυνας, με το pfSense

Το Seedbox που πρόκειται να φτιάξουμε θα κατοικεί στο οικιακό μας δίκτυο κι όχι στο cloud. Αυτό θα φανεί παράξενο στους επαγγελματίες downloaders, αφού τα Seedbox στο cloud παρέχουν τρομακτικές ταχύτητες download/upload αλλά κι ανωνυμία για τους χρήστες τους. Πράγματι, έτσι έχουν τα πράγματα, μόνο που εμείς δεν είμαστε επαγγελματίες downloaders. Τι να κάνουμε, δεν συνηθίζουμε να κατεβάζουμε το τοπικό χωροχρονικό συνεχές, οπότε οι υψηλές ταχύτητες download/upload δεν μας ελκύουν ιδιαίτερα. Όταν μάλιστα συνυπολογίζουμε το σχετικά υψηλό κόστος ενός καλού Seedbox και στο καπάκι θυμόμαστε ότι χρειάζεται να συμμετέχουμε σε κάποιον private tracker, τότε σηκώνουμε τους ώμους αδιάφορα, γυρίζουμε το κεφάλι *ελαφρώς* στο πλάι και βγάζουμε μια απαξιωτική φωνούλα του στιλ “μ(ι)εεε” (ένρινα και το “ι” μόλις που ακούγεται). Τότε, λοιπόν, τι στο καλό το θέλουμε το Seedbox, μέσα στο τοπικό μας δίκτυο;

Πολύ απλά, για το περιστασιακό downloading μέσω BitTorrent προτιμάμε ένα Linux box –εικονικό ή φυσικό δεν έχει σημασία–, χωρίς οθόνη. Η διαχείριση του box γίνεται από τη γραμμή εντολών, με απομακρυσμένη σύνδεση μέσω SSH. Ο δε χειρισμός των torrents και του downloading γίνεται επίσης από τη γραμμή εντολών, π.χ., με τη βοήθεια ενός εργαλείου σαν το rtorrent ή σαν το transmission-cli. Επιπρόσθετα, παρέχεται κι ένα κατάλληλο web panel ώστε να εργαζόμαστε από άλλον υπολογιστή κι από τον browser της προτίμησής μας. Για τα ζητήματα της ανωνυμίας και της ιδιωτικότητας καταφεύγουμε στη λύση του TorGuard, ώστε αφενός ο ISP μας να μην έχει ιδέα για το τι κάνουμε (privacy), αφετέρου να μηδενιστεί η πιθανότητα λήψης προειδοποιητικών emails του στιλ “σταματήστε το downloading ή υποστείτε τις συνέπειες” (anonymity, βλ. και πρώτο μέρος της σειράς).

Οι προδιαγραφές του Seedbox
Αν έχετε Raspberry Pi model B ή καλύτερο και σκεφτόσαστε πώς να το αξιοποιήσετε, να ξέρετε ότι δύναται ν’ αποτελέσει άριστο Seedbox. Κατά πάσα πιθανότητα θα του συνδέσετε κι έναν εξωτερικό δίσκο USB, αλλά σε κάθε περίπτωση μιλάμε για ένα κομψό, αθόρυβο κι ενεργειακά οικονομικό setup. Αυτή την περίοδο δεν μας περισσεύει κάποιο Raspberry Pi, οπότε αποφασίσαμε να δημιουργήσουμε ένα νέο KVM VM στον virtualization host με το openSUSE που έχουμε. Στην εικονική μηχανή δώσαμε 768MiB RAM, δύο επεξεργαστές και δυναμικό σκληρό δίσκο 64GiB. Ως guest OS επιλέξαμε το Ubuntu Server 14.04 LTS 64bit και μετά την εγκατάστασή του φροντίσαμε και προσαρτήσαμε ένα exported NFS directory, από τον virtualization host. (Για το NFS και την προσάρτηση exported directories διαβάστε εδώ.) Σ’ αυτή τη θέση αποθηκεύονται τα αρχεία που κατεβαίνουν. Είναι μάλιστα εύκολη η μεταφορά τους σε άλλο exported NSF directory, το οποίο βλέπει ένα KVM VM σε ρόλο Plex media server. Αλλά ας μην ξεφεύγουμε. Πριν συνεχίσουμε, ας σημειώσουμε πως δεν είναι απαραίτητο να δουλέψετε κι εσείς σε εικονικό περιβάλλον. Ίσως, π.χ., αποφασίσετε να δώσετε νέα αποστολή σε ένα ταπεινό PC που μέχρι σήμερα δεν σας εξυπηρετούσε.

Προετοιμασία του OS
Κατά την εγκατάσταση του Ubuntu ζητήσαμε να εγκατασταθεί και να ενεργοποιηθεί ο OpenSSH server. Να σημειώσουμε εδώ ότι στα Linux VMs/boxes που έχουμε, φροντίζουμε ώστε να συνδεόμαστε όχι με πληκτρολόγηση username/password αλλά με βάση το κατάλληλο ζεύγος ιδιωτικού/δημοσίου κλειδιού. Περισσότερα επ’ αυτού διαβάστε εδώ.

Όταν ολοκληρώθηκε η εγκατάσταση του λειτουργικού συνδεθήκαμε στο VM απομακρυσμένα, μέσω SSH, κι αμέσως ενημερώσαμε την τοπική λίστα με τα διαθέσιμα πακέτα των αποθετηρίων (repositories):

sub0@seedbox:~$ sudo apt-get update

Στη συνέχεια αναβαθμίσαμε τα όποια πακέτα χρειάζονταν αναβάθμιση:

sub0@seedbox:~$ sudo apt-get dist-upgrade

Όπως βλέπετε, οι εργασίες που απαιτούν δικαιώματα διαχειριστή (root) γίνονται από το λογαριασμό του απλού μας χρήστη (sub0) και με τη βοήθεια του sudo. Την πρώτη φορά που καλούμε το sudo μάς ζητείται η πληκτρολόγηση password. Σημειώστε ότι αυτό δεν ζητείται διαρκώς. Ακριβέστερα, το sudo ζητά password μόνον εφόσον έχουν περάσει τουλάχιστον 15 λεπτά από την τελευταία φορά που το δώσαμε. Το θέμα είναι ότι στο συγκεκριμένο VM δεν υπάρχει λόγος να πληκτρολογούμε password για το sudo, ούτε μία φορά. Προκειμένου λοιπόν να μη μας ζητηθεί ξανά password για το sudo, πληκτρολογούμε

sub0@seedbox:~$ sudo visudo

και στο τέλος του αρχείου που ανοίγει προσθέτουμε την ακόλουθη γραμμή:

sub0 ALL=(ALL) NOPASSWD: ALL 

Στο Ubuntu, ο editor που καλείται με το visudo δεν είναι το vi αλλά το nano. Έτσι, για ν’ αποθηκεύσουμε την αλλαγή πατάμε το συνδυασμό πλήκτρων [CTRL+O] και μετά το [Enter]. Τον editor τον εγκαταλείπουμε δίνοντας [CTRL+X]. Η αλλαγή θα ληφθεί υπόψη την επόμενη φορά που θα συνδεθούμε στο λογαριασμό μας, οπότε κάνουμε τώρα ένα logout κι αμέσως μετά ένα (SSH) login.

Τώρα, αν στο τερματικό σας βλέπετε ειδοποιήσεις περί locales που δεν έχουν οριστεί κ.λπ., τότε με δικαιώματα διαχειριστή ανοίξτε το αρχείο /etc/default/locale…

sub0@seedbox:~$ sudo nano /etc/default/locale

…και φροντίστε ώστε τα περιεχόμενά του να μοιάζουν με τα ακόλουθα:

LANG="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
LANGUAGE="en_US.UTF-8"

Αποθηκεύστε την αλλαγή, εγκαταλείψτε τον editor και μετά πληκτρολογήστε

sub0@seedbox:~$ sudo locale-gen

Εγκατάσταση Transmission
Ο BitTorrent client που επιλέγουμε για το Seedbox μας είναι το άριστο Transmission, το οποίο μεταξύ άλλων παρέχει κι ένα απλό, όμορφο και λειτουργικό web panel. Από οποιονδήποτε υπολογιστή του τοπικού δικτύου και με τον web browser της προτίμησής μας, θα συνδεόμαστε στο εν λόγω panel ώστε ν’ ανεβάζουμε torrents για …κατέβασμα, βεβαίως και για να διαχειριζόμαστε τα downloads. Η εγκατάσταση του Transmission απαιτεί την προσθήκη του κατάλληλου PPA:

sub0@seedbox:~$ sudo add-apt-repository ppa:transmissionbt/ppa

Αμέσως μετά φρεσκάρουμε όλα τα αποθετήρια…

sub0@seedbox:~$ sudo apt-get update

…κι εγκαθιστούμε το Transmission ως ακολούθως:

sub0@seedbox:~$ sudo apt-get install transmission-cli\
transmission-common transmission-daemon

Απαραίτητες ρυθμίσεις
Πριν αρχίσουμε να παίζουμε με το Transmission επιβάλλεται να τροποποιήσουμε συγκεκριμένες παραμέτρους της λειτουργίας του. Επειδή ο συγκεκριμένος BitTorrent client λειτουργεί ως υπηρεσία, προς το παρόν τη σταματάμε:

sub0@seedbox:~$ sudo service transmission-daemon stop

Το κεντρικό αρχείο ρυθμίσεων είναι το /etc/transmission-daemon/settings.json. Το ανοίγουμε με το nano — εννοείται με δικαιώματα διαχειριστή:

sub0@seedbox:~$ sudo nano /etc/transmission-daemon/settings.json

Εντοπίζουμε τις γραμμές που μοιάζουν με τις ακόλουθες και τις αλλάζουμε για τη δική μας εγκατάσταση (η αρίθμηση δεν υπάρχει στο αρχείο, απλά την προσθέσαμε εμείς εδώ για ευκολία στην αναφορά):

"download-dir": "/home/sub0/exported/Downloads",
"incomplete-dir": "/home/sub0/exported/Downloads",
"incomplete-dir-enabled": false,
"rpc-password": " {01965c7d11ff87bbb442f6d1fc1e957bcf316e578JLabmY/"
"rpc-username": "transmission"
"rpc-whitelist": "127.0.0.1,10.20.30.*,192.168.10.*"

Ας δούμε λίγο τι γίνεται σε κάθε μία από τις προηγούμενες γραμμές. Στις 1 και 2 ορίζουμε τις πλήρεις διαδρομές των καταλόγων για τα αρχεία που έχουν κατέβει, καθώς και για εκείνα που κατεβαίνουν αλλά το downloading δεν έχει ολοκληρωθεί. Όπως βλέπετε, προτιμάμε τον ίδιο κατάλογο τόσο για τα ολοκληρωμένα downloads, όσο και για εκείνα εν εξελίξει. Εξ ορισμού πάντως ο φάκελος για τα μη-ολοκληρωμένα downloads δεν χρησιμοποιείται (βλ. γραμμή 3) και προς το παρόν μάς αρέσει αυτό. Αν θέλετε τον εν λόγω κατάλογο, στη γραμμή 3 μην ξεχάσετε ν’ αλλάξετε το false σε true. Στις γραμμές 4 και 5 ορίζουμε το όνομα του χρήστη για τη σύνδεση στο web panel, καθώς και το password του. Σημειώστε ότι μόλις ενεργοποιήσουμε ξανά τον Transmission daemon, στο αρχείο settings.json το password θα αντικατασταθεί με το SHA1 hash του. Αυτό που βλέπετε στο παράδειγμά μας, λοιπόν, δεν είναι το password μας αλλά το hash του password. Στη δε γραμμή 6 ορίζουμε από πού επιτρέπονται συνδέσεις στο web panel του Transmission. Λογικό είναι να επιτρέπουμε εκείνες που ξεκινούν από τον ίδιο τον υπολογιστή (127.0.0.1), καθώς κι εκείνες από άλλα μηχανήματα του τοπικού δικτύου. Στο τοπικό μας δίκτυο οι συσκευές έχουν διευθύνσεις IP της μορφής 192.168.10.*. Στο δικό σας μάλλον θα έχουν διευθύνσεις διαφορετικής μορφής, οπότε τροποποιήστε την παράμετρο rpc-whitelist αναλόγως. Θα παρατηρήσατε εξάλλου ότι στην παράμετρο rpc-whitelist έχουμε συμπεριλάβει και διευθύνσεις της μορφής 10.20.30.*. Αυτό το κάναμε διότι τέτοιες διευθύνσεις λαμβάνουν οι clients του OpenVPN server που τρέχει στο pfSense box του τοπικού μας δικτύου. Όποτε βρισκόμαστε εκτός τοπικού δικτύου και θέλουμε να ελέγξουμε πώς προχωράει ένα torrent που είχαμε αφήσει να κατεβαίνει, συνδεόμαστε *πρώτα* στον OpenVPN server του pfSense και μετά, από έναν οποιονδήποτε web browser, απλά επισκεπτόμαστε το web panel του Transmission.

Αποθηκεύουμε τις αλλαγές, εγκαταλείπουμε τον editor και στη συνέχεια ανοίγουμε το αρχείο /etc/init/transmission-daemon.conf με το nano — εννοείται με δικαιώματα διαχειριστή:

sub0@seedbox:~$ sudo nano /etc/init/transmission-daemon.conf

Για την ευκολότερη διαχείριση των αρχείων που κατεβάζουμε, βολεύει ν’ αλλάξουμε το λογαριασμό κάτω από τον οποίο τρέχει ο Transmission daemon (στο Ubuntu ονομάζεται debian-transmission) σ’ εκείνον του χρήστη μας (sub0). Προς τούτο αρκεί να τροποποιήσουμε κατάλληλα τις τιμές των παραμέτρων setuid και setgid, στο πάνω μέρος του transmission-daemon.conf. Οι αλλαγμένες παράμετροι για τη δική μας εγκατάσταση έχουν ως ακολούθως:

setuid sub0
setgid users

Εσείς βέβαια στη θέση του sub0 θα βάλετε το username του δικού σας χρήστη, ενώ για το setgid πιθανότατα θα βάλετε το όνομα του group με όνομα ίδιο μ’ εκείνο του χρήστη σας. Αν, δηλαδή, το username του χρήστης σας είναι lmtgm (lean, mean, torrent-grabbing machine — λέμε τώρα), τότε στο transmission-daemon.conf θα θέλετε τις ακόλουθες γραμμές:

setuid lmtgm
setgid lmtgm

(Το ότι εμείς βάλαμε “setgid users” κι όχι ” setgid sub0″, έχει να κάνει με την ευθυγράμμιση των groups μεταξύ του KVM VM με Ubuntu και του physical host με openSUSE, από το οποίο μέσω NFS μοιράζεται ένας κατάλογος εντός του οποίου αποθηκεύει το Transmission. Δεν είναι κάτι που πρέπει να σας απασχολεί, απλά το αναφέρουμε.) Για άλλη μια φορά αποθηκεύουμε τις αλλαγές κι εγκαταλείπουμε τον editor.

Πριν ξεκινήσουμε τον Transmission daemon, από τη στιγμή που αλλάξαμε το λογαριασμό κάτω από τον οποίο τρέχει οφείλουμε τώρα να αλλάξουμε και το ιδιοκτησιακό καθεστώς των καταλόγων /etc/transmission-daemon, /var/lib/transmission-daemon/info καθώς κι όλων των περιεχομένων τους. Αν δεν το κάνουμε, το Transmission απλά δεν θα ξεκινήσει:

sub0@seedbox:~$ sudo chown -R sub0:users /etc/transmission-daemon 
sub0@seedbox:~$ sudo chown -R sub0:users /var/lib/transmission-daemon/info

Περιττό να σημειώσουμε ότι θα δώσετε τα ονόματα χρήστη και group που ισχύουν για τη δική σας εγκατάσταση. Η ενεργοποίηση του Transmission daemon επιτυγχάνεται πληκτρολογώντας

sub0@seedbox:~$ sudo service transmission-daemon start

Ένας τρόπος προκειμένου να βεβαιωθούμε ότι τρέχει, είναι να γράψουμε

sub0@seedbox:~$ sudo netstat -4antp

Αν όλα έχουν πάει καλά, στην έξοδο του netstat θα υπάρχει μία γραμμή που υποδηλώνει ότι το Transmission αφουγκράζεται για αιτήσεις πελατών από το port 9091/TCP.

Χρήση του Transmission
Από έναν οποιονδήποτε υπολογιστή του τοπικού μας δικτύου κι από έναν οποιονδήποτε browser, στο web panel του Transmission φτάνουμε με επίσκεψη σε διεύθυνση της μορφής http://IP_address:9091, όπου IP_address είναι η εσωτερική διεύθυνση IP του VM/box σε ρόλο Seedbox. Με κλικ στο σχετικό εικονίδιο ανεβάζουμε ένα ή περισσότερα torrents και μπορούμε, φυσικά, να παρακολουθούμε την πρόοδο ενεργών downloads, να ξεκινάμε νέα, να παγώνουμε και να συνεχίζουμε άλλα κ.ο.κ. Γενικά, το web panel του Transmission είναι απλό αλλά δεν τσιγκουνεύεται τις πληροφορίες που δίνει, ούτε περιορίζει τον χρήστη του.

Ένας τρόπος για να λαμβάνουμε τα αρχεία ή τους φακέλους που έχουν ήδη κατέβει στο Seedbox μας, είναι μέσω του πρωτοκόλλου SFTP (FTP over SSH). Το FileZilla είναι ένας δωρεάν FTP client για Linux, OS X και Windows. Αποτελεί Ελεύθερο Λογισμικό και υποστηρίζει, μεταξύ άλλων, συνδέσεις SFTP. Υπάρχουν βέβαια πολλές εναλλακτικές λύσεις και μέθοδοι για τη λήψη ή/και για τη διαχείριση των αρχείων του Seedbox μας, όμως στο παρόν άρθρο άλλα μας απασχολούν.

Για τη σύνδεση στο web panel του Transmission αρκεί να επισκεφτούμε μια διεύθυνση της μορφής http://IP_address:9091, όπου το IP_address είναι η εσωτερική διεύθυνση IP που έχει πάρει το Seedbox από τον router. Στο παράδειγμα, αντί για τη διεύθυνση έχουμε απλά πληκτρολογήσει 'seedbox' -- κι αυτό χάρη στον name server του router μας. Την πρώτη φορά εξάλλου που συνδεόμαστε στο web panel του Transmission, μας ζητούνται username και password.

Για τη σύνδεση στο web panel του Transmission αρκεί να επισκεφτούμε μια διεύθυνση της μορφής http://IP_address:9091, όπου το IP_address είναι η εσωτερική διεύθυνση IP που έχει πάρει το Seedbox από τον router. Στο παράδειγμα, αντί για τη διεύθυνση έχουμε απλά πληκτρολογήσει “seedbox” — κι αυτό χάρη στον name server του router μας. Την πρώτη φορά εξάλλου που συνδεόμαστε στο web panel του Transmission, μας ζητούνται username και password.

Σε μια πρώτη ματιά, το web panel του Transmission ίσως δείχνει ανησυχητικά άδειο. Είναι πράγματι λιτό, όπως όμως θα διαπιστώσετε την κάνει τη δουλειά του -- και μάλιστα με το παραπάνω.

Σε μια πρώτη ματιά, το web panel του Transmission ίσως δείχνει ανησυχητικά άδειο. Είναι πράγματι λιτό, όπως όμως θα διαπιστώσετε την κάνει τη δουλειά του — και μάλιστα με το παραπάνω.

Με κλικ στο σχετικό εικονίδιο (1) εμφανίζεται ένα παραθυράκι επιλογής αρχείων (2), από το οποίο επιλέγουμε ένα torrent από τον τοπικό δίσκο προκειμένου να το στείλουμε στο Transmission (3).

Με κλικ στο σχετικό εικονίδιο (1) εμφανίζεται ένα παραθυράκι επιλογής αρχείων (2), από το οποίο επιλέγουμε ένα torrent από τον τοπικό δίσκο προκειμένου να το στείλουμε στο Transmission (3).

Το Torrent που ανεβάσαμε κατεβαίνει ήδη και στο απλό web panel του Transmission υπάρχει τώρα περισσότερη δράση.

Το Torrent που ανεβάσαμε κατεβαίνει ήδη και στο απλό web panel του Transmission υπάρχει τώρα περισσότερη δράση.

Και μιας και μιλήσαμε για δράση, επιλέγοντας ένα ενεργό torrent μπορούμε να βλέπουμε ένα πλήθος πληροφοριών που το αφορούν, όπως, π.χ., το χρόνο που απομένει για την ολοκλήρωση του download, τη λίστα με τους peers κ.ο.κ. Το Seedbox μας είναι πλέον ετοιμοπόλεμο, ωστόσο έχουμε δύο σημαντικές εκκρεμότητες που αφορούν στην προστασία της ιδιωτικότητας και της ανωνυμίας.

Και μιας και μιλήσαμε για δράση, επιλέγοντας ένα ενεργό torrent μπορούμε να βλέπουμε ένα πλήθος πληροφοριών που το αφορούν, όπως, π.χ., το χρόνο που απομένει για την ολοκλήρωση του download, τη λίστα με τους peers κ.ο.κ. Το Seedbox μας είναι πλέον ετοιμοπόλεμο, ωστόσο έχουμε δύο σημαντικές εκκρεμότητες που αφορούν στην προστασία της ιδιωτικότητας και της ανωνυμίας.

Ενεργοποίηση VPN tunnel, με server του TorGuard
Θέλουμε το Seedbox μας να βγαίνει στο Internet μέσω ενός OpenVPN server του TorGuard (βλ. το πρώτο άρθρο της σειράς μας). Για τη συνέχεια υποθέτουμε ότι έχουμε λογαριασμό στο TorGuard και συγκεκριμένα ενεργή συνδρομή για την υπηρεσία Anonymous VPN. Από τη γραμμή εντολών του Seedbox μας, κατεβάζουμε το πακέτο του TorGuard με τα αρχεία ρυθμίσεων για συνδέσεις UDP προς τους servers της εταιρείας. (Μιας κι από το Seedbox κατεβάζουμε torrents και μας ενδιαφέρει η ταχύτητα, προτιμάμε να συνδεόμαστε σε OpenVPN servers μέσω UDP κι όχι μέσω TCP.)

sub0@seedbox:~$ wget https://torguard.net/downloads/OpenVPN-UDP.zip

Παίρνουμε το αρχείο OpenVPN-UDP.zip, το οποίο κι αποσυμπιέζουμε:

sub0@seedbox:~$ unzip OpenVPN-UDP.zip

Προκύπτει ο κατάλογος “OpenVPN -UDP” κι αυτό το κενό στ’ όνομα μάς κάνει ν’ αναρωτιόμαστε τι σκεφτόταν ο υπάλληλος της TorGuard, την ημέρα που έφτιαξε το αρχείο OpenVPN-UDP.zip. Δεν είναι απαραίτητο να απαλείψουμε το κενό, αν όμως *δεν* το κάνουμε θα συνεχίσουμε με άγχος, ανησυχία κι ενοχές. Δεν ξέρουμε για εσάς, σ’ εμάς όμως δεν αρέσει ούτε το άγχος, ούτε η ανησυχία, ούτε οι ενοχές:

sub0@seedbox:~$ mv "OpenVPN -UDP" OpenVPN-UDP

Τα αρχεία εντός του καταλόγου OpenVPN-UDP είναι εκτελέσιμα, χωρίς να υπάρχει λόγος. Αλλάζουμε τα δικαιώματά τους ώστε ο ιδιοκτήτης να έχει δικαιώματα ανάγνωσης κι εγγραφής, ενώ όλοι οι άλλοι δικαίωμα ανάγνωσης:

sub0@seedbox:~$ chmod 644 OpenVPN-UDP/*

Στο σημείο αυτό εγκαθιστούμε στο Ubuntu μας το OpenVPN, το οποίο λειτουργεί είτε ως server είτε ως client:

sub0@seedbox:~$ sudo apt-get install openvpn

Μεταφέρουμε ολόκληρο τον κατάλογο OpenVPN-UDP εντός του /etc/openvpn και μεταβαίνουμε στον προαναφερθέντα:

sub0@seedbox:~$ sudo mv OpenVPN-UDP /etc/openvpn/TorGuard-UDP
sub0@seedbox:~$ cd /etc/openvpn

Όπως βλέπετε, καθώς μετακινήσαμε τον κατάλογο OpenVPN-UDP στη νέα του θέση, τον μετονομάσαμε κιόλας. Μέσα στον TorGuard-UDP υπάρχει το αρχείο ca.crt, που είναι το δημόσιο πιστοποιητικό της Αρχής Πιστοποίησης του TorGuard. Το συγκεκριμένο αρχείο το αντιγράφουμε στον κατάλογο /etc/openvpn:

sub0@seedbox:/etc/openvpn$ sudo cp TorGuard-UDP/ca.crt .

Αν ρίξουμε μια ματιά μέσα στον κατάλογο TorGuard-UDP, είναι εύκολο να καταλάβουμε σε ποιους servers αντιστοιχεί καθένα από τα αρχεία ρύθμισης του TorGuard:

sub0@seedbox:/etc/openvpn$ ls TorGuard-UDP
ca.crt                             TorGuard.Indonesia.ovpn             TorGuard.South.Korea.ovpn
TorGuard.Australia.Melbourne.ovpn  TorGuard.Ireland.ovpn               TorGuard.Spain.ovpn
TorGuard.Australia.Sydney.ovpn     TorGuard.Italy.ovpn                 TorGuard.Sweden.Stockholm.ovpn
TorGuard.Belgium.ovpn              TorGuard.Japan.ovpn                 TorGuard.Swiss.ovpn
TorGuard.Brazil.ovpn               TorGuard.Latvia.ovpn                TorGuard.Thailand.ovpn
TorGuard.Canada.Calgary.ovpn       TorGuard.Luxembourg.ovpn            TorGuard.Tunisia.ovpn
TorGuard.Canada.Toronto.ovpn       TorGuard.Malaysia.ovpn              TorGuard.Turkey.ovpn
TorGuard.Canada.Vancouver.ovpn     TorGuard.Mexico.ovpn                TorGuard.UK.Hampshire.ovpn
TorGuard.Costa Rica.ovpn           TorGuard.Moldova.ovpn               TorGuard.UK.London.ovpn
TorGuard.Czech.ovpn                TorGuard.Netherlands.ovpn           TorGuard.USA-ARIZONA.ovpn
TorGuard.Denmark.ovpn              TorGuard.New.Zealand.ovpn           TorGuard.USA-ATLANTA.ovpn
TorGuard.Egypt.ovpn                TorGuard.Norway.ovpn                TorGuard.USA-CHICAGO.ovpn
TorGuard.Finland.ovpn              TorGuard.Panama.ovpn                TorGuard.USA-DALLAS.ovpn
TorGuard.France.ovpn               TorGuard.Poland.ovpn                TorGuard.USA-LA.ovpn
TorGuard.Germany.Frankfurt.ovpn    TorGuard.Portugal.ovpn              TorGuard.USA-LAS-VEGAS.ovpn
TorGuard.Germany.Munich.ovpn       TorGuard.Romania.ovpn               TorGuard.USA-MIAMI.ovpn
TorGuard.Greece.ovpn               TorGuard.Russia.Moscow.ovpn         TorGuard.USA-NEW-JERSEY.ovpn
TorGuard.Hong.Kong.ovpn            TorGuard.Russia.St.Petersburg.ovpn  TorGuard.USA-NEW-YORK.ovpn
TorGuard.Hungary.ovpn              TorGuard.Saudi.Arabia.ovpn          TorGuard.USA-SEATTLE.ovpn
TorGuard.Iceland.ovpn              TorGuard.Singapore.ovpn             TorGuard.Vietnam.ovpn
TorGuard.India.ovpn                TorGuard.South.Africa.ovpn

Για τις ανάγκες της παρουσίασής μας, ας φροντίσουμε ώστε το Seedbox να βγαίνει στο Internet μέσω του server στην Ελβετία. Το αρχείο που θέλουμε, λοιπόν, είναι το TorGuard.Swiss.ovpn. Τώρα, προκειμένου ν’ αλλάζουμε εύκολα OpenVPN server κάθε φορά που το επιθυμούμε, αλλά και για λόγους καλής διαχείρισης, αφήνουμε το αρχείο TorGuard.Swiss.ovpn μέσα στον κατάλογο /etc/openvpn/TorGuard-UDP κι από τον /etc/openvpn φτιάχνουμε ένα symbolic link προς αυτό:

sub0@seedbox:/etc/openvpn$ sudo ln -s TorGuard-UDP/TorGuard.Swiss.ovpn VPNserver.conf

Σημειώστε ότι σκόπιμα δώσαμε στο αρχείο VPNserver την κατάληξη “.conf”. Έτσι, μόλις η τοπική υπηρεσία του OpenVPN ενεργοποιηθεί θα το διαβάσει αυτόματα. Πριν τη σύνδεσή μας ανοίγουμε το αρχείο VPNserver.conf με το nano — και φυσικά με δικαιώματα διαχειριστή:

sub0@seedbox:/etc/openvpn$ nano VPNserver.conf

Τη γραμμή “auth-user-pass” την αλλάζουμε σε “auth-user-pass credentials.txt” (χωρίς τα εισαγωγικά). Αποθηκεύουμε την αλλαγή (με [CTRL+O], [Enter]) κι εγκαταλείπουμε το nano (με [CTRL+X]). Φτιάχνουμε στη συνέχεια το αρχείο credentials.txt:

sub0@seedbox:/etc/openvpn$ sudo nano credentials.txt

Το περιεχόμενό του πρέπει ν’ αποτελείται από δύο γραμμές μόνο, όπου η πρώτη έχει το username και η δεύτερη το password μας στο TorGuard. Αφού αποθηκεύσουμε το αρχείο και βγούμε από το nano, φροντίζουμε ώστε δικαίωμα ανάγνωσης και εγγραφής στο credentials.txt να έχει μόνον ο χρήστης root:

sub0@seedbox:/etc/openvpn$ sudo chown 600 credentials.txt

Είμαστε πλέον έτοιμοι να συνδεθούμε στον OpenVPN server του TorGuard, στην Ελβετία. Πρώτα όμως ας σημειώσουμε το δημόσιο IP που έχει το Seedbox μας, καθώς και τον name server που χρησιμοποιεί. Για το δημόσιο IP, γράφουμε:

sub0@seedbox:/etc/openvpn$ curl icanhazip.com
87.203.x.x

Για τον name server, πληκτρολογούμε κάτι σαν

sub0@seedbox:/etc/openvpn$ dig deltahacker.gr
; <<>> DiG 9.9.5-3ubuntu0.7-Ubuntu <<>> deltahacker.gr
;; global options: +cmd
;; Got answer:
...
;; Query time: 75 msec
;; SERVER: 192.168.10.254#53(192.168.10.254)
;; WHEN: Sun Feb 21 14:39:58 EET 2016
;; MSG SIZE  rcvd: 59

Στην τρίτη γραμμή από το τέλος, βλέπουμε ότι ο name server είναι ο 192.168.10.254. Πρόκειται για τον router μπροστά από το Seedbox. Ας συνδεθούμε τώρα στον OpenVPN server του TorGuard:

sub0@seedbox:/etc/openvpn$ sudo service openvpn start
 * Starting virtual private network daemon(s)...
 *   Autostarting VPN 'VPNserver'

Αν όλα έχουν πάει καλά, τότε στην έξοδο του ifconfig πρέπει να δούμε και το tun0 interface. Δείτε:

sub0@seedbox:/etc/openvpn$ ifconfig 
eth0      Link encap:Ethernet  HWaddr 52:54:00:e7:de:78  
          inet addr:192.168.10.225  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::5054:ff:fee7:de78/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7440054 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5923232 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:17597153786 (17.5 GB)  TX bytes:5273568359 (5.2 GB)
...
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.9.0.10  P-t-P:10.9.0.9  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:21 errors:0 dropped:0 overruns:0 frame:0
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:2976 (2.9 KB)  TX bytes:3217 (3.2 KB)

Όλα μοιάζουν τέλεια. Ας ελέγξουμε αν το δημόσιο IP μας έχει αλλάξει:

sub0@seedbox:/etc/openvpn$ curl icanhazip.com
179.43.188.214

Και ναι, έχει αλλάξει! Αν όμως δώσουμε ξανά “dig deltahacker.gr” (χωρίς τα εισαγωγικά), θα διαπιστώσουμε ότι συνεχίζουμε να χρησιμοποιούμε τον ίδιο name server. Το γεγονός επαληθεύεται ρίχνοντας και μια ματιά στο αρχείο /etc/resolv.conf:

sub0@seedbox:/etc/openvpn$ cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.10.254
search colder.xyz

Παρά λοιπόν την επιτυχημένη σύνδεσή μας στον TorGuard server, αναλόγως των name servers που χρησιμοποιεί ο router μας, ο ISP είναι πιθανό να βλέπει ποια sites επισκεπτόμαστε ή ποιες ιντερνετικές υπηρεσίες χρησιμοποιούμε. Προκειμένου ν’ αποφύγουμε τα δυνητικά DNS leaks, θέλουμε ο πρώτος name server του συστήματος να είναι ο 10.9.0.1: αυτή είναι η διεύθυνση IP του απομακρυσμένου TorGuard server για το tun0 interface. Το αρχείο /etc/resolv.conf δεν έχει νόημα να το τροποποιήσουμε χειροκίνητα, διότι επαναδημιουργείται αυτόματα κατά την εκκίνηση του λειτουργικού. Μπορούμε όμως να αλλάξουμε τον τρόπο δημιουργίας του…

root@seedbox:/etc/openvpn# echo "nameserver 10.9.0.1" >> /etc/resolvconf/resolv.conf.d/head

…και να επανεκκινήσουμε την υπηρεσία ονόματι resolvconf:

sub0@seedbox:/etc/openvpn$ sudo service resolvconf restart

Πλέον, το περιεχόμενο του /etc/resolv.conf θα έχει αλλάξει…

sub0@seedbox:/etc/openvpn$ cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.9.0.1
nameserver 192.168.10.254
search colder.xyz

…κι ο name server που θα απαντά στα DNS queries θα ‘ναι ο 10.9.0.1:

sub0@seedbox:/etc/openvpn$ dig deltahacker.gr
; <<>> DiG 9.9.5-3ubuntu0.7-Ubuntu <<>> deltahacker.gr
;; global options: +cmd
;; Got answer:
...
;; Query time: 148 msec
;; SERVER: 10.9.0.1#53(10.9.0.1)
;; WHEN: Sun Feb 21 15:17:57 EET 2016
;; MSG SIZE  rcvd: 150

Προσοχή! Για διάφορους λόγους, ο name server στο 10.9.0.1 ενδέχεται να μην απαντά. Όταν συμβαίνει αυτό δεν θα παίρνουμε κάποιο μήνυμα λάθους, αφού θα χρησιμοποιείται ο επόμενος διαθέσιμος name server — στο παράδειγμά μας ο 192.168.10.254. Προκειμένου να μην έχουμε το φόβο των DNS leaks ως προς τον ISP μας, μια εναλλακτική είναι να φροντίσουμε ώστε στην αρχή του /etc/resolv.conf να βρίσκονται οι δύο name servers της Google, με διευθύνσεις 8.8.8.8 και 8.8.4.4.

Λογικά, στο σημείο αυτό όλα θα πρέπει να δουλεύουν όπως ακριβώς θέλουμε. Συγκεκριμένα, κατά την εκκίνηση του λειτουργικού συνδεόμαστε στον OpenVPN server του TorGuard στην Ελβετία, η διαδικτυακή μας κίνηση δρομολογείται μέσω του απομακρυσμένου server, βγαίνουμε στο Internet όχι με το δημόσιο IP που μας έχει δώσει ο ISP, είμαστε ασφαλείας κι ως προς τα DNS leaks. Επειδή κάναμε πολλή δουλειά και πειράξαμε ένα σωρό πράγματα, ίσως είναι καλή ιδέα να επανεκκικήσουμε το Seedbox μας…

sub0@seedbox:/etc/openvpn$ sudo reboot

…κι αφού ξεκινήσει και συνδεθούμε και πάλι, να κάνουμε μια-δυο δοκιμές για το δημόσιο IP μας και τον χρησιμοποιούμενο name server.

Κατέβασμα μόνο μέσω VPN
Για οποιονδήποτε λόγο, η σύνδεσή μας προς τον TorGuard server είναι πιθανό να πέσει. Αν εκείνη τη στιγμή κατεβάζουμε με το Transmission, το downloading θα σταματήσει για λίγο αλλά λίγα δευτερόλεπτα αργότερα θα συνεχίσει από το eth0 interface, άρα μέσω του ISP μας. Ξαφνικά, λοιπόν, η δραστηριότητά μας γίνεται φανερή — εκτός βέβαια κι αν έχουμε λάβει τα μέτρα μας.

Αν υπήρχε τρόπος ώστε να λέγαμε στο Transmission κάτι στο στιλ “κατέβαζε μόνο μέσω του τάδε network interface”, θα του υποδεικνύαμε το tun0 και δεν θα είχαμε κανένα πρόβλημα: όσο το tun0 ήταν up θα είχαμε δυνατότητα για downloading, ενώ αν γινόταν down απλά δεν θα μπορούσαμε να κατεβάζουμε. Το θέμα είναι ότι το Transmission δεν είναι δυνατόν να δεχτεί τέτοια οδηγία. Ευτυχώς όμως που υπάρχει το iptables. Ρίχνοντας μια ματιά στις προκαθορισμένες πολιτικές του Ubuntu Server για τις αλυσίδες INPUT, FORWARD και OUTPUT, παρατηρούμε ότι δεν υπάρχει κανένας περιορισμός για καμία τους:

sub0@seedbox:~$ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

Το Seedbox μας βρίσκεται πίσω από το firewall του router, δεν έχουμε κάποιον κανόνα port forwarding ώστε να φτάνουμε στο VM από τον έξω κόσμο, επομένως δεν υπάρχει λόγος ν’ ασχοληθούμε με την αλυσίδα INPUT. Ούτε με την αλυσίδα FORWARD έχουμε λόγο ν’ ασχοληθούμε, αφού το VM δεν λειτουργεί ως router. Μας μένει λοιπόν η αλυσίδα OUTPUT — και μ’ αυτή *έχει* νόημα ν’ ασχοληθούμε. Αναλυτικότερα, τα εξερχόμενα πακέτα που προορίζονται για το τοπικό δίκτυο θα τα αφήνουμε να περνούν, αλλά σε όσα προορίζονται για το Internet θα τους επιτρέπουμε την έξοδο *μόνον* όταν διέρχονται μέσα από το tun0 interface. Έτσι, όταν η σύνδεση προς τον TorGuard server πέφτει, το Seedbox μας θα μπορεί να επικοινωνεί μόνο με άλλα μηχανήματα ή VMs του τοπικού δικτύου. Ο ISP μας θα εξακολουθεί να είναι στα σκοτάδια ως προς τις δραστηριότητές μας, ενώ εμείς θα μπορούμε να κάνουμε ένα SSH login στο VM για να ξεκινήσουμε, ίσως, μια νέα σύνδεση VPN, ενδεχομένως προς άλλον TorGuard server.

Έχουμε ετοιμάσει ένα εξαιρετικά απλό σκριπτ, το οποίο θέτει τους προαναφερθέντες κανόνες για τα εξερχόμενα πακέτα. Κατεβάστε το πληκτρολογώντας:

sub0@seedbox:~$ wget -O iptables-ruleset.sh http://bit.ly/iptrs

Δείτε λίγο τα περιεχόμενά του:

sub0@seedbox:~$ cat iptables-ruleset.sh 
#!/bin/bash

iptables -F

iptables -A OUTPUT --out-interface lo -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT --out-interface eth0 --destination 192.168.0.0/16 -j ACCEPT
iptables -A OUTPUT --out-interface tun0 -j ACCEPT
iptables -A OUTPUT -j DROP

Όπως παρατηρείτε, επιτρέπουμε την έξοδο στα πακέτα που προορίζονται προς το loopback interface, σ’ εκείνα των ήδη εγκαθιδρυμένων συνδέσεων, καθώς και στα πακέτα τα οποία, μέσω του eth0, προορίζονται για άλλα μηχανήματα του τοπικού δικτύου. Επιτρέπουμε επίσης τα πακέτα που βγαίνουν έξω μέσω του tun0 interface, δηλαδή εκείνα που εξέρχονται μέσω του κρυπτογραφημένου τούνελ. Τέλος, μπλοκάρουμε όλα τα άλλα εξερχόμενα πακέτα.

Το αρχείο iptables-ruleset.sh το κάνουμε εκτελέσιμο…

sub0@seedbox:~$ chmod 755 iptables-ruleset.sh

…και το μεταφέρουμε σε έναν ωραιότατο κατάλογο, ονόματι bin, μέσα στον προσωπικό κατάλογο του χρήστη μας:

sub0@seedbox:~$ mkdir bin
sub0@seedbox:~$ mv iptables-ruleset.sh ~/bin/

Ας το εκτελέσουμε τώρα…

sub0@seedbox:~$ sudo ~/bin/iptables-ruleset.sh

…κι ας παρατηρήσουμε τους νέους κανόνες που ισχύουν:

sub0@seedbox:~$ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -d 192.168.0.0/16 -o eth0 -j ACCEPT
-A OUTPUT -o tun0 -j ACCEPT
-A OUTPUT -j DROP

Με ό,τι ισχύει, από ένα οποιοδήποτε μηχάνημα του τοπικού δικτύου θα φτάνουμε στο Seedbox — και το αντίστροφο. Με την προϋπόθεση ότι έχουμε ενεργή σύνδεση σε TorGuard server, από το Seedbox θα βγαίνουμε στο Internet μέσω tun0 — αλλά όχι μέσω eth0. Τερματίζοντας μόνοι μας τη σύνδεση VPN, π.χ., πληκτρολογώντας

sub0@seedbox:~$ sudo service openvpn stop
 * Stopping virtual private network daemon(s)...
 *   Stopping VPN 'VPNserver'

θα διαπιστώσουμε ότι η επικοινωνία του Seedbox με όλες τις άλλες δικτυωμένες συσκευές του τοπικού δικτύου θα συνεχίσει να είναι δυνατή. Καταφεύγοντας όμως σε εργαλεία όπως το ping ή το mtr, θα διαπιστώσουμε ότι η πρόσβαση στο Internet εμποδίζεται. Την ίδια διαπίστωση θα κάνουμε αν προσπαθήσουμε να κατεβάσουμε κάτι με το Transmission.

Προκειμένου να ενεργοποιήσουμε και πάλι μια σύνδεση VPN, οφείλουμε πρώτα να αδειάσουμε όλους τους κανόνες του iptables:

sub0@seedbox:~$ sudo iptables -F
sub0@seedbox:~$ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

Στη συνέχεια εγκαθιδρύουμε σύνδεση προς κάποιον TorGuard server…

sub0@seedbox:~$ sudo service openvpn start
 * Starting virtual private network daemon(s)...
 *   Autostarting VPN 'VPNserver'

…και φορτώνουμε ξανά το ruleset:

sub0@seedbox:~$ sudo ~/bin/iptables-ruleset.sh
sub0@seedbox:~$ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -d 192.168.0.0/16 -o eth0 -j ACCEPT
-A OUTPUT -o tun0 -j ACCEPT
-A OUTPUT -j DROP

Οι κανόνες είναι βολικό να ενεργοποιούνται κατά την εκκίνηση του λειτουργικού συστήματος. Ένας τρόπος για να το πετύχουμε, είναι με την εισαγωγή μιας απλής γραμμής στο αρχείο /etc/rc.local. Δείτε το δικό μας:

sub0@seedbox:~$ cat /etc/rc.local 
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/home/sub0/bin/iptables-ruleset.sh

exit 0

Η γραμμή που εισαγάγαμε είναι η τονισμένη. Αν και δεν είναι απαραίτητο, προτείνουμε να επανεκκινήσετε το λειτουργικό και κατόπιν να κάνετε μερικούς ελέγχους, ώστε να διαπιστώσετε αν όλα λειτουργούν κατά τα προβλεπόμενα.

Δοκιμές πρόσβασης στο τοπικό δίκτυο και στο Internet, με το VPN tunnel στην αρχή ενεργοποιημένο και μετά απενεργοποιημένο.

Με τη σύνδεση VPN σε TorGuard server ενεργή (1), από τη γραμμή εντολών του Seedbox μας ελέγχουμε το δημόσιο IP με το οποίο βγαίνουμε στο Internet (2). Η επικοινωνία μας εξάλλου με τον έξω κόσμο, γίνεται ανεμπόδιστα (3). Στη συνέχεια τερματίζουμε τη σύνδεση VPN (4) κι αμέσως παρατηρούμε ότι τώρα δεν μπορούμε να μάθουμε το δημόσιο IP μας, π.χ., από το icanhazip.com (5). Ούτε το ping προς το Google δουλεύει (6), μπορούμε όμως να φτάνουμε σε άλλα μηχανήματα του τοπικού μας δικτύου (7). Όλα αυτά οφείλονται στους απλούς κανόνες του iptables που έχουμε θέσει σε ισχύ: Όσο είμαστε συνδεδεμένοι σε TorGuard server στο Internet βγαίνουμε χωρίς προβλήματα, αν όμως η σύνδεση για οποιονδήποτε λόγο διακοπεί, τότε το Seedbox μας μπορεί να επικοινωνεί *μόνο* με άλλα μηχανήματα του τοπικού δικτύου.

2 Responses to “Στον αγώνα για ανέμελο torrenting, μέρος 2/3: Δημιουργία βολικού κι ασφαλούς Seedbox”

  1. moderndrummer | 26/02/2016 at 22:59

    Παιδιά εντάξει, παραγγελία ήταν αυτό το άρθρο.

    Ειδικά το τελευταίο με το IPTABLES το “ειχα πολλή ανάγκη”. Να στε καλα!

    μια παράκληση / απορία: αυτό το script μπορεί να παίξει και σε windows? windows 8 ας πούμε, υπαρχει κάποιο αντίστοιχο ruling π.χ. με το netsh?

    ευχαριστώ προκαταβολικά. Keep up the good work :)

    • subZraw | 26/02/2016 at 23:39

      Καλησπέρα,
      Θα στοιχημάτιζα ότι παρόμοια αποτελέσματα μπορούμε να πετύχουμε και σε Windows. Προσωπικά, όμως, δεν έχω την παραμικρή εμπειρία με το netsh :/

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων