Router készítése a SOCKS-ban egy laptopon Debian 10-zel

Egy egész évig (vagy két) halogattam ennek a cikknek a közzétételét a fő ok miatt - már két cikket publikáltam, amelyekben leírtam egy útválasztó létrehozásának folyamatát a SOCKS-ban egy nagyon hétköznapi laptopról Debiannal.

Azóta azonban a Debian stabil verziója frissült Busterre, elég sokan kerestek meg privátban és kértek segítséget a beállításhoz, ami azt jelenti, hogy korábbi cikkeim nem teljesek. Nos, én magam is sejtettem, hogy a bennük felvázolt módszerek nem fedik fel teljesen a Linux SOCKS-ban történő útválasztásra való beállításának minden bonyolultságát. Ráadásul Debian Stretch-re írták, és a Busterre való frissítés után a systemd init rendszerben apró változásokat észleltem a szolgáltatások interakciójában. És magukban a cikkekben nem használtam a systemd-networkd-t, bár ez a legalkalmasabb összetett hálózati konfigurációkhoz.

A fenti változtatásokon kívül a következő szolgáltatásokkal bővült a konfigurációm: hostapd - hozzáférési pont virtualizációs szolgáltatás, ntp a helyi hálózati kliensek idejének szinkronizálása, dnscrypt-proxy a DNS-en keresztüli kapcsolatok titkosítására és a helyi hálózati klienseken a hirdetések letiltására, valamint, ahogy korábban említettem, systemd-networkd hálózati interfészek konfigurálásához.

Itt van egy egyszerű blokkdiagram egy ilyen útválasztó belső felépítéséről.

Router készítése a SOCKS-ban egy laptopon Debian 10-zel

Tehát hadd emlékeztesselek, mi a célja ennek a cikksorozatnak:

  1. Az összes operációs rendszer-kapcsolatot irányítsa a SOCKS-ba, valamint a laptoppal azonos hálózaton lévő összes eszköz kapcsolatait.
  2. Az én esetemben a laptopnak teljesen mobilnak kell maradnia. Azaz, hogy lehetőséget adjunk az asztali környezet használatára, és ne legyen fizikai helyhez kötve.
  3. Az utolsó pont csak a beépített vezeték nélküli interfészen keresztüli csatlakozást és útválasztást jelenti.
  4. No, és persze egy átfogó útmutató elkészítése, valamint szerény tudásom szerint a vonatkozó technológiák elemzése.

Miről lesz szó ebben a cikkben:

  1. csoportos it — projekt tárolók letöltése tun2socksszükséges a TCP-forgalom SOCKS-ba irányításához, és create_ap — egy parancsfájl, amely automatizálja a virtuális hozzáférési pont beállítását hostapd.
  2. tun2socks — felépíteni és telepíteni a systemd szolgáltatást a rendszerre.
  3. systemd-networkd — vezeték nélküli és virtuális interfészek, statikus útválasztási táblák és csomagátirányítás konfigurálása.
  4. create_ap — telepítse a rendszerszolgáltatást a rendszerre, konfigurálja és indítsa el a virtuális hozzáférési pontot.

Választható lépések:

  • ntp — kiszolgáló telepítése és konfigurálása az idő szinkronizálásához a virtuális hozzáférési pont klienseken.
  • dnscrypt-proxy — titkosítjuk a DNS-kéréseket, a SOCKS-ba irányítjuk, és letiltjuk a hirdetési tartományokat a helyi hálózaton.

Miért ez az egész?

Ez az egyik módja a TCP-kapcsolatok biztonságossá tételének a helyi hálózaton. A fő előny, hogy minden kapcsolat SOCKS-ban történik, kivéve, ha statikus útvonalat építenek ki számukra az eredeti átjárón keresztül. Ez azt jelenti, hogy nem kell megadnia a SOCKS kiszolgáló beállításait sem az egyes programokhoz, sem a helyi hálózaton lévő kliensekhez – ezek alapértelmezés szerint mind a SOCKS-ba kerülnek, mivel ez az alapértelmezett átjáró, amíg másképp nem jelezzük.

