ProHoster > Blog > διαχείριση > Κατασκευή δρομολογητή στο SOCKS σε φορητό υπολογιστή με Debian 10
Κατασκευή δρομολογητή στο SOCKS σε φορητό υπολογιστή με Debian 10
Για έναν ολόκληρο χρόνο (ή δύο) ανέβαλα τη δημοσίευση αυτού του άρθρου για τον κύριο λόγο - είχα ήδη δημοσιεύσει δύο άρθρα στα οποία περιέγραψα τη διαδικασία δημιουργίας ενός δρομολογητή στο SOCKS από έναν πολύ συνηθισμένο φορητό υπολογιστή με το Debian.
Ωστόσο, από τότε η σταθερή έκδοση του Debian έχει ενημερωθεί στο Buster, αρκετός αριθμός ατόμων επικοινώνησε ιδιωτικά μαζί μου ζητώντας βοήθεια με τη ρύθμιση, πράγμα που σημαίνει ότι τα προηγούμενα άρθρα μου δεν είναι εξαντλητικά. Λοιπόν, ο ίδιος μάντεψα ότι οι μέθοδοι που περιγράφονται σε αυτές δεν αποκαλύπτουν πλήρως όλες τις περιπλοκές της ρύθμισης του Linux για δρομολόγηση στο SOCKS. Επιπλέον, είναι γραμμένα για το Debian Stretch και μετά την αναβάθμιση σε Buster, στο systemd init system, παρατήρησα μικρές αλλαγές στην αλληλεπίδραση των υπηρεσιών. Και στα ίδια τα άρθρα, δεν χρησιμοποίησα το systemd-networkd, αν και είναι καταλληλότερο για πολύπλοκες διαμορφώσεις δικτύου.
Εκτός από τις παραπάνω αλλαγές, οι ακόλουθες υπηρεσίες προστέθηκαν στη διαμόρφωση μου: hostapd - υπηρεσία για εικονικοποίηση σημείου πρόσβασης, ntp για να συγχρονίσετε την ώρα των πελατών τοπικού δικτύου, dnscrypt-proxy για να κρυπτογραφήσετε συνδέσεις μέσω DNS και να απενεργοποιήσετε τη διαφήμιση σε πελάτες τοπικού δικτύου και επίσης, όπως ανέφερα προηγουμένως, systemd-networkd για τη διαμόρφωση διεπαφών δικτύου.
Εδώ είναι ένα απλό μπλοκ διάγραμμα της εσωτερικής δομής ενός τέτοιου δρομολογητή.
Λοιπόν, επιτρέψτε μου να σας υπενθυμίσω ποιοι είναι οι στόχοι αυτής της σειράς άρθρων:
Δρομολογήστε όλες τις συνδέσεις του λειτουργικού συστήματος στο SOCKS, καθώς και συνδέσεις από όλες τις συσκευές στο ίδιο δίκτυο με το φορητό υπολογιστή.
Ноутбук в моем случае должен оставаться полностью мобильным. То есть, давать возможность использовать окружение рабочего стола и не быть привязанным к физическому местуположению.
Το τελευταίο σημείο συνεπάγεται σύνδεση και δρομολόγηση μόνο μέσω της ενσωματωμένης ασύρματης διεπαφής.
Λοιπόν, και φυσικά, τη δημιουργία ενός περιεκτικού οδηγού, καθώς και μια ανάλυση των σχετικών τεχνολογιών σύμφωνα με τις μέτριες γνώσεις μου.
Τι θα καλυφθεί σε αυτό το άρθρο:
πηγαίνω — λήψη αποθετηρίων έργων tun2socksαπαιτείται για τη δρομολόγηση της κυκλοφορίας TCP προς SOCKS και δημιουργία_απ — μια δέσμη ενεργειών για την αυτοματοποίηση της ρύθμισης ενός εικονικού σημείου πρόσβασης χρησιμοποιώντας hostapd.
tun2socks — δημιουργία και εγκατάσταση της υπηρεσίας systemd στο σύστημα.
systemd-networkd — διαμόρφωση ασύρματων και εικονικών διεπαφών, στατικών πινάκων δρομολόγησης και ανακατεύθυνσης πακέτων.
δημιουργία_απ — εγκαταστήστε την υπηρεσία systemd στο σύστημα, διαμορφώστε και εκκινήστε ένα εικονικό σημείο πρόσβασης.
Προαιρετικά βήματα:
ntp — εγκαταστήστε και διαμορφώστε έναν διακομιστή για συγχρονισμό του χρόνου σε πελάτες εικονικής πρόσβασης.
dnscrypt-proxy — θα κρυπτογραφήσουμε αιτήματα DNS, θα τα δρομολογήσουμε στο SOCKS και θα απενεργοποιήσουμε τους διαφημιστικούς τομείς για το τοπικό δίκτυο.
Γιατί όλα αυτά;
Αυτός είναι ένας από τους τρόπους για να ασφαλίσετε τις συνδέσεις TCP σε ένα τοπικό δίκτυο. Το κύριο πλεονέκτημα είναι ότι όλες οι συνδέσεις γίνονται σε SOCKS, εκτός αν έχει κατασκευαστεί μια στατική διαδρομή για αυτές μέσω της αρχικής πύλης. Αυτό σημαίνει ότι δεν χρειάζεται να καθορίσετε τις ρυθμίσεις διακομιστή SOCKS είτε για μεμονωμένα προγράμματα είτε για πελάτες στο τοπικό δίκτυο - όλες πηγαίνουν στο SOCKS από προεπιλογή, καθώς είναι η προεπιλεγμένη πύλη μέχρι να υποδείξουμε το αντίθετο.
Ουσιαστικά προσθέτουμε έναν δεύτερο δρομολογητή κρυπτογράφησης ως φορητό υπολογιστή μπροστά από τον αρχικό δρομολογητή και χρησιμοποιούμε τη σύνδεση Internet του αρχικού δρομολογητή για τα ήδη κρυπτογραφημένα αιτήματα SOCKS του φορητού υπολογιστή, τα οποία με τη σειρά τους δρομολογούν και κρυπτογραφούν αιτήματα από πελάτες LAN.
Από την πλευρά του παρόχου, είμαστε συνεχώς συνδεδεμένοι σε έναν διακομιστή με κρυπτογραφημένη κίνηση.
Αντίστοιχα, όλες οι συσκευές συνδέονται στο εικονικό σημείο πρόσβασης του φορητού υπολογιστή.
Εγκαταστήστε το tun2socks στο σύστημα
Εφόσον το μηχάνημά σας έχει internet, κατεβάστε όλα τα απαραίτητα εργαλεία.
apt update
apt install git make cmake
Κατεβάστε το πακέτο badvpn
git clone https://github.com/ambrop72/badvpn
Ένας φάκελος θα εμφανιστεί στο σύστημά σας badvpn. Δημιουργήστε έναν ξεχωριστό φάκελο για την κατασκευή
--tundev - παίρνει το όνομα της εικονικής διεπαφής που αρχικοποιούμε με το systemd-networkd.
--netif-ipaddr — τη διεύθυνση δικτύου του «δρομολογητή» tun2socks στον οποίο είναι συνδεδεμένη η εικονική διεπαφή. Είναι καλύτερα να το κάνετε ξεχωριστό δεσμευμένο υποδίκτυο.
NetworkManager-wait-online είναι μια υπηρεσία που περιμένει για μια λειτουργική σύνδεση δικτύου πριν το systemd συνεχίσει να εκκινεί άλλες υπηρεσίες που εξαρτώνται από την παρουσία ενός δικτύου. Το απενεργοποιούμε καθώς μεταβαίνουμε στο σύστημα του αναλογικού δικτύου.
Ας το ενεργοποιήσουμε αμέσως:
systemctl enable systemd-networkd-wait-online
Ρυθμίστε τη διεπαφή ασύρματου δικτύου
Δημιουργήστε ένα αρχείο διαμόρφωσης systemd-networkd για τη διεπαφή ασύρματου δικτύου /etc/systemd/network/25-wlp6s0.network.
Όνομα είναι το όνομα της ασύρματης διεπαφής σας. Προσδιορίστε το με την εντολή ip a.
IPForward - μια οδηγία που επιτρέπει την ανακατεύθυνση πακέτων σε μια διεπαφή δικτύου.
Διεύθυνση είναι υπεύθυνος για την εκχώρηση διεύθυνσης IP στην ασύρματη διεπαφή. Το προσδιορίζουμε στατικά γιατί με την αντίστοιχη οδηγία DHCP=yes, το systemd-networkd δημιουργεί μια προεπιλεγμένη πύλη στο σύστημα. Στη συνέχεια, όλη η κίνηση θα περάσει από την αρχική πύλη και όχι μέσω της μελλοντικής εικονικής διεπαφής σε διαφορετικό υποδίκτυο. Μπορείτε να ελέγξετε την τρέχουσα προεπιλεγμένη πύλη με την εντολή ip r
Δημιουργήστε μια στατική διαδρομή για τον απομακρυσμένο διακομιστή SOCKS
Εάν ο διακομιστής σας SOCKS δεν είναι τοπικός, αλλά απομακρυσμένος, τότε πρέπει να δημιουργήσετε μια στατική διαδρομή για αυτόν. Για να το κάνετε αυτό, προσθέστε μια ενότητα Route στο τέλος του αρχείου διαμόρφωσης ασύρματης διεπαφής που δημιουργήσατε με το ακόλουθο περιεχόμενο:
[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
Gateway — αυτή είναι η προεπιλεγμένη πύλη ή η διεύθυνση του αρχικού σας σημείου πρόσβασης.
Destination — Διεύθυνση διακομιστή SOCKS.
Διαμόρφωση του wpa_supplicant για systemd-networkd
Το systemd-networkd χρησιμοποιεί το wpa_supplicant για σύνδεση σε ένα ασφαλές σημείο πρόσβασης. Όταν προσπαθείτε να "ανεβάσετε" την ασύρματη διεπαφή, το systemd-networkd ξεκινά την υπηρεσία wpa_supplicant@имяΌπου Όνομα είναι το όνομα της ασύρματης διεπαφής. Εάν δεν έχετε χρησιμοποιήσει το systemd-networkd πριν από αυτό το σημείο, τότε αυτή η υπηρεσία μάλλον λείπει από το σύστημά σας.
Δημιουργήστε το λοιπόν με την εντολή:
systemctl enable wpa_supplicant@wlp6s0
χρησιμοποίησα wlp6s0 όπως το όνομα της ασύρματης διεπαφής του. Το όνομά σας μπορεί να είναι διαφορετικό. Μπορείτε να το αναγνωρίσετε με την εντολή ip l.
Τώρα η υπηρεσία που δημιουργήθηκε wpa_supplicant@wlp6s0 θα ξεκινήσει όταν η ασύρματη διεπαφή "ανυψωθεί", ωστόσο, με τη σειρά της, θα αναζητήσει τις ρυθμίσεις SSID και κωδικού πρόσβασης του σημείου πρόσβασης στο αρχείο /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Επομένως, πρέπει να το δημιουργήσετε χρησιμοποιώντας το βοηθητικό πρόγραμμα wpa_passphrase.
όπου SSID είναι το όνομα του σημείου πρόσβασής σας, ο κωδικός πρόσβασης είναι ο κωδικός πρόσβασης και wlp6s0 — το όνομα της ασύρματης διεπαφής σας.
Εκκινήστε την εικονική διεπαφή για tun2socks
Δημιουργήστε ένα αρχείο για την προετοιμασία μιας νέας εικονικής διεπαφής στο σύστημα/etc/systemd/network/25-tun2socks.netdev
[NetDev]
Name=tun2socks
Kind=tun
Όνομα — это имя, которое systemd-networkd назначит будущему виртуальному интерфейсу при его инициализации.
Είδος είναι ένας τύπος εικονικής διεπαφής. Από το όνομα της υπηρεσίας tun2socks, μπορείτε να μαντέψετε ότι χρησιμοποιεί μια διεπαφή όπως tun.
netdev είναι η επέκταση των αρχείων που systemd-networkd Χρησιμοποιείται για την προετοιμασία διεπαφών εικονικού δικτύου. Η διεύθυνση και οι άλλες ρυθμίσεις δικτύου για αυτές τις διεπαφές καθορίζονται στο .δίκτυο-αρχεία.
Δημιουργήστε ένα αρχείο όπως αυτό /etc/systemd/network/25-tun2socks.network με το ακόλουθο περιεχόμενο:
Name — το όνομα της εικονικής διεπαφής που καθορίσατε netdev-файле.
Address — Διεύθυνση IP που θα εκχωρηθεί στην εικονική διεπαφή. Πρέπει να βρίσκεται στο ίδιο δίκτυο με τη διεύθυνση που ορίσατε στην υπηρεσία tun2socks
Gateway — Διεύθυνση IP του «δρομολογητή» tun2socks, που καθορίσατε κατά τη δημιουργία της υπηρεσίας systemd.
Η διεπαφή λοιπόν tun2socks έχει διεύθυνση 172.16.1.2και την υπηρεσία tun2socks - 172.16.1.1, δηλαδή είναι η πύλη για όλες τις συνδέσεις από την εικονική διεπαφή.
Ρυθμίστε ένα εικονικό σημείο πρόσβασης
Установите зависимости:
apt install util-linux procps hostapd iw haveged
Κατεβάστε το αποθετήριο δημιουργία_απ στο αυτοκίνητό σας:
git clone https://github.com/oblique/create_ap
Μεταβείτε στο φάκελο αποθετηρίου του υπολογιστή σας:
cd create_ap
Εγκατάσταση στο σύστημα:
make install
Θα εμφανιστεί μια ρύθμιση παραμέτρων στο σύστημά σας /etc/create_ap.conf. Εδώ είναι οι κύριες επιλογές επεξεργασίας:
GATEWAY=10.0.0.1 — είναι καλύτερα να το κάνετε ξεχωριστό δεσμευμένο υποδίκτυο.
NO_DNS=1 - απενεργοποιήστε, καθώς η διαχείριση αυτής της παραμέτρου θα γίνεται από την εικονική διασύνδεση του συστήματος.
NO_DNSMASQ=1 - απενεργοποιήστε το για τον ίδιο λόγο.
INTERNET_IFACE=tun2socks - μια εικονική διεπαφή που δημιουργήθηκε για tun2socks.
SSID=hostapd — όνομα του εικονικού σημείου πρόσβασης.
PASSPHRASE=12345678 - Κωδικός πρόσβασης.
Μην ξεχάσετε να ενεργοποιήσετε την υπηρεσία:
systemctl enable create_ap
Ενεργοποίηση διακομιστή DHCP στο systemd-networkd
Υπηρεσία create_ap αρχικοποιεί μια εικονική διεπαφή στο σύστημα ap0. Θεωρητικά, το dnsmasq κολλάει σε αυτήν τη διεπαφή, αλλά γιατί να εγκαταστήσετε επιπλέον υπηρεσίες εάν το systemd-networkd περιέχει έναν ενσωματωμένο διακομιστή DHCP;
Για να το ενεργοποιήσουμε, θα ορίσουμε τις ρυθμίσεις δικτύου για το εικονικό σημείο. Για να το κάνετε αυτό, δημιουργήστε ένα αρχείο /etc/systemd/network/25-ap0.network με το ακόλουθο περιεχόμενο:
Αφού η υπηρεσία create_ap προετοιμάσει την εικονική διεπαφή ap0, το systemd-networkd θα του εκχωρήσει αυτόματα μια διεύθυνση IP και θα ενεργοποιήσει τον διακομιστή DHCP.
Γραμμές EmitDNS=yes и DNS=10.0.0.1 μετάδοση ρυθμίσεων διακομιστή DNS σε συσκευές συνδεδεμένες στο σημείο πρόσβασης.
Εάν δεν σκοπεύετε να χρησιμοποιήσετε έναν τοπικό διακομιστή DNS - στην περίπτωσή μου είναι dnscrypt-proxy - μπορείτε να εγκαταστήσετε DNS=10.0.0.1 в DNS=192.168.1.1Όπου 192.168.1.1 — τη διεύθυνση της αρχικής σας πύλης. Στη συνέχεια, τα αιτήματα DNS για τον κεντρικό υπολογιστή και το τοπικό σας δίκτυο θα περάσουν χωρίς κρυπτογράφηση μέσω των διακομιστών του παρόχου.
EmitNTP=yes и NTP=192.168.1.1 μεταφορά ρυθμίσεων NTP.
Το ίδιο ισχύει και για τη γραμμή NTP=10.0.0.1.
Εγκαταστήστε και ρυθμίστε τις παραμέτρους του διακομιστή NTP
Εγκατάσταση στο σύστημα:
apt install ntp
Επεξεργαστείτε τη διαμόρφωση /etc/ntp.conf. Σχολιάστε τις διευθύνσεις των τυπικών πισινών:
Προσθέστε διευθύνσεις δημόσιων διακομιστών, για παράδειγμα Google Public NTP:
server time1.google.com ibrust
server time2.google.com ibrust
server time3.google.com ibrust
server time4.google.com ibrust
Παρέχετε πρόσβαση στον διακομιστή σε πελάτες στο δίκτυό σας:
restrict 10.0.0.0 mask 255.255.255.0
Ενεργοποίηση μετάδοσης στο δίκτυό σας:
broadcast 10.0.0.255
Τέλος, προσθέστε τις διευθύνσεις αυτών των διακομιστών στον στατικό πίνακα δρομολόγησης. Για να το κάνετε αυτό, ανοίξτε το αρχείο διαμόρφωσης ασύρματης διεπαφής /etc/systemd/network/25-wlp6s0.network και προσθέστε στο τέλος της ενότητας Route.
Μπορείτε να μάθετε τις διευθύνσεις των διακομιστών NTP χρησιμοποιώντας το βοηθητικό πρόγραμμα host ως εξής:
host time1.google.com
Εγκαταστήστε το dnscrypt-proxy, αφαιρέστε τις διαφημίσεις και αποκρύψτε την επισκεψιμότητα DNS από τον πάροχο σας
apt install dnscrypt-proxy
Чтобы обслуживать DNS запросы хоста и локальной сети, правьте сокет /lib/systemd/system/dnscrypt-proxy.socket. Αλλάξτε τις ακόλουθες γραμμές:
ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53
Επανεκκίνηση systemd:
systemctl daemon-reload
Επεξεργαστείτε τη διαμόρφωση /etc/dnscrypt-proxy/dnscrypt-proxy.toml:
server_names = ['adguard-dns']
Για να δρομολογήσετε συνδέσεις dnscrypt-proxy μέσω tun2socks, προσθέστε παρακάτω:
force_tcp = true
Επεξεργαστείτε τη διαμόρφωση /etc/resolv.conf, το οποίο ενημερώνει τον διακομιστή DNS στον κεντρικό υπολογιστή.
nameserver 127.0.0.1
nameserver 192.168.1.1
Η πρώτη γραμμή επιτρέπει τη χρήση του dnscrypt-proxy, η δεύτερη γραμμή χρησιμοποιεί την αρχική πύλη σε περίπτωση που ο διακομιστής dnscrypt-proxy δεν είναι διαθέσιμος.
Έγινε!
Επανεκκινήστε ή διακόψτε την εκτέλεση των υπηρεσιών δικτύου:
Μετά από επανεκκίνηση ή επανεκκίνηση, θα έχετε ένα δεύτερο σημείο πρόσβασης που δρομολογεί τον κεντρικό υπολογιστή και τις συσκευές LAN στο SOCKS.
Έτσι φαίνεται η έξοδος ip a обычного ноутбука:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: tun2socks: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 500
link/none
inet 172.16.1.2/24 brd 172.16.1.255 scope global tun2socks
valid_lft forever preferred_lft forever
inet6 fe80::122b:260:6590:1b0e/64 scope link stable-privacy
valid_lft forever preferred_lft forever
3: enp4s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether e8:11:32:0e:01:50 brd ff:ff:ff:ff:ff:ff
4: wlp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 4c:ed:de:cb:cf:85 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.2/24 brd 192.168.1.255 scope global wlp6s0
valid_lft forever preferred_lft forever
inet6 fe80::4eed:deff:fecb:cf85/64 scope link
valid_lft forever preferred_lft forever
5: ap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 4c:ed:de:cb:cf:86 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.1/24 brd 10.0.0.255 scope global ap0
valid_lft forever preferred_lft forever
inet6 fe80::4eed:deff:fecb:cf86/64 scope link
valid_lft forever preferred_lft forever
Ως αποτέλεσμα,
Ο πάροχος βλέπει μόνο την κρυπτογραφημένη σύνδεση με τον διακομιστή SOCKS σας, πράγμα που σημαίνει ότι δεν βλέπει τίποτα.
Και όμως βλέπει τα αιτήματά σας NTP, για να το αποτρέψετε αυτό, αφαιρέστε στατικές διαδρομές για διακομιστές NTP. Ωστόσο, δεν είναι σίγουρο ότι ο διακομιστής SOCKS σας επιτρέπει το πρωτόκολλο NTP.
Το δεκανίκι εντοπίστηκε στο Debain 10
Εάν προσπαθήσετε να επανεκκινήσετε την υπηρεσία δικτύου από την κονσόλα, θα αποτύχει με ένα σφάλμα. Αυτό οφείλεται στο γεγονός ότι μέρος του με τη μορφή εικονικής διεπαφής συνδέεται με την υπηρεσία tun2socks, που σημαίνει ότι χρησιμοποιείται. Για να επανεκκινήσετε την υπηρεσία δικτύου, πρέπει πρώτα να διακόψετε την υπηρεσία tun2socks. Αλλά, νομίζω, αν διαβάσετε μέχρι το τέλος, αυτό σίγουρα δεν είναι πρόβλημα για εσάς!