Erstellen eines Routers in SOCKS auf einem Laptop mit Debian 10

Für ein ganzes Jahr (oder zwei) habe ich die Veröffentlichung dieses Artikels aus dem Hauptgrund verschoben - ich habe bereits zwei Artikel veröffentlicht, in denen ich den Prozess des Erstellens eines Routers in SOCKS von einem normalen Laptop mit Debian beschrieben habe.

Seitdem die stabile Version von Debian auf Buster aktualisiert wurde, hat mir eine ausreichende Anzahl von Personen eine persönliche Anfrage zur Unterstützung bei der Konfiguration gesendet, was bedeutet, dass meine vorherigen Artikel nicht vollständig sind. Nun, ich selbst habe vermutet, dass die darin beschriebenen Methoden nicht alle Feinheiten der Konfiguration von Linux für das Routing in SOSKS vollständig enthüllten. Außerdem wurden sie für Debian Stretch geschrieben, und nach dem Upgrade auf Buster im Systemd-Initialisierungssystem stellte ich kleine Änderungen in der Interaktion der Dienste fest. Ja, und in den Artikeln selbst habe ich systemd-networkd nicht verwendet, obwohl es am besten für komplexe Netzwerkkonfigurationen geeignet ist.

Zusätzlich zu den oben genannten Änderungen wurden meiner Konfiguration Dienste wie hostapd hinzugefügt - ein Dienst für die Virtualisierung von Zugriffspunkten, ntp zum Synchronisieren der Zeit lokaler Netzwerkclients, dnscrypt-proxy zum Verschlüsseln von DNS-Verbindungen und Deaktivieren der Werbung auf lokalen Netzwerkclients sowie, wie bereits erwähnt zuvor systemd-networkd zum Konfigurieren von Netzwerkschnittstellen.

Hier ist das einfachste Blockdiagramm der internen Struktur eines solchen Routers.



Daher erinnere ich Sie daran, welche Ziele der Zyklus dieser Artikel verfolgt:

  1. Leiten Sie alle Betriebssystemverbindungen an SOCKS sowie die Verbindungen aller Geräte weiter, die sich im selben Netzwerk wie der Laptop befinden.
  2. Der Laptop in meinem Fall sollte voll mobil bleiben. Dies bedeutet, dass Sie die Möglichkeit haben, die Desktop-Umgebung zu verwenden und nicht an einen physischen Standort gebunden zu sein.
  3. Der letzte Punkt betrifft das Verbinden und Weiterleiten nur über die integrierte drahtlose Schnittstelle.
  4. Natürlich die Erstellung eines umfassenden Leitfadens sowie die Analyse geeigneter Technologien nach bestem Wissen und Gewissen.

Was wird in diesem Artikel berücksichtigt:

  1. git - download die tun2socks Projekt - Repositories zu routen TCP - Datenverkehr zu SOCKS benötigt, und create_ap - ein Skript , das die Konfiguration eines virtuellen Access Point automatisieren hostapd .
  2. tun2socks - Erstellen und installieren Sie den systemd- Dienst auf dem System .
  3. systemd-networkd - Konfigurieren Sie drahtlose und virtuelle Schnittstellen, statische Routing-Tabellen und Paketweiterleitung.
  4. create_ap - Installieren Sie den systemd-Dienst auf dem System, konfigurieren Sie den virtuellen Zugriffspunkt und starten Sie ihn.

Optionale Schritte:

  • ntp - Installieren und konfigurieren Sie den Server so, dass die Zeit auf den Clients des virtuellen Zugriffspunkts synchronisiert wird.
  • dnscrypt-proxy - verschlüsselt DNS-Abfragen, leitet sie an SOCKS weiter und deaktiviert Werbedomänen für das lokale Netzwerk.

Warum das alles?