Lényegében egy második titkosító útválasztót adunk hozzá laptopként az eredeti útválasztó elé, és az eredeti útválasztó internetkapcsolatát használjuk a laptop már titkosított SOCKS kéréseihez, amely viszont továbbítja és titkosítja a LAN-kliensektől érkező kéréseket.

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

Ennek megfelelően minden eszköz csatlakozik a laptop virtuális hozzáférési pontjához.

Telepítse a tun2socks-t a rendszerre

Amíg a gépén van internet, töltsön le minden 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

Megjelenik egy mappa a rendszeren badvpn. Hozzon létre egy külön mappát a build számára

mkdir badvpn-build

Menj oda

cd badvpn-build

Gyűjt tun2socks

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

Telepítse a rendszerre

make install
  • Paraméter -DBUILD_NOTHING_BY_DEFAULT=1 letiltja a badvpn lerakat összes összetevőjének felépítését.
  • -DBUILD_TUN2SOCKS=1 tartalmaz egy alkatrészt az összeállításban tun2socks.
  • make install — telepíti a tun2socks bináris fájlt a rendszerére a címen /usr/local/bin/badvpn-tun2socks.

Telepítse a tun2socks szolgáltatást a systemd-ben

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 - felveszi annak a virtuális interfésznek a nevét, amelyet a systemd-networkd paranccsal inicializálunk.
  • --netif-ipaddr — a tun2socks „router” hálózati címe, amelyhez a virtuális interfész csatlakozik. Jobb elkülöníteni fenntartott alhálózat.
  • --socks-server-addr - fogadja az aljzatot (адрес:порт SOCKS szerverek).

Ha a SOCKS szerver hitelesítést igényel, megadhatja a paramétereket --username и --password.

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

systemctl daemon-reload

És kapcsolja be

systemctl enable tun2socks

A szolgáltatás elindítása előtt virtuális hálózati interfésszel látjuk el.

Váltás systemd-networkd-re

Mi is systemd-networkd:

systemctl enable systemd-networkd

Az aktuális hálózati szolgáltatások letiltása.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-wait-online egy olyan szolgáltatás, amely működő hálózati kapcsolatra vár, mielőtt a systemd folytatja a hálózat jelenlététől függő egyéb szolgáltatások elindítását. Letiltjuk, amikor a systemd-networkd analógra 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]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • Név a vezeték nélküli interfész neve. Azonosítsa a paranccsal ip a.
  • IPForward - egy direktíva, amely lehetővé teszi a csomagok átirányítását a hálózati interfészen.
  • Székhely felelős az IP-cím hozzárendeléséért a vezeték nélküli interfészhez. Statikusan adjuk meg, mert az ekvivalens direktívával DHCP=yes, a systemd-networkd alapértelmezett átjárót hoz létre a rendszeren. Ekkor az összes forgalom az eredeti átjárón keresztül fog haladni, nem pedig egy másik alhálózat jövőbeli virtuális felületén. Az aktuális alapértelmezett átjárót a paranccsal ellenőrizheti ip r

Hozzon létre egy statikus útvonalat a távoli SOCKS szerver számára

Ha a SOCKS szervere nem helyi, hanem távoli, akkor létre kell hoznia egy statikus útvonalat. Ehhez adjon hozzá egy szakaszt Route a következő tartalommal létrehozott vezeték nélküli interfész konfigurációs fájl végére:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway — ez az alapértelmezett átjáró vagy az eredeti hozzáférési pont címe.
  • Destination — SOCKS szerver címe.

A wpa_supplicant konfigurálása a systemd-networkd számára

A systemd-networkd a wpa_supplicant használatával csatlakozik egy biztonságos hozzáférési ponthoz. Amikor megpróbálja "emelni" a vezeték nélküli interfészt, a systemd-networkd elindítja a szolgáltatást wpa_supplicant@имяAhol név a vezeték nélküli interfész neve. Ha eddig nem használta a systemd-networkd programot, akkor valószínűleg ez a szolgáltatás hiányzik a rendszerről.

