Das ganze Jahr (oder zwei) habe ich die Veröffentlichung dieses Artikels aufgeschoben, weil ich bereits zwei Artikel veröffentlicht habe, in denen ich den Prozess der Erstellung eines SOCKS-Routers aus einem ganz normalen Laptop mit Debian beschrieben habe.
Seitdem ist die stabile Version von Debian auf Buster aktualisiert worden, und ich habe genug Anfragen in meinem persönlichen Postfach erhalten, um bei der Einrichtung zu helfen. Das bedeutet, dass meine vorherigen Artikel nicht vollstĂ€ndig sind. Ich hĂ€tte es mir gedacht, dass die in ihnen beschriebenen Methoden alle Feinheiten der Linux-Einrichtung fĂŒr die SOCKS-Routing nicht vollstĂ€ndig abdecken. AuĂerdem sind sie fĂŒr Debian Stretch geschrieben, und nach dem Update auf Buster habe ich kleine Ănderungen im Dienstmanagement unter systemd bemerkt. In meinen Artikeln habe ich zudem systemd-networkd nicht verwendet, obwohl sie sich am besten fĂŒr komplexe Netzwerk-Konfigurationen eignet.
ZusĂ€tzlich zu den genannten Ănderungen habe ich meiner Konfiguration folgende Dienste hinzugefĂŒgt: hostapd â Dienst fĂŒr die Virtualisierung des Zugangspunktes, ntp zur Zeit-Synchronisation der Clients im lokalen Netzwerk, dnscrypt-proxy zum VerschlĂŒsseln von Verbindungen ĂŒber das DNS-Protokoll und zur Deaktivierung von Werbung auf GerĂ€ten im lokalen Netzwerk, sowie, wie bereits erwĂ€hnt, systemd-networkd zur Konfiguration von Netzwerkinterfaces.
Hier ist ein einfaches Blockdiagramm der internen Struktur eines solchen Routers.