Dies ist eine Möglichkeit, TCP-Verbindungen in einem lokalen Netzwerk zu sichern. Der Hauptvorteil besteht darin, dass alle Verbindungen zu SOCKS gehen, wenn für sie keine statische Route durch das ursprüngliche Gateway erstellt wurde. Dies bedeutet, dass es nicht erforderlich ist, die Einstellungen des SOCKS-Servers einzelnen Programmen oder Clients im lokalen Netzwerk vorzuschreiben. Alle gehen standardmäßig zu SOCKS, da dies das Standard-Gateway ist, bis wir das Gegenteil angeben.

Tatsächlich fügen wir den zweiten Verschlüsselungsrouter als Laptop vor dem ursprünglichen Router hinzu und verwenden die Internetverbindung des ursprünglichen Routers für die bereits verschlüsselten SOCKS-Anforderungen des Laptops, die wiederum die Anforderungen der lokalen Netzwerkclients weiterleiten und verschlüsseln.

Aus Sicht des Anbieters sind wir mit verschlüsseltem Datenverkehr ständig mit demselben Server verbunden.

Dementsprechend stellen alle Geräte eine Verbindung zum virtuellen Zugangspunkt eines Laptops her.

Bevor du anfängst


Fast alle Konfigurationen sind im Repository verfügbar .

Installieren Sie tun2socks im System


Laden Sie alle erforderlichen Tools herunter, solange Sie über Internet auf Ihrem Computer verfügen.

apt update

apt install git make cmake

Laden Sie das badvpn-Paket herunter
git clone https://github.com/ambrop72/badvpn

Der badvpn- Ordner wird auf Ihrem System angezeigt . Erstellen Sie einen separaten Build-Ordner

mkdir badvpn-build

Geh zu ihr

cd badvpn-build

Erstellen Sie tun2socks

cmake ../badvpn -DBUILD_NOTHING_BY_DEFAULT=1 -DBUILD_TUN2SOCKS=1

Auf dem System installieren

make install

  • Der Parameter -DBUILD_NOTHING_BY_DEFAULT = 1 deaktiviert die Assemblierung aller Komponenten des badvpn- Repositorys .
  • DBUILD_TUN2SOCKS = 1 enthält tun2socks- Komponenten in der Assembly .
  • make install - Installiert die tun2socks- Binärdatei auf Ihrem System unter / usr / local / bin / badvpn-tun2socks.

Installieren Sie den Dienst tun2socks in systemd


Erstellen Sie die Datei /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 der virtuellen Schnittstelle, die wir mit systemd-networkd initialisieren .
  • --netif-ipaddr - Netzwerkadresse der "Router" tun2socks, mit denen die virtuelle Schnittstelle verbunden ist. Es ist besser, ein separates reserviertes Subnetz zu erstellen .
  • --socks-server-addr - akzeptiert einen Socket ( Adresse: SOCKS-Server- Port ).

Wenn Ihr SOCKS-Server eine Authentifizierung erfordert, können Sie die Parameter --username und --password angeben .

Registrieren Sie als Nächstes den Dienst

systemctl daemon-reload

Und einschalten

systemctl enable tun2socks

Bevor wir den Dienst starten, stellen wir ihm eine virtuelle Netzwerkschnittstelle zur Verfügung.

Gehen Sie zu systemd-networkd


Aktivieren Sie systemd-networkd :

systemctl enable systemd-networkd

Deaktivieren Sie die aktuellen Netzwerkdienste.

systemctl disable networking NetworkManager NetworkManager-wait-online

  • NetworkManager-wait-online ist ein Dienst, der auf eine funktionierende Netzwerkverbindung wartet, bevor systemd weiterhin andere vom Netzwerk abhängige Dienste startet. Wir deaktivieren es, wenn wir zum analogen Systemd-Netzwerk wechseln .

Lassen Sie es uns sofort einschalten:

systemctl enable systemd-networkd-wait-online

Richten Sie eine drahtlose Netzwerkschnittstelle ein


