Gradnja usmerjevalnika v SOCKS na prenosniku z Debian 10

Celo leto (ali dve) sem odlašal z objavo tega članka iz glavnega razloga - objavil sem že dva članka, v katerih sem opisal postopek ustvarjanja usmerjevalnika v SOCKS iz čisto običajnega prenosnika z Debianom.

Ker pa je bila stabilna različica Debiana posodobljena na Buster, me je zasebno kontaktiralo zadostno število ljudi in prosilo za pomoč pri nastavitvi, kar pomeni, da moji prejšnji članki niso izčrpni. No, sam sem ugibal, da metode, opisane v njih, ne razkrivajo v celoti vseh zapletenosti nastavitve Linuxa za usmerjanje v SOCKS. Poleg tega so napisani za Debian Stretch, po nadgradnji na Buster pa sem v sistemu systemd init opazil majhne spremembe v interakciji storitev. In v samih člankih nisem uporabil systemd-networkd, čeprav je najbolj primeren za kompleksne omrežne konfiguracije.

Poleg zgornjih sprememb so bile moji konfiguraciji dodane naslednje storitve: hostapd - storitev virtualizacije dostopnih točk, ntp za sinhronizacijo časa odjemalcev lokalnega omrežja, dnscrypt-proxy za šifriranje povezav prek DNS in onemogočanje oglaševanja na odjemalcih lokalnega omrežja ter, kot sem že omenil, systemd-networkd za konfiguriranje omrežnih vmesnikov.

Tukaj je preprost blokovni diagram notranje strukture takšnega usmerjevalnika.

Gradnja usmerjevalnika v SOCKS na prenosniku z Debian 10

Naj vas torej spomnim, kakšni so cilji te serije člankov:

  1. Usmerite vse povezave OS na SOCKS, pa tudi povezave iz vseh naprav v istem omrežju kot prenosnik.
  2. Prenosnik v mojem primeru bi moral ostati popolnoma mobilen. Se pravi, dati možnost uporabe namiznega okolja in ne biti vezan na fizično lokacijo.
  3. Zadnja točka pomeni povezavo in usmerjanje samo prek vgrajenega brezžičnega vmesnika.
  4. No, in seveda, izdelava celovitega vodnika, kot tudi analiza ustreznih tehnologij po mojem skromnem vedenju.

Kaj bo obravnavano v tem članku:

  1. git — prenesite repozitorije projektov tun2sockspotreben za usmerjanje prometa TCP na SOCKS in create_ap — skript za avtomatizirano nastavitev virtualne dostopne točke z uporabo hostapd.
  2. tun2socks — zgradite in namestite storitev systemd v sistem.
  3. systemd-networkd — konfigurirajte brezžične in virtualne vmesnike, statične usmerjevalne tabele in preusmeritev paketov.
  4. create_ap — namestite storitev systemd v sistem, konfigurirajte in zaženite virtualno dostopno točko.

Izbirni koraki:

  • ntp — namestite in konfigurirajte strežnik za sinhronizacijo časa na odjemalcih virtualne dostopne točke.
  • dnscrypt-proxy — šifrirali bomo zahteve DNS, jih usmerili na SOCKS in onemogočili oglaševalske domene za lokalno omrežje.

Čemu je vse to namenjeno?

To je eden od načinov za zaščito TCP povezav v lokalnem omrežju. Glavna prednost je, da so vse povezave vzpostavljene v SOCKS, razen če je zanje zgrajena statična pot prek prvotnega prehoda. To pomeni, da vam ni treba določiti nastavitev strežnika SOCKS za posamezne programe ali odjemalce v lokalnem omrežju - vsi gredo privzeto na SOCKS, saj je to privzeti prehod, dokler ne določimo drugače.

V bistvu dodamo drugi šifrirni usmerjevalnik kot prenosni računalnik pred prvotnim usmerjevalnikom in uporabimo internetno povezavo prvotnega usmerjevalnika za že šifrirane zahteve SOCKS prenosnika, ki nato usmerja in šifrira zahteve odjemalcev LAN.

