Izrada rutera u SOCKS-u na Debian 10 laptopu

Cijelu godinu (dvije) odgađam objavljivanje ovog članka iz glavnog razloga - već sam objavio dva članka u kojima sam opisao proces kreiranja rutera u SOCKS-u od najobičnijeg laptopa s Debianom.

Međutim, otkako je Debian stabilna nadograđena na Buster, imao sam priličan broj ljudi koji su mi se obratili tražeći pomoć oko postavljanja, što znači da moji prethodni članci nisu iscrpni. Pa, i sam sam pretpostavio da metode opisane u njima ne otkrivaju u potpunosti sve suptilnosti podešavanja Linuxa za rutiranje na SOCKS. Osim toga, napisane su za Debian Stretch, a nakon nadogradnje na Buster, u sistemu systemd init, primijetio sam blagu promjenu u interakciji servisa. A u samim člancima nisam koristio systemd-networkd, iako je najprikladniji za složene mrežne konfiguracije.

Pored gore navedenih promjena, u moju konfiguraciju su dodane sljedeće usluge: hostapd - servis za virtuelizaciju pristupne tačke, ntp za sinhronizaciju vremena klijenata lokalne mreže, dnscrypt-proxy šifrirati veze putem DNS protokola i onemogućiti oglašavanje na klijentima lokalne mreže, a također, kao što sam ranije spomenuo, systemd-networkd za konfigurisanje mrežnih interfejsa.

Evo najjednostavnijeg blok dijagrama unutrašnje strukture takvog rutera.

Izrada rutera u SOCKS-u na Debian 10 laptopu

Dakle, podsjetit ću vas koje ciljeve ima serija ovih članaka:

  1. Usmjerite sve OS konekcije na SOCKS, kao i veze svih uređaja koji su na istoj mreži kao i laptop.
  2. Laptop u mom slučaju mora ostati potpuno mobilan. Odnosno, dati mogućnost korištenja desktop okruženja i ne biti vezan za fizičku lokaciju.
  3. Posljednja tačka podrazumijeva povezivanje i rutiranje samo preko ugrađenog bežičnog interfejsa.
  4. Pa, naravno, izrada iscrpnog vodiča, kao i analiza relevantnih tehnologija po mom najboljem znanju.

Šta će biti pokriveno u ovom članku:

  1. git - preuzimanje repozitorija projekta tun2sockspotrebno za usmjeravanje TCP prometa na SOCKS, i create_ap - skripta za automatizaciju konfiguracije virtuelne pristupne tačke koristeći hostapd.
  2. tun2socks - izgraditi i instalirati systemd servis na sistemu.
  3. systemd-networkd - konfigurirati bežična i virtuelna sučelja, statičke tablice rutiranja i prosljeđivanje paketa.
  4. create_ap - instalirati systemd servis u sistem, konfigurisati i pokrenuti virtuelnu pristupnu tačku.

Opcioni koraci:

  • ntp - instalirati i konfigurisati server za vremensku sinhronizaciju na klijentima virtuelne pristupne tačke.
  • dnscrypt-proxy - šifrirajte DNS zahtjeve, usmjerite ih na SOCKS i onemogućite reklamne domene za lokalnu mrežu.

Čemu ovo sve služi?

Ovo je jedan od načina organiziranja zaštite TCP veza na lokalnoj mreži. Glavna prednost je da sve veze idu na SOCKS osim ako se za njih ne izgradi statična ruta kroz originalni gateway. To znači da ne morate pisati postavke SOCKS servera bilo pojedinačnim programima ili klijentima na lokalnoj mreži - svi oni idu na SOCKS po defaultu, pošto je to zadani gateway, dok ne odredimo drugačije.

U osnovi, dodajemo drugi ruter za enkripciju kao laptop ispred originalnog rutera i koristimo internetsku vezu originalnog rutera za već SOCKS šifrovane zahtjeve laptopa, koji zauzvrat usmjerava i šifrira zahtjeve od LAN klijenata.