Erstellen Sie eine systemd-networkd- Konfigurationsdatei für die drahtlose Netzwerkschnittstelle /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPMasquerade=yes

  • Name ist der Name Ihrer drahtlosen Schnittstelle. Identifizieren Sie es mit dem Befehl ip a .
  • IPMasquerade ist eine Richtlinie, die folgenden beinhaltet Masquerading und Paketweiterleitung auf einer Netzwerk - Schnittstelle.
  • Die Adresse ist für die Zuweisung einer IP-Adresse zur drahtlosen Schnittstelle verantwortlich. Wir geben es statisch , weil mit der entsprechenden Richtlinie DHCP = yes , systemd-NetworkD einen Standard - Gateway im System erstellt. Dann wird der gesamte Datenverkehr über das ursprüngliche Gateway und nicht über die zukünftige virtuelle Schnittstelle in einem hervorragenden Subnetz geleitet. Sie können das aktuelle Standard-Gateway mit dem Befehl überprüfen
    ip r

Erstellen Sie eine statische Route für den Remote-SOCKS-Server


Wenn Ihr SOCKS-Server nicht lokal, sondern remote ist, müssen Sie eine statische Route dafür erstellen. Fügen Sie dazu den Abschnitt Route am Ende der von Ihnen erstellten WLAN-Konfigurationsdatei mit den folgenden Inhalten hinzu:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0

  • Gateway ist das Standard-Gateway oder die Standardadresse Ihres ursprünglichen Zugriffspunkts.
  • Ziel - SOCKS-Serveradresse.

Konfigurieren Sie wpa_supplicant für systemd-networkd


systemd-networkd verwendet wpa_supplicant , um eine Verbindung zu einem sicheren Zugriffspunkt herzustellen . Wenn Sie versuchen, die drahtlose Schnittstelle zu "erhöhen", startet systemd-networkd den Dienst wpa_supplicant @ name , wobei name der Name der drahtlosen Schnittstelle ist. Wenn Sie systemd-networkd vor diesem Zeitpunkt noch nicht verwendet haben , ist dieser Dienst auf Ihrem System mit Sicherheit nicht verfügbar.

Erstellen Sie es daher mit dem folgenden Befehl:

systemctl enable wpa_supplicant@wlp6s0

Ich habe wlp6s0 als Namen für meine drahtlose Schnittstelle verwendet. Ihr Name kann anders sein. Sie können von seinem Team herausfinden
ip l
.

Jetzt wird der erstellte Dienst wpa_supplicant @ wlp6s0 gestartet, wenn die drahtlose Schnittstelle "aufgehoben" wird. Er sucht jedoch wiederum nach der SSID und dem Kennwort des Zugriffspunkts in der Datei / etc / wpa_supplicant / wpa_supplicant-wlp6s0 . Daher müssen Sie es mit dem Dienstprogramm wpa_passphrase erstellen .

Führen Sie dazu den folgenden Befehl aus:

wpa_passphrase SSID password>/etc/wpa_supplicant/wpa_supplicant-wlp6s0.conf

Dabei ist SSID der Name Ihres Zugangspunkts, Kennwort das Kennwort und wlp6s0 der Name Ihrer drahtlosen Schnittstelle.

Initialisieren Sie die virtuelle Schnittstelle für tun2socks


Erstellen Sie eine Datei, um eine neue virtuelle Schnittstelle im System /etc/systemd/network/25-tun2socks.netdev zu initialisieren

[NetDev]
Name=tun2socks
Kind=tun

  • Name ist der Name, den systemd-networkd der zukünftigen virtuellen Schnittstelle bei der Initialisierung zuweist.
  • Art ist eine Art virtuelle Schnittstelle. Anhand des Namens des Dienstes tun2socks können Sie davon ausgehen, dass er eine Schnittstelle wie tun verwendet .
  • netdev ist die Dateierweiterung, mit der systemd-networkd virtuelle Netzwerkschnittstellen initialisiert. Die Adresse und andere Netzwerkeinstellungen für diese Schnittstellen sind in .network- Dateien angegeben.