Tehát hozza létre a következő paranccsal:

systemctl enable wpa_supplicant@wlp6s0

használtam wlp6s0 vezeték nélküli interfészének neveként. Eltérhet a neved. paranccsal ismerheti fel ip l.

Most a létrehozott szolgáltatás wpa_supplicant@wlp6s0 a vezeték nélküli interfész „emelésekor” indul el, viszont megkeresi a fájlban a hozzáférési pont SSID és jelszó beállításait /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Ezért a segédprogrammal kell létrehoznia wpa_passphrase.

Ehhez futtassa a parancsot:

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

ahol SSID a hozzáférési pont neve, a jelszó a jelszó, és wlp6s0 — a vezeték nélküli interfész neve.

Inicializálja a tun2socks virtuális felületét

Hozzon létre egy fájlt egy új virtuális felület inicializálásához a rendszerben/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • Név az a név, amelyet a systemd-networkd a jövőbeli virtuális felülethez rendel az inicializáláskor.
  • Kedves egyfajta virtuális interfész. A tun2socks szolgáltatás nevéből sejthető, hogy olyan felületet használ, mint pl tun.
  • netdev a fájlok kiterjesztése systemd-networkd A virtuális hálózati interfészek inicializálására szolgál. Ezen interfészek címét és egyéb hálózati beállításait a következő tartalmazza: .hálózat- fájlok.

Hozzon létre egy ilyen fájlt /etc/systemd/network/25-tun2socks.network a következő tartalommal:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • Name - a virtuális felület neve, amelyet megadott netdev- fájl.
  • Address — A virtuális interfészhez hozzárendelendő IP-cím. Ugyanazon a hálózaton kell lennie, mint a tun2socks szolgáltatásban megadott címnek
  • Gateway - a „router” IP-címe tun2socks, amelyet a systemd szolgáltatás létrehozásakor adott meg.

Tehát a felület tun2socks van címe 172.16.1.2, és a szolgáltatás tun2socks - 172.16.1.1, azaz a virtuális felületről érkező összes kapcsolat átjárója.

Állítson be egy virtuális hozzáférési pontot

Függőségek telepítése:

apt install util-linux procps hostapd iw haveged

Töltse le az adattárat create_ap az autódhoz:

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

Lépjen a lerakat mappába a gépén:

cd create_ap

Telepítés a rendszerre:

make install

A rendszeren megjelenik egy konfiguráció /etc/create_ap.conf. Íme a fő szerkesztési lehetőségek:

  • GATEWAY=10.0.0.1 - jobb, ha külön fenntartott alhálózatot készít.
  • NO_DNS=1 - disable, mivel ezt a paramétert a systemd-networkd virtuális interfész fogja kezelni.
  • NO_DNSMASQ=1 - kapcsolja ki ugyanezért.
  • WIFI_IFACE=wlp6s0 — laptop vezeték nélküli interfész.
  • INTERNET_IFACE=tun2socks - a tun2socks számára létrehozott virtuális felület.
  • SSID=hostapd — a virtuális hozzáférési pont neve.
  • PASSPHRASE=12345678 - Jelszó.

Ne felejtse el engedélyezni a szolgáltatást:

systemctl enable create_ap

DHCP-kiszolgáló engedélyezése a systemd-networkd-ben

iroda create_ap inicializál egy virtuális interfészt a rendszerben ap0. Elméletileg a dnsmasq lóg ezen a felületen, de miért telepítsünk extra szolgáltatásokat, ha a systemd-networkd tartalmaz egy beépített DHCP-kiszolgálót?

Ennek engedélyezéséhez meghatározzuk a virtuális pont hálózati beállításait. 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álja a virtuális felületet ap0, a systemd-networkd automatikusan hozzárendel egy IP-címet, és engedélyezi a DHCP-kiszolgálót.

Húrok EmitDNS=yes и DNS=10.0.0.1 DNS-kiszolgáló beállításainak továbbítása a hozzáférési ponthoz csatlakoztatott eszközökre.