Ich möchte daher die Ziele, die dieser Artikelzyklus verfolgt, erneut in Erinnerung rufen:
- Alle Verbindungen des Betriebssystems sowie die Verbindungen aller GerĂ€te, die mit dem Laptop in einem Netzwerk verbunden sind, ĂŒber SOCKS zu leiten.
- Der Laptop muss in meinem Fall vollstĂ€ndig mobil bleiben. Das heiĂt, er sollte die Nutzung der Desktop-Umgebung ermöglichen und nicht an einen festen Standort gebunden sein.
- Der letzte Punkt beinhaltet eine Verbindung und das Routing ausschlieĂlich ĂŒber das integrierte WLAN-Interface.
- Und natĂŒrlich die Erstellung eines umfassenden Leitfadens sowie die Erörterung der entsprechenden Technologien in dem Umfang meiner bescheidenen Kenntnisse.
In diesem Artikel werden wir folgendes behandeln:
- git â die Repositories der Projekte herunterladen tun2socks, notwendig fĂŒr das Routing von TCP-Datenverkehr zu SOCKS, und create_ap â ein Skript zur Automatisierung der Konfiguration eines virtuellen Access Points mit Hilfe von hostapd.
- tun2socks â wir werden den systemd-Dienst im System erstellen und installieren.
- systemd-networkd â Wir richten drahtlose und virtuelle Schnittstellen, statische Routing-Tabellen und Paketweiterleitungen ein.
- create_ap â Wir installieren den Systemdienst systemd, konfigurieren und starten den virtuellen Zugangspunkt.
Optionale Schritte:
- ntp â Wir installieren und konfigurieren einen Zeit-Synchronisationsserver fĂŒr die Clients des virtuellen Zugangspunkts.
- dnscrypt-proxy â Wir verschlĂŒsseln DNS-Anfragen, leiten sie ĂŒber SOCKS und deaktivieren Werbedomains im lokalen Netzwerk.
Warum das alles?
Das ist eine Möglichkeit, den Schutz von TCP-Verbindungen im lokalen Netzwerk zu organisieren. Der Hauptvorteil ist, dass alle Verbindungen ĂŒber SOCKS gehen, es sei denn, es gibt eine statische Route ĂŒber das ursprĂŒngliche Gateway. Das bedeutet, dass SOCKS-Server-Einstellungen nicht separat fĂŒr Programme oder Clients im lokalen Netzwerk konfiguriert werden mĂŒssen â sie gehen standardmĂ€Ăig ĂŒber SOCKS, da dieser das Standardgateway ist, bis wir etwas anderes angeben.
Im Grunde fĂŒgen wir einen zweiten verschlĂŒsselnden Router in Form eines Laptops vor dem ursprĂŒnglichen Router hinzu und nutzen die Internetverbindung des originalen Routers fĂŒr bereits verschlĂŒsselte SOCKS-Anfragen des Laptops, der wiederum die Anfragen der Netzwerkclients routet und verschlĂŒsselt.
Aus Sicht des Anbieters sind wir stĂ€ndig mit einem Server verbunden, der verschlĂŒsselten Datenverkehr hat.
Demnach verbinden sich alle GerÀte mit dem virtuellen Zugangspunkt des Laptops.
Installieren Sie tun2socks im System.
Solange Ihre Maschine Internet hat, laden Sie alle benötigten Werkzeuge herunter.
apt updateapt install git make cmakeLaden Sie das Paket badvpn herunter.
git clone https://github.com/ambrop72/badvpn
In Ihrem System wird ein Ordner erscheinen. badvpn. Erstellen Sie einen separaten Ordner fĂŒr den Build.
mkdir badvpn-build
Wechseln Sie in diesen Ordner.
cd badvpn-build
Bauen Sie es. tun2socks
cmake ../badvpn -DBUILD_NOTHING_BY_DEFAULT=1 -DBUILD_TUN2SOCKS=1
Installieren Sie im System.
make install
- Parameter
-DBUILD_NOTHING_BY_DEFAULT=1deaktiviert den Build aller Komponenten des badvpn-Repositories. - â
DBUILD_TUN2SOCKS=1aktiviert den Build der Komponente. tun2socks. make installâ wird das Binary tun2socks in Ihr System unter der Adresse installieren./usr/local/bin/badvpn-tun2socks.
Installieren Sie den Dienst tun2socks in systemd.
aufrufen können. /etc/systemd/system/tun2socks.service mit folgendem Inhalt:
[Unit]
Description=SOCKS TCP Relay
[Service]
ExecStart=/usr/local/bin/badvpn-tun2socks --tundev tun2socks --netif-ipaddr 172.16.1.1 --netif-netmask 255.255.255.0 --socks-server-addr 127.0.0.1:9050
[Install]
WantedBy=multi-user.target
--tundevâ akzeptiert den Namen des virtuellen Interfaces, das wir mit systemd-networkd initialisieren.--netif-ipaddrâ die Netzwerkadresse des "Routers" tun2socks, mit dem das virtuelle Interface verbunden ist. Es ist besser, dies in einem separaten .--socks-server-addrâ akzeptiert den Socket (Adresse:Portdes SOCKS-Servers).
Wenn Ihr SOCKS-Server eine Authentifizierung erfordert, können Sie die Parameter angeben --username und --password.
Registrieren Sie dann den Dienst
systemctl daemon-reloadUnd aktivieren Sie
systemctl enable tun2socksBevor Sie den Dienst starten, stellen wir sicher, dass er ĂŒber das virtuelle Netzwerkinterface verfĂŒgt.
Wechseln Sie zu systemd-networkd
Aktivieren wir systemd-networkd:
systemctl enable systemd-networkdDeaktivieren Sie die aktuellen Netzwerkdienste.
systemctl disable networking NetworkManager NetworkManager-wait-online- NetworkManager-wait-online â ist ein Dienst, der auf eine aktive Netzwerkverbindung wartet, bevor systemd mit dem Start anderer Dienste fortfĂ€hrt, die von der Netzwerkanbindung abhĂ€ngen. Wir deaktivieren ihn, da wir zu dem Ăquivalent systemd-networkd wechseln werden.
Lassen Sie uns dies sofort aktivieren:
systemctl enable systemd-networkd-wait-onlineKonfigurieren Sie das drahtlose Netzwerkinterface
Erstellen Sie eine Konfigurationsdatei fĂŒr systemd-networkd fĂŒr das drahtlose Netzwerkinterface /etc/systemd/network/25-wlp6s0.network.
[Match]
Name=wlp6s0
[Network]
Address=192.168.1.2/24
IPForward=yes
- Name â das ist der Name Ihres drahtlosen Interfaces. Identifizieren Sie es mit dem Befehl
ip a. - IPForward â ist eine Direktive, die das Weiterleiten von Paketen ĂŒber ein Netzwerk-Interface aktiviert.
- Adresse ist verantwortlich fĂŒr die Zuweisung der IP-Adresse an das drahtlose Interface. Wir legen es statisch fest, weil bei einer entsprechenden Direktive
DHCP=yes, erstellt systemd-networkd in Ihrem System ein Standardgateway. Dann wird der gesamte Verkehr ĂŒber das ursprĂŒngliche Gateway geleitet und nicht ĂŒber das zukĂŒnftige virtuelle Interface im anderen Subnetz. Sie können das aktuelle Standardgateway mit dem Befehl ĂŒberprĂŒfenip r
Erstellen Sie eine statische Route zum entfernten SOCKS-Server
Wenn Ihr SOCKS-Server nicht lokal, sondern remote ist, mĂŒssen Sie eine statische Route dafĂŒr erstellen. FĂŒgen Sie dazu einen Abschnitt hinzu Route am Ende der von Ihnen erstellten Konfigurationsdatei fĂŒr das drahtlose Interface mit folgendem Inhalt hinzu:
[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
Gatewayâ ist das Standardgateway oder die Adresse Ihres ursprĂŒnglichen Zugangspunktes.Zielâ die Adresse des SOCKS-Servers.
Konfigurieren Sie wpa_supplicant fĂŒr systemd-networkd
systemd-networkd verwendet wpa_supplicant, um sich mit einem gesicherten Zugangspunkt zu verbinden. Wenn der drahtlose Interface von systemd-networkd "hochgefahren" wird, startet es den Dienst. wpa_supplicant@Name, wobei Name â ist der Name des drahtlosen Interfaces. Wenn Sie bis jetzt noch systemd-networkd verwendet haben, wird dieser Dienst wahrscheinlich nicht auf Ihrem System vorhanden sein.
Erstellen Sie ihn daher mit dem Befehl:
systemctl enable wpa_supplicant@wlp6s0Ich habe verwendet wlp6s0 als Name fĂŒr Ihr drahtloses Interface. Ihr Name kann jedoch davon abweichen. Sie können ihn mit dem Befehl herausfinden ip l.
Jetzt wird der erstellte Dienst wpa_supplicant@wlp6s0 beim âHochfahrenâ des drahtlosen Interfaces gestartet, sucht jedoch gleichzeitig die SSID- und Passwort-Einstellungen des Access Points in der Datei /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Daher ist es notwendig, ihn mit dem Dienstprogramm wpa_passphrase.
zu erstellen. FĂŒhren Sie dazu den Befehl aus:
wpa_passphrase SSID password > /etc/wpa_supplicant/wpa_supplicant-wlp6s0.confwobei SSID â ist der Name Ihres Access Points, password â das Passwort, und wlp6s0 â ist der Name Ihres drahtlosen Interfaces.
Initialisieren Sie das virtuelle Interface fĂŒr tun2socks
Erstellen Sie eine Datei zur Initialisierung des neuen virtuellen Interfaces im System/etc/systemd/network/25-tun2socks.netdev
[NetDev]
Name=tun2socks
Kind=tun
- Name â ist der Name, den systemd-networkd dem zukĂŒnftigen virtuellen Interface bei seiner Initialisierung zuweisen wird.
- Kind â ist eine Art virtueller Schnittstelle. Aus dem Namen des Dienstes tun2socks können Sie schlieĂen, dass er eine Schnittstelle vom Typ verwendet.
tun. - netdev â ist eine Erweiterung von Dateien, die
systemd-networkdzum Initialisieren virtueller Netzwerkinterfaces verwendet werden. Die Adresse und andere Netzwerkeinstellungen fĂŒr diese Interfaces sind in .network-Dateien.
Erstellen Sie eine solche Datei /etc/systemd/network/25-tun2socks.network mit folgendem Inhalt:
[Match]
Name=tun2socks
[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
Nameâ der Name des virtuellen Interfaces, den Sie in netdev- der Datei angegeben haben.Adresseâ die IP-Adresse, die dem virtuellen Interface zugewiesen wird. Muss im selben Netzwerk wie die Adresse sein, die Sie im Dienst tun2socks angegeben haben.Gatewayâ die IP-Adresse des âRoutersâ tun2socks, die Sie bei der Erstellung des systemd-Dienstes angegeben haben.
Somit hat das Interface tun2socks die Adresse 172.16.1.2, und der Dienst tun2socks â 172.16.1.1, also fungiert es als Gateway fĂŒr alle Verbindungen vom virtuellen Interface.
Richten Sie den virtuellen Access Point ein
Installieren Sie die AbhÀngigkeiten:
apt install util-linux procps hostapd iw havegedLaden Sie das Repository herunter create_ap auf Ihren Rechner:
git clone https://github.com/oblique/create_apWechseln Sie in das Verzeichnis des Repositories auf Ihrem Computer:
cd create_apInstallieren Sie es im System:
make installIn Ihrem System wird eine Konfiguration erscheinen /etc/create_ap.conf. Hier sind die wichtigsten Optionen zum Bearbeiten:
GATEWAY=10.0.0.1â es ist besser, ein separates reserviertes Subnetz zu erstellen.NO_DNS=1â deaktivieren Sie dies, da dieser Parameter vom virtuellen Interface systemd-networkd verwaltet wird.NO_DNSMASQ=1â deaktivieren Sie dies aus demselben Grund.WIFI_IFACE=wlp6s0â der drahtlose Interface des Laptops.INTERNET_IFACE=tun2socksâ das virtuelle Interface, das fĂŒr tun2socks erstellt wurde.SSID=hostapdâ der Name des virtuellen Access Points.PASSPHRASE=12345678â das Passwort.
Vergessen Sie nicht, den Dienst zu aktivieren:
systemctl enable create_apAktivieren Sie den DHCP-Server in systemd-networkd
Der Dienst create_ap initiiert in dem System das virtuelle Interface ap0. Idealerweise wÀre dnsmasq an diesem Interface "angebunden", aber warum unnötige Dienste installieren, wenn systemd-networkd einen integrierten DHCP-Server enthÀlt?
Um ihn zu aktivieren, definieren wir die Netzwerkeinstellungen fĂŒr den virtuellen Punkt. Dazu erstellen Sie eine Datei /etc/systemd/network/25-ap0.network mit folgendem Inhalt:
[Match]
Name=ap0
[Network]
Address=10.0.0.1/24
DHCPServer=yes
[DHCPServer]
EmitDNS=yes
DNS=10.0.0.1
EmitNTP=yes
NTP=10.0.0.1
Nachdem der Dienst create_ap das virtuelle Interface initialisiert hat ap0, wird systemd-networkd ihm automatisch eine IP-Adresse zuweisen und den DHCP-Server aktivieren.
Zeilen EmitDNS=yes und DNS=10.0.0.1 ĂŒbertragen die Einstellungen des DNS-Servers an die GerĂ€te, die mit dem Access Point verbunden sind.
Wenn Sie keinen lokalen DNS-Server - in meinem Fall dnscrypt-proxy - verwenden möchten, können Sie installieren DNS=10.0.0.1 in DNS=192.168.1.1, wobei 192.168.1.1 â die Adresse Ihres ursprĂŒnglichen Gateways. Dann werden die DNS-Anfragen Ihres Hosts und des lokalen Netzwerks unverschlĂŒsselt ĂŒber die Server des Providers geleitet.
EmitNTP=yes und NTP=192.168.1.1 Ăbertragen Sie die NTP-Konfiguration.
Das Gleiche gilt fĂŒr die Zeile NTP=10.0.0.1.
Richten Sie den NTP-Server ein und konfigurieren Sie ihn
Installieren Sie es im System:
apt install ntp
Bearbeiten Sie die Konfiguration /etc/ntp.conf. Kommentieren Sie die Adressen der Standard-Pools aus:
#pool 0.debian.pool.ntp.org iburst
#pool 1.debian.pool.ntp.org iburst
#pool 2.debian.pool.ntp.org iburst
#pool 3.debian.pool.ntp.org iburst
FĂŒgen Sie die Adressen der öffentlichen Server hinzu, zum Beispiel Google Public NTP:
server time1.google.com iburst
server time2.google.com iburst
server time3.google.com iburst
server time4.google.com iburst
GewÀhren Sie Benutzern aus Ihrem Netzwerk Zugang zum Server:
restrict 10.0.0.0 mask 255.255.255.0
Aktivieren Sie das Broadcasting in Ihrem Netzwerk:
broadcast 10.0.0.255
FĂŒgen Sie schlieĂlich die Adressen dieser Server in die Tabelle der statischen Routen ein. Ăffnen Sie dazu die Konfigurationsdatei der drahtlosen Schnittstelle /etc/systemd/network/25-wlp6s0.network und fĂŒgen Sie am Ende des Abschnitts hinzu Route.
[Route]
Gateway=192.168.1.1
Destination=216.239.35.0
[Route]
Gateway=192.168.1.1
Destination=216.239.35.4
[Route]
Gateway=192.168.1.1
Destination=216.239.35.8
[Route]
Gateway=192.168.1.1
Destination=216.239.35.12Sie können die Adressen Ihrer NTP-Server mit dem Dienstprogramm host $ ../..../waf ...
host time1.google.comInstallieren Sie dnscrypt-proxy, entfernen Sie Werbung und verbergen Sie den DNS-Verkehr vor dem Provider.
apt install dnscrypt-proxyUm DNS-Anfragen fĂŒr den Host und das lokale Netzwerk zu bedienen, passen Sie den Socket an. /lib/systemd/system/dnscrypt-proxy.socket. Ăndern Sie die folgenden Zeilen:
ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53Starten Sie neu. systemd:
systemctl daemon-reloadBearbeiten Sie die Konfiguration /etc/dnscrypt-proxy/dnscrypt-proxy.toml:
server_names = ['adguard-dns']
Um die Verbindungen von dnscrypt-proxy ĂŒber tun2socks zu leiten, fĂŒgen Sie Folgendes hinzu:
force_tcp = true
Bearbeiten Sie die Konfiguration /etc/resolv.conf, was dem DNS-Server mitteilt, der den Host bearbeitet.
nameserver 127.0.0.1
nameserver 192.168.1.1Die erste Zeile aktiviert die Nutzung von dnscrypt-proxy, die zweite verwendet das ursprĂŒngliche Gateway fĂŒr den Fall, dass der dnscrypt-proxy-Server nicht verfĂŒgbar ist.
Fertig!
Starten Sie neu oder stoppen Sie die aktiven Netzwerkdienste:
systemctl stop networking NetworkManager NetworkManager-wait-onlineUnd starten Sie alle notwendigen Dienste neu:
systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntpNach dem Neustart oder der Wiederherstellung haben Sie einen zweiten Access Point, der den Host und die GerĂ€te im lokalen Netzwerk ĂŒber SOCKS weiterleitet.
So sieht der Output aus ip a eines gewöhnlichen Laptops aus:
1: lo: 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: 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: 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: 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: 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
Insgesamt
- Der Anbieter sieht nur die verschlĂŒsselte Verbindung zu Ihrem SOCKS-Server und kann daher nichts einsehen.
- Er sieht jedoch Ihre NTP-Anfragen. Um dies zu verhindern, entfernen Sie die statischen Routen zu den NTP-Servern. Allerdings ist es ungewiss, ob Ihr SOCKS-Server das NTP-Protokoll erlaubt.
Ein Workaround, der bei Debian 10 aufgefallen ist
Versuchen Sie, den Netzwerkdienst ĂŒber die Konsole neu zu starten, wird er mit einem Fehler abstĂŒrzen. Das liegt daran, dass ein Teil davon in Form eines virtuellen Interfaces an den Dienst tun2socks gebunden ist und somit verwendet wird. Um den Netzwerkdienst neu zu starten, muss zunĂ€chst der Dienst tun2socks gestoppt werden. Aber ich denke, wenn Sie bis hierher gelesen haben, ist das fĂŒr Sie sicher kein Problem!
Links
Quelle: habr.com