Erstellen Sie eine Datei /etc/systemd/network/25-tun2socks.network mit den folgenden Inhalten:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1

  • Name - Der Name der virtuellen Schnittstelle, die Sie in der netdev- Datei angegeben haben.
  • Adresse - IP-Adresse, die der virtuellen Schnittstelle zugewiesen werden soll. Muss sich im selben Netzwerk befinden wie die Adresse, die Sie in tun2socks angegeben haben
  • Gateway - Die IP-Adresse der tun2socks des Routers , die Sie beim Erstellen des systemd- Dienstes angegeben haben .

Somit hat die tun2socks- Schnittstelle die Adresse 172.16.1.2 , und der tun2socks- Dienst lautet 172.16.1.1 , dh er ist das Gateway für alle Verbindungen von der virtuellen Schnittstelle.

Konfigurieren Sie einen virtuellen Zugangspunkt


Installieren Sie die Abhängigkeiten:

apt install util-linux procps hostapd iw haveged

Laden Sie das Repository create_ap auf Ihren Computer herunter :

git clone https://github.com/oblique/create_ap

Wechseln Sie zum Repository-Ordner auf Ihrem Computer:

cd create_ap

Im System installieren:

make install

Die Konfiguration /etc/create_ap.conf wird auf Ihrem System angezeigt . Hier sind die wichtigsten Optionen zum Bearbeiten:

  • GATEWAY = 10.0.0.1 - Es ist besser, ein separates reserviertes Subnetz zu erstellen .
  • NO_DNS = 1 - ausschalten, da dieser Parameter von der virtuellen System-Netzwerk-Schnittstelle gesteuert wird.
  • NO_DNSMASQ = 1 - aus demselben Grund ausschalten.
  • WIFI_IFACE = wlp6s0 - drahtlose Schnittstelle des Laptops.
  • INTERNET_IFACE = tun2socks> - Virtuelle Schnittstelle für tun2socks erstellt .
  • SSID = hostapd - Name des virtuellen Zugangspunkts.
  • PASSPHRASE = 12345678 - Passwort.

Denken Sie daran, den Dienst zu aktivieren:

systemctl enable create_ap

Aktivieren Sie den DHCP-Server in systemd-networkd


Der Dienst create_ap initialisiert die virtuelle Schnittstelle ap0 auf dem System . Theoretisch hängt dnsmasq an dieser Schnittstelle , aber warum zusätzliche Dienste installieren, wenn systemd-networkd einen integrierten DHCP-Server enthält?

Definieren Sie zum Aktivieren die Netzwerkeinstellungen für den virtuellen Punkt. Erstellen Sie dazu die 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 sreate_ap virtuelle Schnittstelle initialisiert AP0 , systemd-NetworkD automatisch eine IP-Adresse zuweisen und den DHCP-Server aktivieren.

Die Zeilen EmitDNS = yes und DNS = 10.0.0.1 übergeben die DNS- Servereinstellungen an Geräte, die mit dem Access Point verbunden sind.

Wenn Sie nicht vorhaben, einen lokalen DNS-Server zu verwenden - in meinem Fall handelt es sich um dnscrypt-proxy -, können Sie DNS = 10.0.0.1 auf DNS = 192.168.1.1 setzen , wobei 192.168.1.1 die Adresse Ihres ursprünglichen Gateways ist. Dann werden die DNS-Abfragen Ihres Hosts und Ihres lokalen Netzwerks über die Server des Anbieters unverschlüsselt.

EmitNTP = jaund NTP = 192.168.1.1 übertragen die NTP-Einstellungen.

Gleiches gilt für die Zeile NTP = 10.0.0.1 .

Installieren und konfigurieren Sie den NTP-Server


Im System installieren:

apt install ntp