Sa stanovišta provajdera, stalno smo povezani na isti server sa šifrovanim saobraćajem.

Shodno tome, svi uređaji su povezani na virtuelnu pristupnu tačku laptopa.

Instalirajte tun2socks na svoj sistem

Sve dok imate internet na svom računaru, preuzmite sve potrebne alate.

apt update
apt install git make cmake

Preuzmite badvpn paket

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

Na vašem sistemu će se pojaviti fascikla badvpn. Kreirajte posebnu fasciklu za izgradnju

mkdir badvpn-build

Idi u to

cd badvpn-build

Skupiti tun2socks

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

Instalirajte u sistemu

make install
  • Parametar -DBUILD_NOTHING_BY_DEFAULT=1 onemogućuje izgradnju svih komponenti badvpn spremišta.
  • -DBUILD_TUN2SOCKS=1 uključuje komponentu u sklopu tun2socks.
  • make install - će instalirati tun2socks binarnu datoteku na vaš sistem na adresi /usr/local/bin/badvpn-tun2socks.

Instalirajte tun2socks uslugu u systemd

Kreirajte fajl /etc/systemd/system/tun2socks.service sa sljedećim sadržajem:

[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 - uzima ime virtuelnog interfejsa koji inicijalizujemo sa systemd-networkd.
  • --netif-ipaddr - mrežna adresa "rutera" tun2socks, na koji je povezan virtuelni interfejs. Bolje je da bude odvojeno rezervisana podmreža.
  • --socks-server-addr - prihvata utičnicu (адрес:порт SOCKS server).

Ako vaš SOCKS server zahtijeva autentifikaciju, možete odrediti opcije --username и --password.

Zatim registrirajte uslugu

systemctl daemon-reload

I upali

systemctl enable tun2socks

Prije pokretanja usluge, osigurat ćemo joj virtualni mrežni interfejs.

Prelazak na systemd-networkd

Uključi systemd-networkd:

systemctl enable systemd-networkd

Onemogućite trenutne mrežne usluge.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-čekaj-online je usluga koja čeka ispravnu mrežnu vezu prije nego što systemd nastavi s pokretanjem drugih usluga zavisnih od mreže. Onemogućavamo ga dok prelazimo na analogni sistem systemd-networkd.

Omogućimo odmah:

systemctl enable systemd-networkd-wait-online

Podesite interfejs bežične mreže

Kreirajte konfiguracionu datoteku systemd-networkd za interfejs bežične mreže /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • Ime je naziv vašeg bežičnog interfejsa. Identifikujte ga komandom ip a.
  • IP Forward je direktiva koja omogućava prosljeđivanje paketa na mrežnom sučelju.
  • Adresa je odgovoran za dodeljivanje IP adrese bežičnom interfejsu. Navodimo ga statički jer s ekvivalentnom direktivom DHCP=yes, systemd-networkd kreira default gateway na sistemu. Tada će sav promet ići kroz originalni gateway, a ne kroz budući virtuelni interfejs na drugoj podmreži. Možete provjeriti trenutni default gateway pomoću naredbe ip r

Kreirajte statičku rutu za udaljeni SOCKS server

Ako vaš SOCKS server nije lokalni, već udaljen, tada morate kreirati statičku rutu za njega. Da biste to učinili, dodajte odjeljak Route do kraja konfiguracijske datoteke bežičnog sučelja koju ste kreirali sa sljedećim sadržajem:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway je podrazumevani gateway ili adresa vaše originalne pristupne tačke.
  • Destination - Adresa servera SOCKS.

Postavite wpa_supplicant za systemd-networkd

systemd-networkd koristi wpa_supplicant za povezivanje na sigurnu pristupnu tačku. Prilikom pokušaja "dozvanja" bežičnog interfejsa, systemd-networkd pokreće uslugu wpa_supplicant@имяgde Ime je naziv bežičnog interfejsa. Ako do sada niste koristili systemd-networkd, onda vjerovatno nemate ovu uslugu na svom sistemu.

Zato ga kreirajte naredbom:

systemctl enable wpa_supplicant@wlp6s0

koristio sam wlp6s0 kao naziv vašeg bežičnog interfejsa. Vaše ime može biti drugačije. Možete ga prepoznati pomoću naredbe ip l.

Sada kreirana usluga wpa_supplicant@wlp6s0 će se pokrenuti kada je bežično sučelje „gore“, međutim, zauzvrat će tražiti postavke SSID-a i lozinke pristupne točke u datoteci /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Stoga ga morate kreirati pomoću uslužnog programa wpa_passphrase.

Da biste to učinili, pokrenite naredbu:

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

gdje SSID je naziv vaše pristupne tačke, lozinka je lozinka i wlp6s0 je naziv vašeg bežičnog interfejsa.

Inicijalizirajte virtuelni interfejs za tun2socks

Kreirajte fajl za inicijalizaciju novog virtuelnog interfejsa na sistemu/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • Ime je ime koje će systemd-networkd dodijeliti budućem virtuelnom sučelju kada se inicijalizira.
  • vrsta je tip virtuelnog interfejsa. Iz naziva usluge tun2socks možete pretpostaviti da koristi sučelje poput tun.
  • netdev je ekstenzija datoteka koje systemd-networkd koristi za inicijalizaciju virtualnih mrežnih sučelja. Adresa i druge mrežne postavke za ova sučelja su specificirane u .mreža-fajlovi.

Napravite takav fajl /etc/systemd/network/25-tun2socks.network sa sljedećim sadržajem:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • Name je naziv virtuelnog interfejsa koji ste naveli netdev-file.
  • Address — IP adresa koja će biti dodeljena virtuelnom interfejsu. Mora biti na istoj mreži kao adresa koju ste naveli u tun2socks servisu
  • Gateway - IP adresa "rutera" tun2socks, koji ste naveli prilikom kreiranja systemd usluge.

Dakle, interfejs tun2socks ima adresu 172.16.1.2, i usluga tun2socks - 172.16.1.1, odnosno, to je gateway za sve veze sa virtuelnog interfejsa.

Postavite virtuelnu pristupnu tačku

Instalirajte ovisnosti:

apt install util-linux procps hostapd iw haveged

Preuzmite spremište create_ap do vašeg automobila:

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

Idite do foldera spremišta na vašem računaru:

cd create_ap

Instalirajte u sistem:

make install

config će se pojaviti na vašem sistemu /etc/create_ap.conf. Evo glavnih opcija za uređivanje:

  • GATEWAY=10.0.0.1 - bolje je napraviti zasebnu rezervisanu podmrežu.
  • NO_DNS=1 - isključite, jer će ovaj parametar biti kontrolisan od strane virtuelnog interfejsa systemd-networkd.
  • NO_DNSMASQ=1 - isključite iz istog razloga.
  • WIFI_IFACE=wlp6s0 — bežični interfejs za laptop.
  • INTERNET_IFACE=tun2socks je virtuelni interfejs kreiran za tun2socks.
  • SSID=hostapd — naziv virtuelne pristupne tačke.
  • PASSPHRASE=12345678 - lozinka.

Ne zaboravite da omogućite uslugu:

systemctl enable create_ap

Omogućite DHCP server u systemd-networkd

Servis create_ap inicijalizira virtuelni interfejs u sistemu ap0. U teoriji, dnsmasq "visi" na ovom interfejsu, ali zašto instalirati dodatne usluge ako systemd-networkd sadrži ugrađeni DHCP server?

Da bismo to omogućili, definirajmo mrežne postavke za virtuelnu tačku. Da biste to učinili, kreirajte datoteku /etc/systemd/network/25-ap0.network sa sljedećim sadržajem:

[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

Nakon što usluga create_ap inicijalizira virtuelni interfejs ap0, systemd-networkd će mu automatski dodijeliti IP adresu i omogućiti DHCP server.

Strings EmitDNS=yes и DNS=10.0.0.1 prenijeti postavke DNS servera na uređaje povezane na pristupnu tačku.

Ako ne planirate koristiti lokalni DNS server - u mom slučaju to je dnscrypt-proxy - možete instalirati DNS=10.0.0.1 в DNS=192.168.1.1gde 192.168.1.1 je adresa vašeg originalnog gatewaya. Tada će DNS upiti vašeg hosta i lokalne mreže ići nešifrirani kroz servere provajdera.

EmitNTP=yes и NTP=192.168.1.1 proći NTP postavke.

Isto važi i za liniju NTP=10.0.0.1.

Instalirajte i konfigurišite NTP server

Instalirajte u sistem:

apt install ntp

Uredite konfiguraciju /etc/ntp.conf. Komentirajte adrese standardnih skupova:

#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 adrese javnih servera, kao što je Google javni NTP:

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

Odobrite pristup serveru klijentima sa vaše mreže:

restrict 10.0.0.0 mask 255.255.255.0

Omogućite emitiranje na vašoj mreži:

broadcast 10.0.0.255

Na kraju, dodajte adrese ovih servera u statičku tabelu usmjeravanja. Da biste to učinili, otvorite konfiguracijsku datoteku bežičnog interfejsa /etc/systemd/network/25-wlp6s0.network i dodajte na kraj odjeljka 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

Pomoću uslužnog programa možete saznati adrese svojih NTP servera host kako slijedi:

host time1.google.com

Instalirajte dnscrypt-proxy, uklonite oglase i sakrijte DNS promet od ISP-a

apt install dnscrypt-proxy

Da biste poslužili DNS upite na hostu i lokalnoj mreži, uredite utičnicu /lib/systemd/system/dnscrypt-proxy.socket. Promijenite sljedeće redove:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Ponovo pokreni systemd:

systemctl daemon-reload

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

server_names = ['adguard-dns']

Za usmjeravanje dnscrypt-proxy veza preko tun2socks dodajte sljedeće:

force_tcp = true

Uredite konfiguraciju /etc/resolv.conf, koji govori DNS serveru hostu.

nameserver 127.0.0.1
nameserver 192.168.1.1

Prvi red omogućava korištenje dnscrypt-proxy, drugi koristi originalni gateway u slučaju da je dnscrypt-proxy server nedostupan.

Gotovo!

Ponovo pokrenite ili zaustavite pokretanje mrežnih usluga:

systemctl stop networking NetworkManager NetworkManager-wait-online

I ponovo pokrenite sve što je potrebno:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Nakon ponovnog pokretanja ili ponovnog pokretanja, imat ćete drugu pristupnu tačku koja usmjerava host i LAN uređaje na SOCKS.

Izlaz izgleda ovako ip a običan 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

Kao rezultat toga,

  1. Provajder vidi samo šifrovanu vezu sa vašim SOCKS serverom, što znači da ne vidi ništa.
  2. I dalje vidi vaše NTP zahtjeve, da biste to spriječili, uklonite statičke rute za NTP servere. Međutim, nije sigurno da vaš SOCKS server dozvoljava NTP protokol.

Štaka viđena na Debainu 10

Ako pokušate ponovo pokrenuti mrežnu uslugu s konzole, ona će se srušiti s greškom. To je zbog činjenice da je njegov dio u obliku virtuelnog interfejsa vezan za tun2socks uslugu, što znači da se koristi. Da biste ponovo pokrenuli mrežnu uslugu, prvo morate zaustaviti uslugu tun2socks. Ali, mislim da ako pročitate do kraja, to vam definitivno nije problem!

reference

  1. Statičko usmjeravanje na Linuxu - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks ambrop72/badvpn Wiki GitHub
  4. oblique/create_ap: Ova skripta kreira NAT ili Bridged WiFi pristupnu tačku.
  5. dnscrypt-proxy 2 - Fleksibilni DNS proxy, sa podrškom za šifrovane DNS protokole.

izvor: www.habr.com