Router építése SOCKS segítségével egy Debian 10-es laptopon

Egy egész éven (vagy kettőn) át halogattam ennek a cikknek a közzétételét azzal az egy fő okkal, hogy már két cikket publikáltam, amelyekben leírtam, hogyan lehet egy egyszerű laptopot Debianból SOCKS routerré alakítani.

Azóta azonban a Debian stabil verziója frissült Buster verzióra, és elegendő számú ember keresett meg privát üzenetben, hogy segítsenek a konfigurálásban, tehát a korábbi cikkeim nem teljesek. Nos, én is sejtettem, hogy azok a módszerek, amiket ott ismertettem, nem fedik le teljesen a Linux konfigurálásának minden finomságát a SOCKS routerekhez. Ráadásul ezek a Debian Stretchre készültek, és a Busterre való frissítés után a systemd indítási rendszerben észleltem néhány apró változást a szolgáltatások interakciójában. Sőt, a cikkekben nem használtam a systemd-networkd-t, holott az a legjobban illeszkedik a bonyolult hálózati konfigurációkhoz.

A fent említett változásokon kívül a konfigurációmba olyan szolgáltatások kerültek, mint hostapd — egy hozzáférési pont virtualizáló szolgáltatás, ntp amely a helyi hálózat ügyfeleinek időszinkronizálásáért felelős, dnscrypt-proxy az ügyfél helyi hálózaton történő DNS titkosításáért és a hirdetések blokkolásáért, valamint ahogy korábban említettem, systemd-networkd a hálózati interfészek konfigurálásáért.

Íme egy egyszerű blokkvázlat az ilyen típusú router belső felépítéséről.

Router építése SOCKS segítségével egy Debian 10-es laptopon

Tehát, emlékeztetni szeretnélek, hogy milyen célokat követ ez a cikkciklus:

  1. Minden operációs rendszer és a laptop hálózatában lévő összes eszköz SOCKS átjárón keresztül történő irányítása.
  2. A laptopnak teljesen mobilnak kell maradnia. Ami azt jelenti, hogy lehetővé kell tennie a grafikus felület használatát, és nem szabad állandóan egy fizikai helyhez kötődni.
  3. Az utolsó pont megköveteli, hogy csak a beépített vezeték nélküli interfészen keresztül történjen a csatlakozás és az irányítás.
  4. Természetesen, egy átfogó útmutató létrehozása és a megfelelő technológiák részletes bemutatása a szerény ismereteim keretein belül.

Ami a cikk témáját illeti:

  1. git — letölteni a projektek repóit tun2socks, amely a TCP forgalom SOCKS-ba történő irányításához szükséges, és create_ap — egy szkript a virtuális hozzáférési pont konfigurálásának automatizálásához hostapd.
  2. tun2socks — létrehozzuk és telepítjük a systemd szolgáltatást a rendszerbe.
  3. systemd-networkd — konfiguráljuk a vezeték nélküli és a virtuális interfészeket, a statikus irányítási táblázatokat és a csomagok továbbítását.
  4. create_ap — telepítjük a systemd szolgáltatást a rendszerbe, beállítjuk és elindítjuk a virtuális hozzáférési pontot.

Opcionális lépések:

  • ntp — telepítjük és beállítjuk a szervert az időszinkronizáláshoz a virtuális hozzáférési pont ügyfelein.
  • dnscrypt-proxy — titkosítjuk a DNS kéréseket, SOCKS-ba irányítjuk őket, és letiltjuk a hirdetési domaineket a helyi hálózatra.

Miért mindez?

Ez az egyik módja a TCP-kapcsolatok védelmének megszervezésének a helyi hálózaton. A legfőbb előnye, hogy az összes kapcsolat SOCKS-on keresztül megy, ha nem építünk statikus útvonalat az eredeti átjárón keresztül. Ez azt jelenti, hogy nem kell beállítanunk a SOCKS-szerver beállításait sem a különböző programoknak, sem a helyi hálózat ügyfeleinek - mindezek automatikusan a SOCKS-ba mennek, mivel az az alapértelmezett átjáró, amíg mi el nem mondjuk az ellenkezőjét.

Lényegében egy második titkosító routert adunk hozzá, mint egy laptop az eredeti router előtt, és az eredeti router internetkapcsolatát használjuk a laptop által titkosított SOCKS-kérésekhez, amely viszont irányítja és titkosítja a helyi hálózat ügyfeleinek kéréseit.

A szolgáltató szempontjából folyamatosan csatlakozva vagyunk egy szerverhez titkosított forgalommal.