Bearbeiten Sie die Konfiguration /etc/ntp.conf . Kommentieren Sie die Adressen von Standardpools 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 öffentlicher Server hinzu, z. B. Google Public NTP:

server time1.google.com ibrust
server time2.google.com ibrust
server time3.google.com ibrust
server time4.google.com ibrust

Gewähren Sie Clients aus Ihrem Netzwerk Zugriff auf den Server:

restrict 10.0.0.0 mask 255.255.255.0

Verwandeln Sie die Sendung in Ihr Netzwerk:

broadcast 10.0.0.255

Fügen Sie abschließend die Adressen dieser Server zur statischen Routing-Tabelle hinzu. Öffnen Sie dazu die WLAN-Konfigurationsdatei /etc/systemd/network/25-wlp6s0.network und fügen Sie am Ende den Abschnitt Route hinzu .

[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.12

Sie können die Adressen Ihrer NTP-Server mithilfe des Host- Dienstprogramms wie folgt ermitteln:

host time1.google.com

Installieren Sie dnscrypt-proxy , entfernen Sie Anzeigen und verbergen Sie den DNS-Verkehr vor dem Anbieter


apt install dnscrypt-proxy

Bearbeiten Sie den Socket /lib/systemd/system/dnscrypt-proxy.socket, um die DNS-Abfragen des Hosts und des lokalen Netzwerks zu bearbeiten . Ändern Sie die folgenden Zeilen:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Neustart systemd:

systemctl daemon-reload

Bearbeiten Sie die Konfiguration /etc/dnscrypt-proxy/dnscrypt-proxy.toml :

server_names = ['adguard-dns']

Fügen Sie Folgendes hinzu , um dnscrypt-proxy-Verbindungen über tun2socks weiterzuleiten :

force_tcp = true

Bearbeiten Sie die Konfiguration /etc/resolv.conf , die den DNS-Server dem Host mitteilt.

nameserver 127.0.0.1
nameserver 192.168.1.1

Die erste Zeile enthält die Verwendung von dnscrypt-proxy , die zweite - verwendet das ursprüngliche Gateway, falls der dnscrypt-proxy- Server nicht verfügbar ist.

Erledigt!


Starten Sie vorhandene Netzwerkdienste neu oder beenden Sie sie:

systemctl stop networking NetworkManager NetworkManager-wait-online

Und starten Sie alle notwendigen neu:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Nach dem Neustart oder Neustart verfügen Sie über einen zweiten Zugriffspunkt, der die Host- und LAN-Geräte an SOCKS weiterleitet.

So sieht die Ausgabe aus.
ip a
normaler Laptop:

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

Zusammenfassend


  1. Der Anbieter sieht nur die verschlüsselte Verbindung zu Ihrem SOCKS-Server, was bedeutet, dass er nichts sieht.
  2. Und doch sieht er Ihre NTP-Anfragen. Um dies zu verhindern, löschen Sie die statischen Routen für NTP-Server. Es ist jedoch keine Tatsache, dass Ihr SOCKS-Server NTP zulässt.

Krücke auf Debain 10 gesehen


Wenn Sie versuchen, den Netzwerkdienst über die Konsole neu zu starten, schlägt dies mit einem Fehler fehl. Dies liegt an der Tatsache, dass ein Teil davon in Form einer virtuellen Schnittstelle an den Dienst tun2socks gebunden ist , was bedeutet, dass er verwendet wird. Um den Netzwerkdienst neu zu starten, müssen Sie zuerst den tun2socks- Dienst beenden . Aber ich denke, wenn Sie bis zum Ende lesen, ist es für Sie definitiv kein Problem!

Verweise


  1. Statisches Routing unter Linux - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks ambrop72 / badvpn wiki github
  4. oblique / create_ap: Dieses Skript erstellt einen NATed oder Bridged WiFi Access Point.
  5. dnscrypt-proxy 2 - Ein flexibler DNS-Proxy mit Unterstützung für verschlüsselte DNS-Protokolle.

All Articles