Ha nem tervezi helyi DNS szerver használatát - az én esetemben ez a dnscrypt-proxy - telepítheti DNS=10.0.0.1 в DNS=192.168.1.1Ahol 192.168.1.1 — az eredeti átjáró címe. Ezután a gazdagép és a helyi hálózat DNS-kérelmei titkosítatlanok lesznek a szolgáltató szerverein keresztül.

EmitNTP=yes и NTP=192.168.1.1 NTP beállítások átvitele.

Ugyanez vonatkozik a vonalra is NTP=10.0.0.1.

Telepítse és konfigurálja az NTP-kiszolgálót

Telepítés a rendszerre:

apt install ntp

Szerkessze a konfigurációt /etc/ntp.conf. Írja megjegyzésbe a szabványos készletek címét:

#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

Nyilvános szervercímek hozzáadása, például Google nyilvános NTP:

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

Hozzáférés biztosítása a szerverhez a hálózaton lévő ügyfelek számára:

restrict 10.0.0.0 mask 255.255.255.0

Engedélyezze a sugárzást a hálózaton:

broadcast 10.0.0.255

Végül adja hozzá ezeknek a kiszolgálóknak a címeit a statikus útválasztási táblához. Ehhez nyissa meg a vezeték nélküli interfész konfigurációs fájlját /etc/systemd/network/25-wlp6s0.network és add hozzá a rész 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

A segédprogram segítségével megtudhatja az NTP-kiszolgálók címét host az alábbiak szerint:

host time1.google.com

Telepítse a dnscrypt-proxyt, távolítsa el a hirdetéseket és rejtse el a DNS-forgalmat a szolgáltatója elől

apt install dnscrypt-proxy

A gazdagép és a helyi hálózati DNS-lekérdezések kiszolgálásához szerkessze a socketet /lib/systemd/system/dnscrypt-proxy.socket. Módosítsa a következő sorokat:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Újrakezd systemd:

systemctl daemon-reload

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

server_names = ['adguard-dns']

A dnscrypt-proxy kapcsolatok tun2sockon keresztül történő irányításához adja hozzá az alábbiakat:

force_tcp = true

Szerkessze a konfigurációt /etc/resolv.conf, amely közli a DNS-kiszolgálót a gazdagépnek.

nameserver 127.0.0.1
nameserver 192.168.1.1

Az első sor lehetővé teszi a dnscrypt-proxy használatát, a második sor az eredeti átjárót használja arra az esetre, ha a dnscrypt-proxy szerver nem elérhető.

Kész!

Indítsa újra vagy állítsa le a hálózati szolgáltatások futtatását:

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

Újraindítás vagy újraindítás után lesz egy második hozzáférési pontja, amely a gazdagépet és a LAN-eszközöket a SOCKS-hoz irányítja.

Így néz ki a kimenet ip a normál 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

Ennek eredményeképpen,

  1. A szolgáltató csak a titkosított kapcsolatot látja a SOCKS-kiszolgálóval, ami azt jelenti, hogy semmit sem lát.
  2. Ennek ellenére látja az NTP-kéréseket, ennek megakadályozása érdekében távolítsa el az NTP-kiszolgálók statikus útvonalait. Azonban nem biztos, hogy a SOCKS szervere engedélyezi az NTP protokollt.

Mankót a Debain 10-en észlelték

Ha megpróbálja újraindítani a hálózati szolgáltatást a konzolról, az hibával meghiúsul. Ez annak köszönhető, hogy egy része virtuális interfész formájában a tun2socks szolgáltatáshoz van kötve, vagyis használatban van. A hálózati szolgáltatás újraindításához először le kell állítania a tun2socks szolgáltatást. De azt hiszem, ha a végéig elolvasod, ez biztosan nem jelent problémát neked!

referenciák

  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 létrehoz egy NAT vagy Bridged WiFi hozzáférési pontot.
  5. dnscrypt-proxy 2 – Rugalmas DNS-proxy, amely támogatja a titkosított DNS-protokollokat.

Forrás: will.com