ProHoster > Blog > administration > Construire un routeur dans SOCKS sur un ordinateur portable avec Debian 10
Construire un routeur dans SOCKS sur un ordinateur portable avec Debian 10
Pendant un an (ou deux), j'ai reporté la publication de cet article pour la raison principale : j'avais déjà publié deux articles dans lesquels je décrivais le processus de création d'un routeur dans SOCKS à partir d'un ordinateur portable très ordinaire avec Debian.
Cependant, depuis que la version stable de Debian a été mise à jour vers Buster, un nombre suffisant de personnes m'ont contacté en privé pour demander de l'aide pour l'installation, ce qui signifie que mes articles précédents ne sont pas exhaustifs. Eh bien, j'ai moi-même deviné que les méthodes qui y sont décrites ne révèlent pas pleinement toutes les subtilités de la configuration de Linux pour le routage dans SOCKS. De plus, ils sont écrits pour Debian Stretch, et après la mise à niveau vers Buster, dans le système d'initialisation systemd, j'ai remarqué de petits changements dans l'interaction des services. Et dans les articles eux-mêmes, je n'ai pas utilisé systemd-networkd, bien qu'il soit mieux adapté aux configurations réseau complexes.
En plus des modifications ci-dessus, les services suivants ont été ajoutés à ma configuration : hébergeur - service de virtualisation des points d'accès, ntp pour synchroniser l'heure des clients du réseau local, proxy-dnscrypt pour chiffrer les connexions via DNS et désactiver la publicité sur les clients du réseau local, et aussi, comme je l'ai mentionné plus tôt, systemd-networkd pour configurer les interfaces réseau.
Voici un schéma fonctionnel simple de la structure interne d’un tel routeur.
Alors laissez-moi vous rappeler quels sont les objectifs de cette série d’articles :
Acheminez toutes les connexions du système d'exploitation vers SOCKS, ainsi que les connexions de tous les appareils sur le même réseau que l'ordinateur portable.
L'ordinateur portable dans mon cas doit rester totalement mobile. Autrement dit, pour donner la possibilité d'utiliser l'environnement de bureau et de ne pas être lié à un emplacement physique.
Le dernier point implique la connexion et le routage uniquement via l'interface sans fil intégrée.
Et bien sûr, la création d'un guide complet, ainsi qu'une analyse des technologies pertinentes au meilleur de mes modestes connaissances.
Ce qui sera couvert dans cet article :
jet — télécharger les référentiels de projets tun2socksrequis pour acheminer le trafic TCP vers SOCKS, et créer_ap — un script pour automatiser la configuration d'un point d'accès virtuel à l'aide hébergeur.
tun2socks - créez et installez le service systemd sur le système.
systemd-networkd — configurez les interfaces sans fil et virtuelles, les tables de routage statiques et la redirection des paquets.
créer_ap — installez le service systemd sur le système, configurez et lancez un point d'accès virtuel.
Étapes facultatives :
ntp — installer et configurer un serveur pour synchroniser l'heure sur les clients de points d'accès virtuels.
proxy-dnscrypt — nous chiffrerons les requêtes DNS, les acheminerons vers SOCKS et désactiverons les domaines publicitaires pour le réseau local.
Pourquoi tout ça?
C'est l'un des moyens de sécuriser les connexions TCP sur un réseau local. Le principal avantage est que toutes les connexions sont établies dans SOCKS, à moins qu'une route statique ne soit construite pour elles via la passerelle d'origine. Cela signifie que vous n'avez pas besoin de spécifier les paramètres du serveur SOCKS pour les programmes individuels ou les clients du réseau local - ils vont tous à SOCKS par défaut, puisqu'il s'agit de la passerelle par défaut jusqu'à ce que nous indiquions le contraire.
Essentiellement, nous ajoutons un deuxième routeur de cryptage en tant qu'ordinateur portable devant le routeur d'origine et utilisons la connexion Internet du routeur d'origine pour les requêtes SOCKS déjà cryptées de l'ordinateur portable, qui à son tour achemine et crypte les requêtes des clients LAN.
Du point de vue du fournisseur, nous sommes constamment connectés à un serveur avec un trafic crypté.
En conséquence, tous les appareils sont connectés au point d’accès virtuel de l’ordinateur portable.
Installez tun2socks sur le système
Tant que votre machine dispose d'Internet, téléchargez tous les outils nécessaires.
apt update
apt install git make cmake
Téléchargez le package badvpn
git clone https://github.com/ambrop72/badvpn
Un dossier apparaîtra sur votre système badvpn. Créer un dossier séparé pour la build
NetworkManager-attendre-en ligne est un service qui attend une connexion réseau fonctionnelle avant que systemd continue de démarrer d'autres services qui dépendent de la présence d'un réseau. Nous le désactivons lorsque nous passons à l'analogue systemd-networkd.
Activons-le tout de suite :
systemctl enable systemd-networkd-wait-online
Configurer l'interface réseau sans fil
Créez un fichier de configuration systemd-networkd pour l'interface réseau sans fil /etc/systemd/network/25-wlp6s0.network.
Nom est le nom de votre interface sans fil. Identifiez-le avec la commande ip a.
IPForward - une directive qui permet la redirection des paquets sur une interface réseau.
Adresse est responsable de l’attribution d’une adresse IP à l’interface sans fil. On le précise statiquement car avec la directive équivalente DHCP=yes, systemd-networkd crée une passerelle par défaut sur le système. Ensuite, tout le trafic passera par la passerelle d'origine, et non par la future interface virtuelle sur un sous-réseau différent. Vous pouvez vérifier la passerelle par défaut actuelle avec la commande ip r
Créer une route statique pour le serveur SOCKS distant
Si votre serveur SOCKS n'est pas local, mais distant, vous devez alors créer une route statique pour celui-ci. Pour ce faire, ajoutez une section Route à la fin du fichier de configuration de l'interface sans fil que vous avez créé avec le contenu suivant :
[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
Gateway — il s'agit de la passerelle par défaut ou de l'adresse de votre point d'accès d'origine.
Destination — Adresse du serveur SOCKS.
Configurer wpa_supplicant pour systemd-networkd
systemd-networkd utilise wpa_supplicant pour se connecter à un point d'accès sécurisé. En essayant de "monter" l'interface sans fil, systemd-networkd démarre le service wpa_supplicant@имяOù nom est le nom de l'interface sans fil. Si vous n'avez pas utilisé systemd-networkd avant ce point, alors ce service est probablement absent sur votre système.
Créez-le donc avec la commande :
systemctl enable wpa_supplicant@wlp6s0
J'ai utilisé wlp6s0 comme nom de son interface sans fil. Votre nom peut être différent. Vous pouvez le reconnaître avec la commande ip l.
Maintenant le service créé wpa_supplicant@wlp6s0 sera lancé lorsque l'interface sans fil est « relevée », cependant, elle recherchera à son tour les paramètres SSID et de mot de passe du point d'accès dans le fichier /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Par conséquent, vous devez le créer à l'aide de l'utilitaire wpa_passphrase.
où SSID est le nom de votre point d'accès, mot de passe est le mot de passe et wlp6s0 — le nom de votre interface sans fil.
Initialiser l'interface virtuelle pour tun2socks
Créez un fichier pour initialiser une nouvelle interface virtuelle dans le système/etc/systemd/network/25-tun2socks.netdev
[NetDev]
Name=tun2socks
Kind=tun
Nom est le nom que systemd-networkd attribuera à la future interface virtuelle lors de son initialisation.
Genre est un type d'interface virtuelle. D'après le nom du service tun2socks, vous pouvez deviner qu'il utilise une interface comme tun.
Netdev est l'extension des fichiers qui systemd-networkd Utilisé pour initialiser les interfaces réseau virtuelles. L'adresse et les autres paramètres réseau de ces interfaces sont spécifiés dans .réseau-des dossiers.
Créez un fichier comme celui-ci /etc/systemd/network/25-tun2socks.network avec le contenu suivant :
Name — le nom de l'interface virtuelle que vous avez spécifié dans Netdev-déposer.
Address — Adresse IP qui sera attribuée à l'interface virtuelle. Doit être sur le même réseau que l'adresse que vous avez spécifiée dans le service tun2socks
Gateway — Adresse IP du « routeur » tun2socks, que vous avez spécifié lors de la création du service systemd.
Donc l'interface tun2socks a une adresse 172.16.1.2, et le service tun2socks - 172.16.1.1, c'est-à-dire qu'il s'agit de la passerelle pour toutes les connexions depuis l'interface virtuelle.
Configurer un point d'accès virtuel
Installer les dépendances :
apt install util-linux procps hostapd iw haveged
Téléchargez le référentiel créer_ap à votre voiture :
git clone https://github.com/oblique/create_ap
Accédez au dossier du référentiel sur votre machine :
cd create_ap
Installer sur le système :
make install
Une configuration apparaîtra sur votre système /etc/create_ap.conf. Voici les principales options d'édition :
GATEWAY=10.0.0.1 - il est préférable d'en faire un sous-réseau réservé distinct.
NO_DNS=1 - désactiver, puisque ce paramètre sera géré par l'interface virtuelle systemd-networkd.
NO_DNSMASQ=1 - éteignez-le pour la même raison.
WIFI_IFACE=wlp6s0 — interface sans fil pour ordinateur portable.
INTERNET_IFACE=tun2socks - une interface virtuelle créée pour tun2socks.
SSID=hostapd — nom du point d'accès virtuel.
PASSPHRASE=12345678 - mot de passe.
N'oubliez pas d'activer le service :
systemctl enable create_ap
Activer le serveur DHCP dans systemd-networkd
Service create_ap initialise une interface virtuelle dans le système ap0. En théorie, dnsmasq se bloque sur cette interface, mais pourquoi installer des services supplémentaires si systemd-networkd contient un serveur DHCP intégré ?
Pour l'activer, nous définirons les paramètres réseau du point virtuel. Pour ce faire, créez un fichier /etc/systemd/network/25-ap0.network avec le contenu suivant :
Une fois que le service create_ap initialise l'interface virtuelle ap0, systemd-networkd lui attribuera automatiquement une adresse IP et activera le serveur DHCP.
Cordes EmitDNS=yes и DNS=10.0.0.1 transmettre les paramètres du serveur DNS aux appareils connectés au point d'accès.
Si vous ne prévoyez pas d'utiliser un serveur DNS local - dans mon cas, il s'agit de dnscrypt-proxy - vous pouvez installer DNS=10.0.0.1 в DNS=192.168.1.1Où 192.168.1.1 — l'adresse de votre passerelle d'origine. Ensuite, les requêtes DNS pour votre hôte et votre réseau local seront non cryptées via les serveurs du fournisseur.
EmitNTP=yes и NTP=192.168.1.1 transférer les paramètres NTP.
Il en va de même pour la ligne NTP=10.0.0.1.
Installer et configurer le serveur NTP
Installer sur le système :
apt install ntp
Modifier la configuration /etc/ntp.conf. Commentez les adresses des pools standards :
Ajoutez des adresses de serveur publiques, par exemple Google Public NTP :
server time1.google.com ibrust
server time2.google.com ibrust
server time3.google.com ibrust
server time4.google.com ibrust
Donnez accès au serveur aux clients de votre réseau :
restrict 10.0.0.0 mask 255.255.255.0
Activez la diffusion sur votre réseau :
broadcast 10.0.0.255
Enfin, ajoutez les adresses de ces serveurs à la table de routage statique. Pour ce faire, ouvrez le fichier de configuration de l'interface sans fil /etc/systemd/network/25-wlp6s0.network et ajouter à la fin de la section Route.
Vous pouvez connaître les adresses de vos serveurs NTP à l'aide de l'utilitaire host comme suit:
host time1.google.com
Installez dnscrypt-proxy, supprimez les publicités et masquez le trafic DNS de votre fournisseur
apt install dnscrypt-proxy
Pour répondre aux requêtes DNS de l'hôte et du réseau local, modifiez le socket /lib/systemd/system/dnscrypt-proxy.socket. Modifiez les lignes suivantes :
ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53
ерезапустите systemd:
systemctl daemon-reload
Modifier la configuration /etc/dnscrypt-proxy/dnscrypt-proxy.toml:
server_names = ['adguard-dns']
Pour acheminer les connexions DNScrypt-proxy via tun2socks, ajoutez ci-dessous :
force_tcp = true
Modifier la configuration /etc/resolv.conf, qui informe le serveur DNS de l'hôte.
nameserver 127.0.0.1
nameserver 192.168.1.1
La première ligne permet d'utiliser dnscrypt-proxy, la deuxième ligne utilise la passerelle d'origine au cas où le serveur dnscrypt-proxy serait indisponible.
Fait!
Redémarrez ou arrêtez l'exécution des services réseau :
Après un redémarrage ou un redémarrage, vous disposerez d'un deuxième point d'accès qui achemine les périphériques hôte et LAN vers SOCKS.
Voici à quoi ressemble le résultat ip a ordinateur portable classique :
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
En conséquence,
Le fournisseur ne voit que la connexion cryptée à votre serveur SOCKS, ce qui signifie qu'il ne voit rien.
Et pourtant, il voit vos requêtes NTP, pour éviter cela, supprimez les routes statiques pour les serveurs NTP. Il n'est cependant pas certain que votre serveur SOCKS autorise le protocole NTP.
Béquille repérée sur Debain 10
Si vous essayez de redémarrer le service réseau depuis la console, cela échouera avec une erreur. Cela est dû au fait qu'une partie sous la forme d'une interface virtuelle est liée au service tun2socks, ce qui signifie qu'elle est utilisée. Pour redémarrer le service réseau, vous devez d'abord arrêter le service tun2socks. Mais je pense que si vous lisez jusqu’au bout, ce n’est certainement pas un problème pour vous !