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.

Konstruante enkursigilon en SOCKS sur tekkomputilo kun Debian 10

Do, mi memorigu vin, kiaj estas la celoj de ĉi tiu serio de artikoloj:

  1. Itineru ĉiujn OS-konektojn al SOCKS, same kiel konektojn de ĉiuj aparatoj en la sama reto kiel la tekkomputilo.
  2. 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.
  3. La lasta punkto implicas konekton kaj vojigon nur per la enkonstruita sendrata interfaco.
  4. 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:

  1. 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.
  2. tun2ŝtrumpetoj — konstrui kaj instali la systemd-servon sur la sistemo.
  3. systemd-networkd — agordi sendratajn kaj virtualajn interfacojn, senmovajn enrutigajn tabelojn kaj pakaĵet-alidirektilon.
  4. 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

mkdir badvpn-build

Iru al ĝi

cd badvpn-build

Kolekti tun2socks

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

Instalu en la sistemo

make install
  • Parametro -DBUILD_NOTHING_BY_DEFAULT=1 malŝaltas la konstruon de ĉiuj komponantoj de la deponejo badvpn.
  • -DBUILD_TUN2SOCKS=1 inkluzivas komponanton en la aro tun2ŝtrumpetoj.
  • make install — instalos la binaron tun2socks sur via sistemo ĉe /usr/local/bin/badvpn-tun2socks.

Instalu la servon tun2socks en systemd

Kreu dosieron /etc/systemd/system/tun2socks.service kun la jena enhavo:

[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 - 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.
  • --socks-server-addr - akceptas ingon (адрес:порт SOCKS-serviloj).

Se via SOCKS-servilo postulas aŭtentikigon, vi povas specifi la parametrojn --username и --password.

Poste, registri la servon

systemctl daemon-reload

Kaj ŝaltu ĝin

systemctl enable tun2socks

Antaŭ ol komenci la servon, ni provizos al ĝi virtualan retan interfacon.

Ŝanĝante al systemd-networkd

Ni inkluzivas systemd-networkd:

systemctl enable systemd-networkd

Malebligu nunajn retajn servojn.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • 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.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • 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.

Por fari tion, rulu la komandon:

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

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:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • 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:

[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

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:

#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

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.

[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

Vi povas ekscii la adresojn de viaj NTP-serviloj uzante la ilon host kiel sekvas:

host time1.google.com

Instalu dnscrypt-proxy, forigu reklamojn kaj kaŝu DNS-trafikon de via provizanto

apt install dnscrypt-proxy

Por servi gastigajn kaj lokajn retajn DNS-demandojn, redaktu la ingon /lib/systemd/system/dnscrypt-proxy.socket. Ŝanĝu la sekvajn liniojn:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Rekomenci systemd:

systemctl daemon-reload

Redaktu la agordon /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

Por direkti dnscrypt-proxy-konektojn tra tun2socks, aldonu sube:

force_tcp = true

Redaktu la agordon /etc/resolv.conf, kiu rakontas la DNS-servilon al la gastiganto.

nameserver 127.0.0.1
nameserver 192.168.1.1

La unua linio ebligas la uzon de dnscrypt-proxy, la dua linio uzas la originan enirejon se la dnscrypt-proxy-servilo estas neatingebla.

Farita!

Rekomencu aŭ ĉesu ruli retajn servojn:

systemctl stop networking NetworkManager NetworkManager-wait-online

Kaj rekomencu ĉion necesan:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

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

  1. La provizanto nur vidas la ĉifritan konekton al via SOCKS-servilo, kio signifas, ke ili vidas nenion.
  2. 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!

referencoj

  1. Senmova vojigo sur Linukso - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Vikio · GitHub
  4. oblique/create_ap: Ĉi tiu skripto kreas NATed aŭ Pontitan WiFi-Alirpunkton.
  5. dnscrypt-proxy 2 — fleksebla DNS-prokurilo, kun subteno por ĉifritaj DNS-protokoloj.

fonto: www.habr.com