Custruì un router in SOCKS nantu à un laptop cù Debian 10

Per un annu sanu (o dui) aghju rimettutu a publicazione di questu articulu per u mutivu principale - avia digià publicatu dui articuli in quale aghju descrittu u prucessu di creà un router in SOCKS da un laptop assai ordinariu cù Debian.

Tuttavia, da tandu a versione stabile di Debian hè stata aghjurnata à Buster, un numeru suffirenziu di persone m'hà cuntattatu privatu per dumandà aiutu cù a stallazione, chì significa chì i mo articuli precedenti ùn sò micca exhaustivi. Ebbè, aghju indovinatu chì i metudi descritti in elli ùn palesanu micca tutte l'intricacies di stallà Linux per routing in SOCKS. Inoltre, sò scritti per Debian Stretch, è dopu l'aghjurnamentu à Buster, in u sistema systemd init, aghju nutatu picculi cambiamenti in l'interazzione di servizii. È in l'articuli stessi, ùn aghju micca utilizatu systemd-networkd, ancu s'ellu hè megliu adattatu per cunfigurazioni di rete cumplessi.

In più di i cambiamenti sopra, i seguenti servizii sò stati aghjuntu à a mo cunfigurazione: hostapd - serviziu per a virtualizazione di u puntu di accessu, ntp per sincronizà l'ora di i clienti di a rete locale, dnscrypt-proxy per criptà e cunnessione via DNS è disattivà a publicità nantu à i clienti di a rete locale, è ancu, cum'è aghju dettu prima, systemd-networkd per cunfigurà l'interfaccia di rete.

Eccu un schema di bloccu simplice di a struttura interna di un tali router.

Custruì un router in SOCKS nantu à un laptop cù Debian 10

Dunque, lasciami ricurdà ciò chì i scopi di sta serie d'articuli sò:

  1. Rutta tutte e cunnessione OS à SOCKS, è ancu e cunnessione da tutti i dispositi nantu à a stessa reta cum'è u laptop.
  2. U laptop in u mo casu deve esse cumpletamente mobile. Questu hè, per dà l'uppurtunità di utilizà l'ambiente di u desktop è micca esse ligatu à un locu fisicu.
  3. L'ultimu puntu implica a cunnessione è u routing solu per l'interfaccia wireless integrata.
  4. Ebbè, è sicuru, a creazione di una guida cumpleta, è ancu una analisi di e tecnulugia pertinenti à u megliu di a mo modesta cunniscenza.

Ciò chì serà coperto in questu articulu:

  1. andà - scaricate repository di prughjettu tun2socksnecessariu per indirizzà u trafficu TCP à SOCKS, è creà_ap - un script per automatizà a cunfigurazione di un puntu d'accessu virtuale utilizendu hostapd.
  2. tun2socks - custruite è installate u serviziu systemd nantu à u sistema.
  3. systemd-networkd - cunfigurà interfacce wireless è virtuale, tabelle di routing staticu è redirezzione di pacchetti.
  4. creà_ap - installate u serviziu systemd in u sistema, cunfigurà è lanciate un puntu d'accessu virtuale.

Passi opzionali:

  • ntp - installate è cunfigurà un servitore per sincronizà u tempu nantu à i clienti di punti d'accessu virtuale.
  • dnscrypt-proxy - Cripteremu e dumande di DNS, indirizzemu à SOCKS è disattiveremu i domini di publicità per a reta lucale.

Chì ghjè tuttu questu per ?

Questu hè unu di i modi per assicurà e cunnessione TCP in una reta lucale. U vantaghju principalu hè chì tutte e cunnessione sò fatte in SOCKS, salvu chì una strada statica hè custruita per elli attraversu u gateway originale. Questu significa chì ùn avete micca bisognu di specificà i paràmetri di u servitore SOCKS per i prugrammi individuali o per i clienti nantu à a reta lucale - tutti vanu à SOCKS per automaticamente, postu chì hè a porta predeterminata finu à chì indichemu altrimenti.

Essenzialmente, aghjustemu un secondu router di criptografia cum'è un laptop davanti à u router originale è utilizemu a cunnessione Internet di u router originale per e richieste SOCKS di u laptop digià criptate, chì à turnu indirizza è cripta e richieste da i clienti LAN.

Da u puntu di vista di u fornitore, simu constantemente cunnessi à un servitore cù trafficu criptatu.

Dunque, tutti i dispositi sò cunnessi à u puntu d'accessu virtuale di u laptop.

Installa tun2socks nantu à u sistema

Sempre chì a vostra macchina hà internet, scaricate tutti i strumenti necessarii.

apt update
apt install git make cmake

Scaricate u pacchettu badvpn

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

Un cartulare apparirà in u vostru sistema badvpn. Crea un cartulare separatu per a custruzione

mkdir badvpn-build

Andate à ellu

cd badvpn-build

Cullate tun2socks

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

Installa nantu à u sistema

make install
  • Parameter -DBUILD_NOTHING_BY_DEFAULT=1 disattiva a creazione di tutti i cumpunenti di u repository badvpn.
  • -DBUILD_TUN2SOCKS=1 include un cumpunente in l'assemblea tun2socks.
  • make install - installerà u binariu tun2socks in u vostru sistema à /usr/local/bin/badvpn-tun2socks.

Installa u serviziu tun2socks in systemd

Crea un schedariu /etc/systemd/system/tun2socks.service cù u seguenti cuntenutu:

[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 - piglia u nome di l'interfaccia virtuale chì avemu inizializatu cù systemd-networkd.
  • --netif-ipaddr - l'indirizzu di a reta di u "router" tun2socks à quale l'interfaccia virtuale hè cunnessa. Hè megliu per fà separatu subnet riservata.
  • --socks-server-addr - accetta socket (адрес:порт servitori SOCKS).

Se u vostru servitore SOCKS richiede autentificazione, pudete specificà i paràmetri --username и --password.

Dopu, registrate u serviziu

systemctl daemon-reload

È accende

systemctl enable tun2socks

Prima di inizià u serviziu, avemu da furnisce cù una interfaccia di rete virtuale.

Passendu à systemd-networkd

Accende systemd-networkd:

systemctl enable systemd-networkd

Disattivà i servizii di rete attuali.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-wait-online hè un serviziu chì aspetta una cunnessione di rete di travagliu prima chì systemd cuntinueghja à inizià altri servizii chì dependenu di a presenza di una reta. L'avemu disattivatu mentre cambiamu à l'analogicu systemd-networkd.

Abilitemu subitu:

systemctl enable systemd-networkd-wait-online

Configurate l'interfaccia di a rete wireless

Crea un schedariu di cunfigurazione systemd-networkd per l'interfaccia di rete wireless /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • nomu hè u nome di a vostra interfaccia wireless. Identificà cù u cumandamentu ip a.
  • IPForward - una direttiva chì permette a redirezzione di pacchetti nantu à una interfaccia di rete.
  • indirizzo hè rispunsevule per assignà un indirizzu IP à l'interfaccia wireless. Spicemu staticamente perchè cù a direttiva equivalente DHCP=yes, systemd-networkd crea un gateway predeterminatu in u sistema. Allora tuttu u trafficu passerà per u gateway originale, è micca per l'interfaccia virtuale futura in una subnet differente. Pudete cuntrollà a porta predeterminata attuale cù u cumandimu ip r

Crea una strada statica per u servitore SOCKS remoto

Se u vostru servitore SOCKS ùn hè micca lucale, ma remotu, allora avete bisognu di creà una strada statica per questu. Per fà questu, aghjunghje una sezione Route à a fine di u schedariu di cunfigurazione di l'interfaccia wireless chì avete creatu cù u cuntenutu seguente:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway - questu hè u gateway predeterminatu o l'indirizzu di u vostru puntu d'accessu originale.
  • Destination - L'indirizzu di u servitore SOCKS.

Configurate wpa_supplicant per systemd-networkd

systemd-networkd usa wpa_supplicant per cunnette à un puntu d'accessu sicuru. Quandu prova di "aumentà" l'interfaccia wireless, systemd-networkd principia u serviziu wpa_supplicant@имяinduve nome hè u nome di l'interfaccia wireless. Se ùn avete micca usatu systemd-networkd prima di questu puntu, allora stu serviziu hè probabilmente mancatu in u vostru sistema.

Allora creanu cù u cumandimu:

systemctl enable wpa_supplicant@wlp6s0

Aghju utilizatu wlp6s0 cum'è u nome di a so interfaccia wireless. U vostru nome pò esse diversu. Pudete ricunnosce cù u cumandamentu ip l.

Avà u serviziu creatu wpa_supplicant@wlp6s0 serà lanciata quandu l'interfaccia wireless hè "alzata", in ogni modu, à u turnu, cercherà i paràmetri di SSID è password di u puntu d'accessu in u schedariu. /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Dunque, avete bisognu di creà cù l'utilità wpa_passphrase.

Per fà questu, eseguite u cumandimu:

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

induve SSID hè u nome di u vostru puntu d'accessu, a password hè a password, è wlp6s0 - u nome di a vostra interfaccia wireless.

Inizializza l'interfaccia virtuale per tun2socks

Crea un schedariu per inizializà una nova interfaccia virtuale in u sistema/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • nomu hè u nome chì systemd-networkd assignerà à a futura interfaccia virtuale quandu hè inizializzata.
  • curtisi hè un tipu d'interfaccia virtuale. Da u nome di u serviziu tun2socks, pudete guessà chì usa una interfaccia cum'è tun.
  • netdev hè l'estensione di i schedari chì systemd-networkd Aduprà per inizializà interfacce di rete virtuale. L'indirizzu è altri paràmetri di rete per queste interfacce sò specificati in .rete- i schedari.

Crea un schedariu cum'è questu /etc/systemd/network/25-tun2socks.network cù u seguenti cuntenutu:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • Name - u nome di l'interfaccia virtuale chì avete specificatu netdev- schedariu.
  • Address - Indirizzu IP chì serà assignatu à l'interfaccia virtuale. Deve esse in a listessa reta cum'è l'indirizzu chì avete specificatu in u serviziu tun2socks
  • Gateway - Indirizzu IP di u "router" tun2socks, chì avete specificatu quandu crea u serviziu systemd.

Allora l'interfaccia tun2socks hà un indirizzu 172.16.1.2, è u serviziu tun2socks - 172.16.1.1, vale à dì, hè u gateway per tutte e cunnessione da l'interfaccia virtuale.

Configurate un puntu d'accessu virtuale

Installa dipendenze:

apt install util-linux procps hostapd iw haveged

Scaricate u repository crià_ap à a vostra vittura:

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

Andate à u cartulare di repository in a vostra macchina:

cd create_ap

Installa nantu à u sistema:

make install

Una cunfigurazione apparirà nantu à u vostru sistema /etc/create_ap.conf. Eccu i principali opzioni di edizione:

  • GATEWAY=10.0.0.1 - hè megliu fà un subnet riservatu separatu.
  • NO_DNS=1 - disattivà, postu chì stu paràmetru serà gestitu da l'interfaccia virtuale systemd-networkd.
  • NO_DNSMASQ=1 - spegne per u listessu mutivu.
  • WIFI_IFACE=wlp6s0 - interfaccia wireless per laptop.
  • INTERNET_IFACE=tun2socks - una interfaccia virtuale creata per tun2socks.
  • SSID=hostapd - nome di u puntu d'accessu virtuale.
  • PASSPHRASE=12345678 - codice.

Ùn vi scurdate di attivà u serviziu:

systemctl enable create_ap

Habilita u servitore DHCP in systemd-networkd

Serviziu create_ap inizializza una interfaccia virtuale in u sistema ap0. In teoria, dnsmasq pende nantu à questa interfaccia, ma perchè installà servizii extra se systemd-networkd cuntene un servitore DHCP integratu?

Per attivà, avemu da definisce i paràmetri di a rete per u puntu virtuale. Per fà questu, crea un schedariu /etc/systemd/network/25-ap0.network cù u seguenti cuntenutu:

[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

Dopu chì u serviziu create_ap inizializza l'interfaccia virtuale ap0, systemd-networkd l'assignarà automaticamente un indirizzu IP è attivà u servitore DHCP.

Corde EmitDNS=yes и DNS=10.0.0.1 trasmette i paràmetri di u servitore DNS à i dispositi cunnessi à u puntu d'accessu.

Se ùn pensate micca di utilizà un servitore DNS locale - in u mo casu hè dnscrypt-proxy - pudete installà DNS=10.0.0.1 в DNS=192.168.1.1induve 192.168.1.1 - l'indirizzu di u vostru gateway originale. Allora e dumande DNS per u vostru òspite è a rete locale andaranu micca criptate attraversu i servitori di u fornitore.

EmitNTP=yes и NTP=192.168.1.1 trasferimentu paràmetri NTP.

U stessu passa per a linea NTP=10.0.0.1.

Installa è cunfigurà u servitore NTP

Installa nantu à u sistema:

apt install ntp

Edite a cunfigurazione /etc/ntp.conf. Commentate l'indirizzi di e piscine standard:

#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

Aghjunghjite l'indirizzi di u servitore publicu, per esempiu Google Public NTP:

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

Fornite accessu à u servitore à i clienti in a vostra reta:

restrict 10.0.0.0 mask 255.255.255.0

Abilita a trasmissione à a vostra reta:

broadcast 10.0.0.255

Infine, aghjunghje l'indirizzi di questi servitori à a tabella di routing staticu. Per fà questu, apre u schedariu di cunfigurazione di l'interfaccia wireless /etc/systemd/network/25-wlp6s0.network è aghjunghje à a fine di a rùbbrica 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

Pudete truvà l'indirizzi di i vostri servitori NTP cù l'utilità host a siguenti:

host time1.google.com

Installa dnscrypt-proxy, sguassate l'annunzii è oculte u trafficu DNS da u vostru fornitore

apt install dnscrypt-proxy

Per serve l'ospiti è e dumande DNS di a rete locale, edità u socket /lib/systemd/system/dnscrypt-proxy.socket. Cambia e seguenti linee:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Ripigliate systemd:

systemctl daemon-reload

Edite a cunfigurazione /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

Per indirizzà e cunnessione dnscrypt-proxy attraversu tun2socks, aghjunghje quì sottu:

force_tcp = true

Edite a cunfigurazione /etc/resolv.conf, chì dice à u servitore DNS à l'ospite.

nameserver 127.0.0.1
nameserver 192.168.1.1

A prima linea permette l'usu di dnscrypt-proxy, a seconda linea usa u gateway originale in casu chì u servitore dnscrypt-proxy ùn hè micca dispunibule.

Fattu!

Riavvia o ferma l'esecuzione di servizii di rete:

systemctl stop networking NetworkManager NetworkManager-wait-online

È ripigliate tuttu ciò chì hè necessariu:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Dopu un reboot o restart, avete un secondu puntu d'accessu chì dirige l'ospiti è i dispositi LAN à SOCKS.

Questu hè ciò chì l'output pare ip a laptop ordinariu:

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

Par via di cunsiquenza,

  1. U fornitore vede solu a cunnessione criptata à u vostru servitore SOCKS, chì significa chì ùn vedenu nunda.
  2. È ancu vede e vostre richieste NTP, per impediscenu questu, sguassate e rotte statiche per i servitori NTP. Tuttavia, ùn hè micca sicuru chì u vostru servitore SOCKS permette u protocolu NTP.

Crutch spotted in Debain 10

Se pruvate di riavvia u serviziu di rete da a cunsola, fallarà cù un errore. Questu hè duvuta à u fattu chì una parte di questu in a forma di una interfaccia virtuale hè ligata à u serviziu tun2socks, chì significa chì hè utilizatu. Per ripiglià u serviziu di rete, avete prima di piantà u serviziu tun2socks. Ma, pensu, se leghjite finu à a fine, questu hè definitivamente micca un prublema per voi!

referenze

  1. Routing staticu nantu à Linux - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Stu script crea un Puntu di Accessu WiFi NATed o Bridged.
  5. dnscrypt-proxy 2 - Un proxy DNS flexible, cù supportu per protokolli DNS criptati.

Source: www.habr.com