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.
Dunque, lasciami ricurdà ciò chì i scopi di sta serie d'articuli sò:
Rutta tutte e cunnessione OS à SOCKS, è ancu e cunnessione da tutti i dispositi nantu à a stessa reta cum'è u laptop.
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.
L'ultimu puntu implica a cunnessione è u routing solu per l'interfaccia wireless integrata.
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:
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.
tun2socks - custruite è installate u serviziu systemd nantu à u sistema.
systemd-networkd - cunfigurà interfacce wireless è virtuale, tabelle di routing staticu è redirezzione di pacchetti.
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
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.
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.
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:
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:
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:
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.
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.
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,
U fornitore vede solu a cunnessione criptata à u vostru servitore SOCKS, chì significa chì ùn vedenu nunda.
È 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!