Z vidika ponudnika smo stalno povezani na en strežnik s šifriranim prometom.

V skladu s tem so vse naprave povezane z navidezno dostopno točko prenosnika.

Namestite tun2socks v sistem

Dokler ima vaša naprava internet, prenesite vsa potrebna orodja.

apt update
apt install git make cmake

Prenesite paket badvpn

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

V vašem sistemu se bo pojavila mapa badvpn. Ustvarite ločeno mapo za gradnjo

mkdir badvpn-build

Pojdi k temu

cd badvpn-build

Zberite tun2socks

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

Namestite v sistem

make install
  • Parameter -DBUILD_NOTHING_BY_DEFAULT=1 onemogoči gradnjo vseh komponent repozitorija badvpn.
  • -DBUILD_TUN2SOCKS=1 vključuje komponento v sestavu tun2socks.
  • make install — bo namestil binarno datoteko tun2socks v vaš sistem na /usr/local/bin/badvpn-tun2socks.

Namestite storitev tun2socks v systemd

Ustvarite datoteko /etc/systemd/system/tun2socks.service z naslednjo vsebino:

[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 - prevzame ime virtualnega vmesnika, ki ga inicializiramo s systemd-networkd.
  • --netif-ipaddr — omrežni naslov "usmerjevalnika" tun2socks, na katerega je povezan virtualni vmesnik. Bolje je, da je ločeno rezervirano podomrežje.
  • --socks-server-addr - sprejme vtičnico (адрес:порт strežniki SOCKS).

Če vaš strežnik SOCKS zahteva avtentikacijo, lahko določite parametre --username и --password.

Nato registrirajte storitev

systemctl daemon-reload

In ga vklopite

systemctl enable tun2socks

Pred zagonom storitve ji bomo zagotovili virtualni omrežni vmesnik.

Preklop na systemd-networkd

Vključujemo systemd-networkd:

systemctl enable systemd-networkd

Onemogoči trenutne omrežne storitve.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-wait-online je storitev, ki čaka na delujočo omrežno povezavo, preden systemd nadaljuje z zagonom drugih storitev, ki so odvisne od prisotnosti omrežja. Onemogočimo ga, ko preklopimo na analog systemd-networkd.

Omogočimo ga takoj:

systemctl enable systemd-networkd-wait-online

Nastavite brezžični omrežni vmesnik

Ustvarite konfiguracijsko datoteko systemd-networkd za brezžični omrežni vmesnik /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • Ime je ime vašega brezžičnega vmesnika. Prepoznajte ga z ukazom ip a.
  • IPForward - direktiva, ki omogoča preusmeritev paketov na omrežnem vmesniku.
  • Naslov: je odgovoren za dodelitev naslova IP brezžičnemu vmesniku. Določimo ga statično, ker z enakovredno direktivo DHCP=yes, systemd-networkd ustvari privzeti prehod v sistemu. Potem bo ves promet šel skozi izvirni prehod in ne skozi prihodnji virtualni vmesnik v drugem podomrežju. Trenutni privzeti prehod lahko preverite z ukazom ip r

Ustvarite statično pot za oddaljeni strežnik SOCKS

Če vaš strežnik SOCKS ni lokalni, temveč oddaljeni, potem morate zanj ustvariti statično pot. Če želite to narediti, dodajte razdelek Route do konca konfiguracijske datoteke brezžičnega vmesnika, ki ste jo ustvarili z naslednjo vsebino:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway — to je privzeti prehod ali naslov vaše prvotne dostopne točke.
  • Destination — Naslov strežnika SOCKS.

Konfigurirajte wpa_supplicant za systemd-networkd

systemd-networkd uporablja wpa_supplicant za povezavo z varno dostopno točko. Ko poskuša "dvigniti" brezžični vmesnik, systemd-networkd zažene storitev wpa_supplicant@имяČe Prvo ime je ime brezžičnega vmesnika. Če do te točke še niste uporabljali systemd-networkd, potem ta storitev verjetno manjka v vašem sistemu.

Ustvarite ga torej z ukazom:

systemctl enable wpa_supplicant@wlp6s0

uporabil sem wlp6s0 kot ime njegovega brezžičnega vmesnika. Vaše ime je lahko drugačno. Prepoznate ga lahko z ukazom ip l.

Zdaj ustvarjena storitev wpa_supplicant@wlp6s0 se bo zagnal, ko je brezžični vmesnik "dvignjen", vendar pa bo poiskal nastavitve SSID in gesla dostopne točke v datoteki /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Zato ga morate ustvariti s pomočjo pripomočka wpa_passphrase.

Če želite to narediti, zaženite ukaz:

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

če SSID je ime vaše dostopne točke, geslo je geslo in wlp6s0 — ime vašega brezžičnega vmesnika.

Inicializirajte virtualni vmesnik za tun2socks

Ustvarite datoteko za inicializacijo novega virtualnega vmesnika v sistemu/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • Ime je ime, ki ga bo systemd-networkd dodelil bodočemu virtualnemu vmesniku, ko bo inicializiran.
  • Otrok je vrsta virtualnega vmesnika. Iz imena storitve tun2socks lahko sklepate, da uporablja vmesnik, kot je tun.
  • netdev je razširitev datotek, ki systemd-networkd Uporablja se za inicializacijo navideznih omrežnih vmesnikov. Naslov in druge omrežne nastavitve za te vmesnike so določene v .mreža-datoteke.

Ustvarite datoteko, kot je ta /etc/systemd/network/25-tun2socks.network z naslednjo vsebino:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • Name — ime virtualnega vmesnika, ki ste ga določili netdev-mapa.
  • Address — Naslov IP, ki bo dodeljen virtualnemu vmesniku. Mora biti v istem omrežju kot naslov, ki ste ga navedli v storitvi tun2socks
  • Gateway — naslov IP "usmerjevalnika" tun2socks, ki ste ga določili pri ustvarjanju storitve systemd.

Torej vmesnik tun2socks ima naslov 172.16.1.2, in storitev tun2socks - 172.16.1.1, torej je prehod za vse povezave iz virtualnega vmesnika.

Nastavite virtualno dostopno točko

Namestitvene odvisnosti:

apt install util-linux procps hostapd iw haveged

Prenesite repozitorij create_ap v vaš avto:

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

Pojdite v mapo skladišča na vašem računalniku:

cd create_ap

Namestite v sistem:

make install

Na vašem sistemu se bo pojavila konfiguracija /etc/create_ap.conf. Tu so glavne možnosti urejanja:

  • GATEWAY=10.0.0.1 — bolje je, da je ločeno rezervirano podomrežje.
  • NO_DNS=1 - onemogoči, ker bo ta parameter upravljal virtualni vmesnik systemd-networkd.
  • NO_DNSMASQ=1 - iz istega razloga ga izklopite.
  • WIFI_IFACE=wlp6s0 — brezžični vmesnik za prenosni računalnik.
  • INTERNET_IFACE=tun2socks - virtualni vmesnik, ustvarjen za tun2socks.
  • SSID=hostapd — ime virtualne dostopne točke.
  • PASSPHRASE=12345678 - geslo.

Ne pozabite omogočiti storitve:

systemctl enable create_ap

Omogoči strežnik DHCP v systemd-networkd

Storitev create_ap inicializira virtualni vmesnik v sistemu Ap0. Teoretično dnsmasq visi na tem vmesniku, a zakaj nameščati dodatne storitve, če systemd-networkd vsebuje vgrajen strežnik DHCP?

Da bi jo omogočili, bomo določili omrežne nastavitve za virtualno točko. Če želite to narediti, ustvarite datoteko /etc/systemd/network/25-ap0.network z naslednjo vsebino:

[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

Ko storitev create_ap inicializira virtualni vmesnik ap0, mu bo systemd-networkd samodejno dodelil naslov IP in omogočil strežnik DHCP.

Strune EmitDNS=yes и DNS=10.0.0.1 prenos nastavitev strežnika DNS napravam, povezanim z dostopno točko.

Če ne nameravate uporabljati lokalnega strežnika DNS - v mojem primeru je to dnscrypt-proxy - lahko namestite DNS=10.0.0.1 в DNS=192.168.1.1Če 192.168.1.1 — naslov vašega prvotnega prehoda. Nato bodo zahteve DNS za vašega gostitelja in lokalno omrežje šle nešifrirane prek strežnikov ponudnika.

EmitNTP=yes и NTP=192.168.1.1 prenos nastavitev NTP.

Enako velja za linijo NTP=10.0.0.1.

Namestite in konfigurirajte strežnik NTP

Namestite v sistem:

apt install ntp

Uredite konfiguracijo /etc/ntp.conf. Komentirajte naslove standardnih bazenov:

#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

Dodajte naslove javnih strežnikov, na primer Google Public NTP:

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

Odjemalcem v vašem omrežju omogočite dostop do strežnika:

restrict 10.0.0.0 mask 255.255.255.0

Omogoči oddajanje v vaše omrežje:

broadcast 10.0.0.255

Nazadnje dodajte naslove teh strežnikov v statično usmerjevalno tabelo. Če želite to narediti, odprite konfiguracijsko datoteko brezžičnega vmesnika /etc/systemd/network/25-wlp6s0.network in dodajte na konec razdelka 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

S pomočjo pripomočka lahko najdete naslove svojih strežnikov NTP host kot sledi:

host time1.google.com

Namestite dnscrypt-proxy, odstranite oglase in skrijte promet DNS pred svojim ponudnikom

apt install dnscrypt-proxy

Če želite služiti poizvedbam DNS gostitelja in lokalnega omrežja, uredite vtičnico /lib/systemd/system/dnscrypt-proxy.socket. Spremenite naslednje vrstice:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Ponovni zagon systemd:

systemctl daemon-reload

Uredite konfiguracijo /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

Za usmerjanje povezav dnscrypt-proxy prek tun2socks dodajte spodaj:

force_tcp = true

Uredite konfiguracijo /etc/resolv.conf, ki strežniku DNS sporoči gostitelja.

nameserver 127.0.0.1
nameserver 192.168.1.1

Prva vrstica omogoča uporabo dnscrypt-proxyja, druga vrstica uporablja originalni prehod v primeru, da dnscrypt-proxy strežnik ni na voljo.

Končano!

Znova zaženite ali ustavite izvajanje omrežnih storitev:

systemctl stop networking NetworkManager NetworkManager-wait-online

In znova zaženite vse potrebno:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Po ponovnem zagonu ali ponovnem zagonu boste imeli drugo dostopno točko, ki usmerja gostitelja in naprave LAN na SOCKS.

Tako izgleda rezultat ip a običajni prenosnik:

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

Kot rezultat,

  1. Ponudnik vidi samo šifrirano povezavo z vašim strežnikom SOCKS, kar pomeni, da ne vidi ničesar.
  2. In kljub temu vidi vaše zahteve NTP, da to preprečite, odstranite statične poti za strežnike NTP. Vendar pa ni gotovo, da vaš strežnik SOCKS dovoljuje protokol NTP.

Crutch opažen na Debainu 10

Če poskusite znova zagnati omrežno storitev s konzole, ne bo uspelo z napako. To je posledica dejstva, da je njen del v obliki virtualnega vmesnika vezan na storitev tun2socks, kar pomeni, da se uporablja. Če želite znova zagnati omrežno storitev, morate najprej ustaviti storitev tun2socks. Ampak, mislim, da če preberete do konca, to zagotovo ni problem za vas!

reference

  1. Statično usmerjanje v Linuxu - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Ta skript ustvari NATed ali Bridged WiFi Access Point.
  5. dnscrypt-proxy 2 — Prilagodljiv DNS proxy s podporo za šifrirane DNS protokole.

Vir: www.habr.com