Így minden eszköz csatlakozik a laptop virtuális hozzáférési pontjához.

Telepítse a tun2socks-ot a rendszerbe.

Amíg az Ön gépén van internet, töltse le az összes szükséges eszközt.

apt update
apt install git make cmake

Töltse le a badvpn csomagot.

git clone https://github.com/ambrop72/badvpn

A rendszerében létrejön egy mappa badvpn. Hozzon létre egy külön mappát a buildhez.

mkdir badvpn-build

Lépjen be ebbe a mappába.

cd badvpn-build

Építse meg. tun2socks

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

Telepítse a rendszert.

make install
  • A parameter -DBUILD_NOTHING_BY_DEFAULT=1 letiltja a badvpn repository összes összetevőjének építését.
  • —DBUILD_TUN2SOCKS=1 belefoglalja a tun2socks összetevőt az építésbe. tun2socks.
  • make install — a bináris fájl tun2socks a rendszerében lesz elérhető a következő címen. /usr/local/bin/badvpn-tun2socks.

Telepítse a tun2socks szolgáltatást a systemd-be.

Hozzon létre egy fájlt. /etc/systemd/system/tun2socks.service a következő tartalommal:

[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 — megadja a virtuális interfész nevét, amelyet a systemd-networkd segítségével inicializálunk.
  • --netif-ipaddr — a tun2socks "router" hálózati címe, amelyhez a virtuális interfész csatlakozik. Jobb, ha külön. fenntartott alhálózatra tesszük..
  • --socks-server-addr — elfogadja a socket-et (cím:port a SOCKS szerverhez).

Ha a SOCKS szerver hitelesítést igényel, akkor megadhatja a paramétereket --felhasználónév és --jelszó.

Ezután regisztrálja a szolgáltatást

systemctl daemon-reload

És engedélyezzük

systemctl enable tun2socks

Mielőtt elindítanánk a szolgáltatást, biztosítsuk számára a virtuális hálózati interfészt.

Lépjünk át az systemd-networkd-ra

Engedélyezzük systemd-networkd:

systemctl enable systemd-networkd

Kikapcsoljuk a jelenlegi hálózati szolgáltatásokat.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-wait-online — ez egy olyan szolgáltatás, amely vár a működő hálózati kapcsolat létrejöttére, mielőtt a systemd folytatná más, a hálózati kapcsolattól függő szolgáltatások indítását. Kikapcsoljuk, mivel az systemd-networkd-ra váltunk.

Azonnal engedélyezzük:

systemctl enable systemd-networkd-wait-online

Állítsa be a vezeték nélküli hálózati interfészt

Hozzon létre egy systemd-networkd konfigurációs fájlt a vezeték nélküli hálózati interfészhez /etc/systemd/network/25-wlp6s0.network.

[Match]
Név=wlp6s0

[Network]
Cím=192.168.1.2/24
IPForward=yes
  • Név — ez a vezeték nélküli interfész neve. Az azonosításához használja a parancsot ip a.
  • IPForward — ez egy irányelv, amely engedélyezi a csomagok átirányítását a hálózati interfészen.
  • Cím felelős a vezeték nélküli interfész IP-címének hozzárendeléséért. Statikusan adjuk meg, mert ha az equivalens irányelvet használjuk DHCP=yes, az systemd-networkd alapértelmezett átjárót hoz létre a rendszerben. Akkor az összes forgalom az eredeti átjárón keresztül megy, nem a jövőbeli virtuális interfészen egy másik alhálózaton. A jelenlegi alapértelmezett átjárót a következő parancs segítségével ellenőrizheti ip r

Hozzon létre egy statikus útvonalat a távoli SOCKS szerverhez

Ha a SOCKS szerver nem helyi, hanem távoli, statikus útvonalat kell létrehoznia. Ehhez adja hozzá a szekciót Route a létrehozott vezeték nélküli interfész konfigurációs fájlja végéhez a következő tartalommal:

[Route]
Gateway=192.168.1.1
Cél=0.0.0.0
  • Gateway — ez az alapértelmezett átjáró vagy az Ön eredeti hozzáférési pontjának címe.
  • Cél — a SOCKS szerver címe.

Állítsa be a wpa_supplicant-ot az systemd-networkd-hoz

Az systemd-networkd a wpa_supplicant-ot használja a védett hozzáférési ponthoz való csatlakozáshoz. Amikor megpróbálja "aktiválni" a vezeték nélküli interfészt, az systemd-networkd elindítja a szolgáltatást wpa_supplicant@név, ahol név — ez a vezeték nélküli interfész neve. Ha eddig nem használta az systemd-networkd-t, valószínűleg ez a szolgáltatás nem található a rendszerében.

Ezért hozza létre a következő parancs segítségével:

systemctl enable wpa_supplicant@wlp6s0

Használom wlp6s0 mint a vezeték nélküli interfész neve. Ez a név eltérhet. Ezt a parancsot használva tudhatja meg: ip l.

Most a létrehozott szolgáltatás wpa_supplicant@wlp6s0 akkor fog elindulni, amikor a vezeték nélküli interfész "fel van emelve", azonban ez keresni fogja az SSID és a hozzáférési pont jelszavának beállításait a fájlban. /etc/wpa_supplicant/wpa_supplicant-wlp6s0Ezért létre kell hoznia azt a wpa_passphrase.

Az alábbi parancsot hajtsa végre:

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

ahol SSID ez az Ön hozzáférési pontjának neve, a jelszó pedig azt jelenti, hogy wlp6s0 ez a vezeték nélküli interfész neve.

Inicializálja a virtuális interfészt a tun2socks számára

Hozzon létre egy fájlt az új virtuális interfész inicializálásához a rendszerben:/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • Név ez az a név, amelyet a systemd-networkd a jövőbeli virtuális interfész inicializálásakor fog adni.
  • Kind ez a virtuális interfész típusa. Az tun2socks szolgáltatás nevéből kitalálhatja, hogy ez egy tun.
  • netdev ezek a fájl kiterjesztések, amelyeket systemd-networkd a virtuális hálózati interfészek inicializálásához használ. .hálózatA cím és a többi hálózati beállítás ezekhez a interfészekhez

-fájlokban vannak megadva. /etc/systemd/network/25-tun2socks.network a következő tartalommal:

Hozzon létre egy ilyen fájlt:
  • Név [Match] Name=tun2socks[Network] Address=172.16.1.2/24 Gateway=172.16.1.1 netdevez a virtuális interfész neve, amelyet Ön megadott
  • Cím -fájlban.
  • Gateway Ez az IP cím, amelyet a virtuális interfésznek fog biztosítani. Ugyanabban a hálózatban kell lennie, mint a cím, amelyet a tun2socks szolgáltatásnál megadott. tun2socksEz az IP cím a "router"-ének,

amit a systemd szolgáltatás létrehozásakor adott meg. tun2socks Így a interfésznek van egy címe, 172.16.1.2és a szolgáltatás, tun2socks — 172.16.1.1ezáltal egy átjáró a virtuális interfész összes kapcsolatának.

Állítsa be a virtuális hozzáférési pontot

Telepítse a szükséges csomagokat:

apt install util-linux procps hostapd iw haveged

Töltse le a repót create_ap a gépére:

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

Lépjen be a repó mappájába a gépén:

cd create_ap

Telepítse a rendszert:

make install

Az Ön rendszerében megjelenik a konfiguráció: /etc/create_ap.conf. Ezek a legfontosabb lehetőségek, amelyeket módosíthat:

  • GATEWAY=10.0.0.1 jobban, ha külön, fenntartott alhálózatot hoz létre.
  • NO_DNS=1 kapcsolja ki, mivel ezt a funkciót a virtuális interfész systemd-networkd fogja kezelni.
  • NO_DNSMASQ=1 kapcsolja ki ugyanezen okból.
  • WIFI_IFACE=wlp6s0 ez a laptop vezeték nélküli interfésze.
  • INTERNET_IFACE=tun2socks ez a tun2socks számára létrehozott virtuális interfész.
  • SSID=hostapd ez a virtuális hozzáférési pont neve.
  • PASSPHRASE=12345678 ez a jelszó.

Ne felejtsd el bekapcsolni a szolgáltatást:

systemctl enable create_ap

Kapcsolja be a DHCP szervert a systemd-networkd-ben

Szolgáltatás create_ap kezdeményezi a virtuális interfész létrehozását a rendszerben ap0. Elvileg ezen az interfészen fut a dnsmasq, de miért telepítenénk felesleges szolgáltatásokat, ha a systemd-networkd beépített DHCP-szerverrel rendelkezik?

A bekapcsolásához határozzuk meg a hálózati beállításokat a virtuális ponthoz. Ehhez hozzon létre egy fájlt /etc/systemd/network/25-ap0.network a következő tartalommal:

[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

Miután a create_ap szolgáltatás inicializálta a virtuális interfészt ap0, a systemd-networkd automatikusan IP-címet rendel hozzá és bekapcsolja a DHCP szervert.

A sorok EmitDNS=yes és DNS=10.0.0.1 a DNS szerver beállításait továbbítják a csatlakoztatott eszközöknek a hozzáférési ponthoz.

Ha nem tervezed a helyi DNS szerver használatát — az én esetemben ez a dnscrypt-proxy — akkor beállíthatod DNS=10.0.0.1 be. DNS=192.168.1.1, ahol 192.168.1.1 — a te eredeti átjáród címe. Ekkor a DNS-lekérdezéseid és a helyi hálózat forgalma a szolgáltató szervereihez fognak érkezni titkosítatlan formában.

EmitNTP=yes és NTP=192.168.1.1 azonosítókat továbbítanak az NTP-hez.

Ugyanez vonatkozik a sorra NTP=10.0.0.1.

Telepítse és konfigurálja az NTP szervert

Telepítse a rendszert:

apt install ntp

Szerkeszd a konfigurációt /etc/ntp.conf. Kommentezze ki a standard poolok címeit:

#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

Adja hozzá a nyilvános szerverek címeit, például a Google Public NTP-t:

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

Biztosítson hozzáférést a szerverhez az Ön hálózatából:

restrict 10.0.0.0 mask 255.255.255.0

Kapcsolja be a terjesztést a hálózatába:

broadcast 10.0.0.255

Végül adja hozzá ezen szerverek címeit a statikus útvonal táblázathoz. Ehhez nyissa meg a vezeték nélküli interfész konfigurációs fájlját /etc/systemd/network/25-wlp6s0.network és adja hozzá az alábbi szakasz végéhez 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.12

Megtudhatja az NTP szerverek címeit a következő segédprogram használatával: host így:

host time1.google.com

Telepítse a dnscrypt-proxy-t, távolítsa el a reklámokat és rejtse el a DNS forgalmat a szolgáltatótól

apt install dnscrypt-proxy

Ahhoz, hogy a gazdagép és a helyi hálózat DNS lekérdezéseit kiszolgálja, szerkeszd a socketet /lib/systemd/system/dnscrypt-proxy.socket. Módosítsd a következő sorokat:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Indítsa újra systemd:

systemctl daemon-reload

Szerkeszd a konfigurációt /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

A dnscrypt-proxy kapcsolatainak tun2socks-n keresztüli irányításához adja hozzá alul:

force_tcp = true

Szerkeszd a konfigurációt /etc/resolv.conf, amely tájékoztatja a DNS szervert a gazdagépről.

nameserver 127.0.0.1
nameserver 192.168.1.1

Az első sor tartalmazza a dnscrypt-proxy használatát, a második az eredeti átjárót használja, ha a dnscrypt-proxy szerver nem áll rendelkezésre.

Kész!

Indítsa újra, vagy állítsa le a működő hálózati szolgáltatásokat:

systemctl stop networking NetworkManager NetworkManager-wait-online

És indítsa újra az összes szükségeset:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Az újraindítás vagy újraindítás után második hozzáférési pontja lesz, amely a hostot és a helyi hálózati eszközöket SOCKS-ba irányítja.

Körülbelül így néz ki a kimenet ip a egy átlagos laptopból:

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

Végül

  1. A szolgáltató csak az Ön SOCKS szerveréhez irányuló titkosított kapcsolatot látja, így semmit sem lát.
  2. Még mindig látja az Ön NTP kéréseit, ezért ennek megakadályozására törölje az NTP szerverek statikus útvonalait. Azonban nem biztos, hogy a SOCKS szervere engedélyezi az NTP protokollt.

Kis megoldás, amelyet a Debain 10-en észleltek

Ha megpróbálja újraindítani a hálózati szolgáltatást a konzolon, az hibával leáll. Ennek oka, hogy a virtuális interfész egy része a tun2socks szolgáltatáshoz van kötve, így az használatban van. A hálózati szolgáltatás újraindításához először le kell állítani a tun2socks szolgáltatást. De azt hiszem, ha idáig eljutott, ez biztosan nem lesz önnek probléma!

Hivatkozások

  1. Statikus útválasztás Linuxon — IBM
  2. systemd-networkd.service — Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Ez a szkript NATolt vagy Bridged WiFi Hozzáférési Pontot hoz létre.
  5. dnscrypt-proxy 2 — Egy rugalmas DNS proxy, amely támogatja a titkosított DNS protokollokat.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster