Konstruante enkursigilon en SOCKS sur tekkomputilo kun Debian 10
Dum tuta jaro (aŭ du) mi prokrastis la publikigon de ĉi tiu artikolo pro la ĉefa kialo - mi jam publikigis du artikolojn, en kiuj mi priskribis la procezon de kreado de enkursigilo en SOCKS de tre ordinara tekkomputilo kun Debiano.
Tamen, ekde tiam la stabila versio de Debiano estas ĝisdatigita al Buster, sufiĉa nombro da homoj kontaktis min private petante helpon pri la aranĝo, kio signifas, ke miaj antaŭaj artikoloj ne estas ĝisfundaj. Nu, mi mem divenis, ke la metodoj skizitaj en ili ne plene malkaŝas ĉiujn komplikaĵojn de agordo de Linukso por enrutado en SOCKS. Krome, ili estas skribitaj por Debian Stretch, kaj post ĝisdatigo al Buster, en la systemd init-sistemo, mi rimarkis malgrandajn ŝanĝojn en la interagado de servoj. Kaj en la artikoloj mem, mi ne uzis systemd-networkd, kvankam ĝi plej taŭgas por kompleksaj retaj agordoj.
Krom ĉi-supraj ŝanĝoj, la sekvaj servoj estis aldonitaj al mia agordo: hostapd - servo por virtualigo de alirpunkto, ntp sinkronigi la tempon de lokaj retaj klientoj, dnscrypt-proxy por ĉifri konektojn per DNS kaj malŝalti reklamadon ĉe lokaj retaj klientoj, kaj ankaŭ, kiel mi menciis antaŭe, systemd-networkd por agordi retajn interfacojn.
Jen simpla blokdiagramo de la interna strukturo de tia enkursigilo.
Do, mi memorigu vin, kiaj estas la celoj de ĉi tiu serio de artikoloj:
Itineru ĉiujn OS-konektojn al SOCKS, same kiel konektojn de ĉiuj aparatoj en la sama reto kiel la tekkomputilo.
La tekkomputilo en mia kazo devus resti tute movebla. Tio estas, doni la ŝancon uzi la labortablan medion kaj ne esti ligita al fizika loko.
La lasta punkto implicas konekton kaj vojigon nur per la enkonstruita sendrata interfaco.
Nu, kaj kompreneble, la kreado de ampleksa gvidilo, kaj ankaŭ analizo de la koncernaj teknologioj laŭ mia modesta scio.
Kio estos kovrita en ĉi tiu artikolo:
iri — elŝutu projektajn deponejojn tun2ŝtrumpetojpostulata por direkti TCP-trafikon al SOCKS, kaj krei_ap — skripto por aŭtomatigi la aranĝon de virtuala alirpunkto uzante hostapd.
tun2ŝtrumpetoj — konstrui kaj instali la systemd-servon sur la sistemo.
systemd-networkd — agordi sendratajn kaj virtualajn interfacojn, senmovajn enrutigajn tabelojn kaj pakaĵet-alidirektilon.
krei_ap — instalu la systemd-servon en la sistemo, agordu kaj lanĉu virtualan alirpunkton.
Laŭvolaj paŝoj:
ntp — instali kaj agordi servilon por sinkronigi tempon ĉe virtualaj alirpunktoklientoj.
dnscrypt-proxy — ni ĉifris DNS-petojn, direktos ilin al SOCKS kaj malŝaltos reklamajn domajnojn por la loka reto.
Por kio ĉi tio ĉio?
Ĉi tio estas unu el la manieroj sekurigi TCP-konektojn en loka reto. La ĉefa avantaĝo estas, ke ĉiuj ligoj estas faritaj en Ŝtrumpetoj, krom se statika itinero estas konstruita por ili tra la origina enirejo. Ĉi tio signifas, ke vi ne bezonas specifi SOCKS-servilagordojn por aŭ individuaj programoj aŭ klientoj en la loka reto - ili ĉiuj iras al SOCKS defaŭlte, ĉar ĝi estas la defaŭlta enirejo ĝis ni indikas alie.
Esence ni aldonas duan ĉifran enkursigilon kiel tekkomputilon antaŭ la origina enkursigilo kaj uzas la interretan konekton de la originala enkursigilo por la jam ĉifritaj SOCKS-petoj de la tekokomputilo, kiuj siavice direktas kaj ĉifras petojn de LAN-klientoj.
De la vidpunkto de la provizanto, ni estas konstante konektitaj al unu servilo kun ĉifrita trafiko.
Sekve, ĉiuj aparatoj estas konektitaj al la virtuala alirpunkto de la tekkomputilo.
Instalu tun2socks sur la sistemo
Dum via maŝino havas interreton, elŝutu ĉiujn necesajn ilojn.
apt update
apt install git make cmake
Elŝutu la pakaĵon badvpn
git clone https://github.com/ambrop72/badvpn
Dosierujo aperos en via sistemo badvpn. Kreu apartan dosierujon por la konstruo
--tundev - prenas la nomon de la virtuala interfaco, kiun ni pracigas per systemd-networkd.
--netif-ipaddr — la retadreso de la tun2socks "enkursigilo" al kiu la virtuala interfaco estas konektita. Estas pli bone apartigi ĝin rezervita subreto.
NetworkManager-atendo-enreta estas servo, kiu atendas funkciantan retkonekton antaŭ ol systemd daŭre lanĉas aliajn servojn, kiuj dependas de la ĉeesto de reto. Ni malŝaltas ĝin dum ni ŝanĝas al la analoga systemd-networkd.
Ni ebligu ĝin tuj:
systemctl enable systemd-networkd-wait-online
Agordu la sendratan retan interfacon
Kreu agordan dosieron systemd-networkd por la sendrata reto-interfaco /etc/systemd/network/25-wlp6s0.network.
Nomo estas la nomo de via sendrata interfaco. Identigu ĝin per la komando ip a.
IPForward - direktivo kiu ebligas pakaĵetan alidirekton sur retinterfaco.
Adreso respondecas pri asignado de IP-adreso al la sendrata interfaco. Ni specifas ĝin statike ĉar kun la ekvivalenta direktivo DHCP=yes, systemd-networkd kreas defaŭltan enirejon sur la sistemo. Tiam la tuta trafiko iros tra la originala enirejo, kaj ne tra la estonta virtuala interfaco sur malsama subreto. Vi povas kontroli la nunan defaŭltan enirejon per la komando ip r
Kreu senmovan itineron por la fora SOCKS-servilo
Se via SOCKS-servilo ne estas loka, sed malproksima, tiam vi devas krei statikan itineron por ĝi. Por fari tion, aldonu sekcion Route ĝis la fino de la sendrata interfaca agorda dosiero, kiun vi kreis kun la sekva enhavo:
[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
Gateway — ĉi tio estas la defaŭlta enirejo aŭ la adreso de via originala alirpunkto.
Destination — SOCKS servila adreso.
Agordu wpa_supplicant por systemd-networkd
systemd-networkd uzas wpa_supplicant por konekti al sekura alirpunkto. Provante "altigi" la sendratan interfacon, systemd-networkd lanĉas la servon wpa_supplicant@имяkie имя estas la nomo de la sendrata interfaco. Se vi ne uzis systemd-networkd antaŭ ĉi tiu punkto, tiam ĉi tiu servo verŝajne mankas en via sistemo.
Do kreu ĝin per la komando:
systemctl enable wpa_supplicant@wlp6s0
mi uzis wlp6s0 kiel la nomo de ĝia sendrata interfaco. Via nomo povas esti malsama. Vi povas rekoni ĝin per la komando ip l.
Nun la kreita servo wpa_supplicant@wlp6s0 estos lanĉita kiam la sendrata interfaco estas "levita", tamen ĝi, siavice, serĉos la SSID kaj pasvortajn agordojn de la alirpunkto en la dosiero. /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Tial vi devas krei ĝin per la utileco wpa_passphrase.
kie SSID estas la nomo de via alirpunkto, pasvorto estas la pasvorto, kaj wlp6s0 — la nomo de via sendrata interfaco.
Komencu la virtualan interfacon por tun2socks
Kreu dosieron por pravalorigi novan virtualan interfacon en la sistemo/etc/systemd/network/25-tun2socks.netdev
[NetDev]
Name=tun2socks
Kind=tun
Nomo estas la nomo, kiun systemd-networkd asignos al la estonta virtuala interfaco kiam ĝi estas pravalorigita.
speco estas speco de virtuala interfaco. El la nomo de la servo tun2socks, vi povas diveni, ke ĝi uzas interfacon kiel tun.
netdev estas la etendo de dosieroj kiuj systemd-networkd Uzas por pravalorigi virtualajn retajn interfacojn. La adreso kaj aliaj retaj agordoj por ĉi tiuj interfacoj estas specifitaj en .reto-dosieroj.
Kreu dosieron kiel ĉi tion /etc/systemd/network/25-tun2socks.network kun la jena enhavo:
Name — la nomo de la virtuala interfaco, en kiu vi specifis netdev-dosiero.
Address — IP-adreso, kiu estos asignita al la virtuala interfaco. Devas esti en la sama reto kiel la adreso, kiun vi specifis en la servo tun2socks
Gateway - IP-adreso de la "enkursigilo" tun2ŝtrumpetoj, kiun vi specifis dum kreado de la systemd-servo.
Do la interfaco tun2ŝtrumpetoj havas adreson 172.16.1.2, kaj la servo tun2ŝtrumpetoj - 172.16.1.1, tio estas, ĝi estas la enirejo por ĉiuj ligoj de la virtuala interfaco.
Agordu virtualan alirpunkton
Instalu dependecojn:
apt install util-linux procps hostapd iw haveged
Elŝutu la deponejon krei_ap al via aŭto:
git clone https://github.com/oblique/create_ap
Iru al la dosierujo de deponejo sur via maŝino:
cd create_ap
Instalu en la sistemo:
make install
Agordo aperos en via sistemo /etc/create_ap.conf. Jen la ĉefaj redaktaj opcioj:
GATEWAY=10.0.0.1 — estas pli bone fari ĝin aparta rezervita subreto.
NO_DNS=1 - malŝaltu, ĉar ĉi tiu parametro estos administrita de la virtuala interfaco systemd-networkd.
NO_DNSMASQ=1 - malŝaltu ĝin pro la sama kialo.
WIFI_IFACE=wlp6s0 - sendrata interfaco por tekkomputilo.
INTERNET_IFACE=tun2socks - virtuala interfaco kreita por tun2socks.
SSID=hostapd — nomo de la virtuala alirpunkto.
PASSPHRASE=12345678 - Pasvorto.
Ne forgesu ebligi la servon:
systemctl enable create_ap
Ebligu DHCP-servilon en systemd-networkd
Servo create_ap pravigigas virtualan interfacon en la sistemo ap0. En teorio, dnsmasq pendas sur ĉi tiu interfaco, sed kial instali kromajn servojn se systemd-networkd enhavas enkonstruitan DHCP-servilon?
Por ebligi ĝin, ni difinos la retajn agordojn por la virtuala punkto. Por fari tion, kreu dosieron /etc/systemd/network/25-ap0.network kun la jena enhavo:
Post kiam la servo create_ap pravalorigas la virtualan interfacon ap0, systemd-networkd aŭtomate asignos al ĝi IP-adreson kaj ebligos la DHCP-servilon.
Kordoj EmitDNS=yes и DNS=10.0.0.1 transdoni DNS-servilon agordojn al aparatoj konektitaj al la alirpunkto.
Se vi ne planas uzi lokan DNS-servilon - en mia kazo ĝi estas dnscrypt-proxy - vi povas instali DNS=10.0.0.1 в DNS=192.168.1.1kie 192.168.1.1 — la adreso de via originala enirejo. Tiam DNS-petoj por via gastiganto kaj loka reto estos neĉifritaj tra la serviloj de la provizanto.
EmitNTP=yes и NTP=192.168.1.1 translokigi NTP-agordojn.
La sama validas por la linio NTP=10.0.0.1.
Instalu kaj agordu NTP-servilon
Instalu en la sistemo:
apt install ntp
Redaktu la agordon /etc/ntp.conf. Komentu la adresojn de normaj naĝejoj:
Aldonu publikajn serviladresojn, ekzemple Google Public NTP:
server time1.google.com ibrust
server time2.google.com ibrust
server time3.google.com ibrust
server time4.google.com ibrust
Provizu aliron al la servilo al klientoj en via reto:
restrict 10.0.0.0 mask 255.255.255.0
Ebligu elsendon al via reto:
broadcast 10.0.0.255
Fine, aldonu la adresojn de ĉi tiuj serviloj al la statika envojiga tabelo. Por fari tion, malfermu la sendratan interfacan agordan dosieron /etc/systemd/network/25-wlp6s0.network kaj aldonu al la fino de la sekcio Route.
Post rekomenco aŭ rekomenco, vi havos duan alirpunkton, kiu direktas la gastigantajn kaj LAN-aparatojn al SOCKS.
Jen kiel aspektas la eligo ip a regula tekkomputilo:
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
En la fino
La provizanto nur vidas la ĉifritan konekton al via SOCKS-servilo, kio signifas, ke ili vidas nenion.
Kaj tamen ĝi vidas viajn NTP-petojn, por malhelpi tion, forigu senmovajn itinerojn por NTP-serviloj. Tamen ne certas, ke via SOCKS-servilo permesas la NTP-protokolon.
Lambastono ekvidita sur Debain 10
Se vi provas rekomenci la retan servon de la konzolo, ĝi malsukcesos kun eraro. Ĉi tio estas pro la fakto, ke parto de ĝi en formo de virtuala interfaco estas ligita al la servo tun2socks, kio signifas, ke ĝi estas uzata. Por rekomenci la retan servon, vi unue devas ĉesigi la tun2socks-servon. Sed, mi pensas, se vi legas ĝis la fino, ĉi tio certe ne estas problemo por vi!