MarÅ”rutētāja izveide programmā SOCKS klēpjdatorā ar Debian 10

Veselu gadu (vai divus) es atliku Ŕī raksta publicÄ“Å”anu galvenā iemesla dēļ - jau biju publicējis divus rakstus, kuros aprakstÄ«ju marÅ”rutētāja izveides procesu SOCKS no ļoti parasta klēpjdatora ar Debian.

Tomēr kopÅ” tā laika Debian stabilā versija ir atjaunināta uz Buster, pietiekami daudz cilvēku ir sazinājuÅ”ies ar mani privāti, lÅ«dzot palÄ«dzÄ«bu iestatÄ«Å”anā, kas nozÄ«mē, ka mani iepriekŔējie raksti nav izsmeļoÅ”i. Nu, es pats uzminēju, ka tajās izklāstÄ«tās metodes pilnÄ«bā neatklāj visas Linux iestatÄ«Å”anas sarežģītÄ«bas marÅ”rutÄ“Å”anai SOCKS. Turklāt tie ir rakstÄ«ti Debian Stretch, un pēc jaunināŔanas uz Buster, systemd init sistēmā, es pamanÄ«ju nelielas izmaiņas pakalpojumu mijiedarbÄ«bā. Un paÅ”os rakstos es neizmantoju systemd-networkd, lai gan tas ir vislabāk piemērots sarežģītām tÄ«kla konfigurācijām.

Papildus iepriekÅ” minētajām izmaiņām manai konfigurācijai tika pievienoti Ŕādi pakalpojumi: hostapd - piekļuves punktu virtualizācijas pakalpojums, ntp lai sinhronizētu lokālā tÄ«kla klientu laiku, dnscrypt-starpniekserveris Å”ifrēt savienojumus, izmantojot DNS, un atspējot reklāmu vietējā tÄ«kla klientiem, kā arÄ«, kā jau minēju iepriekÅ”, systemd-networkd tÄ«kla saskarņu konfigurÄ“Å”anai.

Å eit ir vienkārÅ”a Ŕāda marÅ”rutētāja iekŔējās struktÅ«ras blokshēma.

MarÅ”rutētāja izveide programmā SOCKS klēpjdatorā ar Debian 10

Tāpēc es jums atgādināŔu, kādi ir Ŕīs rakstu sērijas mērÄ·i:

  1. MarÅ”rutējiet visus OS savienojumus uz SOCKS, kā arÄ« savienojumus no visām ierÄ«cēm vienā tÄ«klā ar klēpjdatoru.
  2. Manā gadÄ«jumā klēpjdatoram vajadzētu palikt pilnÄ«gi mobilam. Tas ir, lai dotu iespēju izmantot darbvirsmas vidi un nebÅ«t piesaistÄ«tam fiziskai atraÅ”anās vietai.
  3. Pēdējais punkts nozÄ«mē savienojumu un marÅ”rutÄ“Å”anu tikai caur iebÅ«vēto bezvadu interfeisu.
  4. Nu, un, protams, visaptveroŔa ceļveža izveide, kā arī attiecīgo tehnoloģiju analīze, cik man ir pieticīgs.

Kas tiks apskatīts Ŕajā rakstā:

  1. iet ā€” lejupielādēt projektu krātuves tun2zeÄ·esnepiecieÅ”ams, lai TCP trafiku novirzÄ«tu uz SOCKS, un izveidot_ap ā€” skripts, lai automatizētu virtuālā piekļuves punkta iestatÄ«Å”anu, izmantojot hostapd.
  2. tun2zeÄ·es ā€” izveidot un instalēt sistēmā sistēmas pakalpojumu.
  3. systemd-networkd ā€” konfigurēt bezvadu un virtuālās saskarnes, statiskās marÅ”rutÄ“Å”anas tabulas un pakeÅ”u pāradresāciju.
  4. izveidot_ap ā€” instalējiet sistēmā sistēmas pakalpojumu, konfigurējiet un palaidiet virtuālo piekļuves punktu.

Izvēles darbības:

  • ntp ā€” instalēt un konfigurēt serveri, lai sinhronizētu laiku virtuālo piekļuves punktu klientiem.
  • dnscrypt-starpniekserveris ā€” mēs Å”ifrēsim DNS pieprasÄ«jumus, novirzÄ«sim tos uz SOCKS un atspējosim reklāmas domēnus lokālajam tÄ«klam.

PriekÅ” kam tas viss?

Å is ir viens no veidiem, kā nodroÅ”ināt TCP savienojumus lokālajā tÄ«klā. Galvenā priekÅ”rocÄ«ba ir tā, ka visi savienojumi tiek veikti SOCKS, ja vien tiem nav izveidots statisks marÅ”ruts caur oriÄ£inālo vārteju. Tas nozÄ«mē, ka jums nav jānorāda SOCKS servera iestatÄ«jumi ne atseviŔķām programmām, ne lokālā tÄ«kla klientiem ā€” tie visi pēc noklusējuma tiek novirzÄ«ti uz SOCKS, jo tā ir noklusējuma vārteja, lÄ«dz mēs norādām citādi.

BÅ«tÄ«bā mēs pievienojam otru Å”ifrÄ“Å”anas marÅ”rutētāju kā klēpjdatoru pirms sākotnējā marÅ”rutētāja un izmantojam oriÄ£inālā marÅ”rutētāja interneta savienojumu klēpjdatora jau Å”ifrētajiem SOCKS pieprasÄ«jumiem, kas savukārt marÅ”rutē un Å”ifrē pieprasÄ«jumus no LAN klientiem.

No pakalpojumu sniedzēja viedokļa mēs pastāvÄ«gi esam savienoti ar vienu serveri ar Å”ifrētu trafiku.

Attiecīgi visas ierīces ir savienotas ar klēpjdatora virtuālo piekļuves punktu.

Instalējiet sistēmā tun2socks

Kamēr jÅ«su maŔīnai ir internets, lejupielādējiet visus nepiecieÅ”amos rÄ«kus.

apt update
apt install git make cmake

Lejupielādējiet badvpn pakotni

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

JÅ«su sistēmā parādÄ«sies mape badvpn. Veidojumam izveidojiet atseviŔķu mapi

mkdir badvpn-build

Iet uz to

cd badvpn-build

Savākt tun2socks

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

Instalējiet sistēmā

make install
  • Parametrs -DBUILD_NOTHING_BY_DEFAULT=1 atspējo visu badvpn repozitorija komponentu veidoÅ”anu.
  • Sākot noDBUILD_TUN2SOCKS=1 komplektā ir iekļauta sastāvdaļa tun2zeÄ·es.
  • make install ā€” instalēs tun2socks bināro failu jÅ«su sistēmā vietnē /usr/local/bin/badvpn-tun2socks.

Instalējiet tun2socks pakalpojumu sistēmād

Izveidojiet failu /etc/systemd/system/tun2socks.service ar Ŕādu saturu:

[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 - aizņem virtuālās saskarnes nosaukumu, kuru inicializējam ar systemd-networkd.
  • --netif-ipaddr ā€” tun2socks ā€œmarÅ”rutētājaā€, kuram ir pievienots virtuālais interfeiss, tÄ«kla adrese. Labāk to noŔķirt rezervēts apakÅ”tÄ«kls.
  • --socks-server-addr - pieņem kontaktligzdu (Š°Š“рŠµŃ:ŠæŠ¾Ń€Ń‚ SOCKS serveri).

Ja jÅ«su SOCKS serverim ir nepiecieÅ”ama autentifikācija, varat norādÄ«t parametrus --username Šø --password.

Pēc tam reģistrējiet pakalpojumu

systemctl daemon-reload

Un ieslēdziet to

systemctl enable tun2socks

Pirms pakalpojuma uzsākŔanas nodroŔināsim to ar virtuālā tīkla interfeisu.

PārslēgÅ”anās uz systemd-networkd

Ieslēdziet systemd-networkd:

systemctl enable systemd-networkd

Atspējojiet paÅ”reizējos tÄ«kla pakalpojumus.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-wait-online ir pakalpojums, kas gaida funkcionējoÅ”u tÄ«kla savienojumu, pirms systemd turpina startēt citus pakalpojumus, kas ir atkarÄ«gi no tÄ«kla klātbÅ«tnes. Mēs to atspējojam, pārejot uz systemd-networkd analogu.

Iespējosim to uzreiz:

systemctl enable systemd-networkd-wait-online

Iestatiet bezvadu tīkla interfeisu

Izveidojiet systemd-networkd konfigurācijas failu bezvadu tīkla saskarnei /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • Vārds ir jÅ«su bezvadu interfeisa nosaukums. Identificējiet to ar komandu ip a.
  • IPForward - direktÄ«va, kas nodroÅ”ina pakeÅ”u pāradresāciju tÄ«kla saskarnē.
  • Adrese ir atbildÄ«gs par IP adreses pieŔķirÅ”anu bezvadu saskarnei. Mēs to norādām statiski, jo ar lÄ«dzvērtÄ«gu direktÄ«vu DHCP=yes, systemd-networkd sistēmā izveido noklusējuma vārteju. Tad visa trafika tiks veikta caur sākotnējo vārteju, nevis caur nākotnes virtuālo saskarni citā apakÅ”tÄ«klā. JÅ«s varat pārbaudÄ«t paÅ”reizējo noklusējuma vārteju ar komandu ip r

Izveidojiet statisku marŔrutu attālajam SOCKS serverim

Ja jūsu SOCKS serveris nav lokāls, bet attāls, jums ir jāizveido tam statisks marŔruts. Lai to izdarītu, pievienojiet sadaļu Route līdz izveidotā bezvadu interfeisa konfigurācijas faila beigām ar Ŕādu saturu:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway ā€” Ŕī ir noklusējuma vārteja vai sākotnējā piekļuves punkta adrese.
  • Destination ā€” SOCKS servera adrese.

Konfigurējiet wpa_supplicant sistēmai systemd-networkd

systemd-networkd izmanto wpa_supplicant, lai izveidotu savienojumu ar droÅ”u piekļuves punktu. Mēģinot "paaugstināt" bezvadu saskarni, systemd-networkd sāk pakalpojumu wpa_supplicant@ŠøŠ¼ŃKur nosaukums ir bezvadu interfeisa nosaukums. Ja pirms Ŕī punkta neesat izmantojis systemd-networkd, iespējams, Ŕī pakalpojuma jÅ«su sistēmā nav.

Tāpēc izveidojiet to ar komandu:

systemctl enable wpa_supplicant@wlp6s0

ES izmantoju wlp6s0 kā tā bezvadu interfeisa nosaukums. Jūsu vārds var atŔķirties. Jūs to varat atpazīt ar komandu ip l.

Tagad izveidots pakalpojums wpa_supplicant@wlp6s0 tiks palaists, kad bezvadu interfeiss tiks ā€œpaceltsā€, bet tas savukārt failā meklēs piekļuves punkta SSID un paroles iestatÄ«jumus /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Tāpēc jums tas ir jāizveido, izmantojot utilÄ«tu wpa_passphrase.

Lai to izdarītu, palaidiet komandu:

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

kur SSID ir jÅ«su piekļuves punkta nosaukums, parole ir parole un wlp6s0 ā€” bezvadu interfeisa nosaukums.

Inicializējiet tun2socks virtuālo saskarni

Izveidojiet failu, lai sistēmā inicializētu jaunu virtuālo saskarni/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • Vārds ir nosaukums, ko systemd-networkd pieŔķirs nākotnes virtuālajai saskarnei, kad tā tiks inicializēta.
  • laipns ir virtuālās saskarnes veids. No tun2socks pakalpojuma nosaukuma varat uzminēt, ka tas izmanto interfeisu, piemēram, tun.
  • netdev ir failu paplaÅ”inājums, kas systemd-networkd Izmanto, lai inicializētu virtuālās tÄ«kla saskarnes. Å o saskarņu adrese un citi tÄ«kla iestatÄ«jumi ir norādÄ«ti .tÄ«kls- faili.

Izveidojiet Ŕādu failu /etc/systemd/network/25-tun2socks.network ar Ŕādu saturu:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • Name ā€” virtuālās saskarnes nosaukums, kuru norādÄ«jāt netdev- fails.
  • Address ā€” IP adrese, kas tiks pieŔķirta virtuālajam interfeisam. Tai ir jāatrodas tajā paŔā tÄ«klā kā adrese, kuru norādÄ«jāt pakalpojumā tun2socks
  • Gateway ā€” ā€œmarÅ”rutētājaā€ IP adrese tun2zeÄ·es, kuru norādÄ«jāt, veidojot systemd pakalpojumu.

Tātad interfeiss tun2zeķes ir adrese 172.16.1.2un pakalpojums tun2zeķes Sākot no 172.16.1.1, tas ir, tā ir vārteja visiem savienojumiem no virtuālā interfeisa.

Iestatiet virtuālo piekļuves punktu

InstalēŔanas atkarības:

apt install util-linux procps hostapd iw haveged

Lejupielādējiet repozitoriju izveidot_ap uz jÅ«su automaŔīnu:

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

Dodieties uz repozitorija mapi savā datorā:

cd create_ap

Instalējiet sistēmā:

make install

JÅ«su sistēmā parādÄ«sies konfigurācija /etc/create_ap.conf. Å eit ir galvenās rediģēŔanas iespējas:

  • GATEWAY=10.0.0.1 ā€” labāk to padarÄ«t par atseviŔķu rezervētu apakÅ”tÄ«klu.
  • NO_DNS=1 - atspējot, jo Å”o parametru pārvaldÄ«s systemd-networkd virtuālais interfeiss.
  • NO_DNSMASQ=1 - izslēdziet to tā paÅ”a iemesla dēļ.
  • WIFI_IFACE=wlp6s0 ā€” klēpjdatora bezvadu interfeiss.
  • INTERNET_IFACE=tun2socks - virtuālais interfeiss, kas izveidots priekÅ” tun2socks.
  • SSID=hostapd ā€” virtuālā piekļuves punkta nosaukums.
  • PASSPHRASE=12345678 - parole.

Neaizmirstiet iespējot pakalpojumu:

systemctl enable create_ap

Iespējot DHCP serveri sistēmā systemd-networkd

Pakalpojums create_ap inicializē virtuālo saskarni sistēmā ap0. Teorētiski dnsmasq karājas Å”ajā saskarnē, bet kāpēc instalēt papildu pakalpojumus, ja systemd-networkd satur iebÅ«vētu DHCP serveri?

Lai to iespējotu, mēs definēsim virtuālā punkta tÄ«kla iestatÄ«jumus. Lai to izdarÄ«tu, izveidojiet failu /etc/systemd/network/25-ap0.network ar Ŕādu saturu:

[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

Pēc tam, kad pakalpojums create_ap inicializē virtuālo saskarni ap0, systemd-networkd automātiski pieŔķirs tai IP adresi un iespējos DHCP serveri.

StÄ«gas EmitDNS=yes Šø DNS=10.0.0.1 pārsÅ«tÄ«t DNS servera iestatÄ«jumus ierÄ«cēm, kas savienotas ar piekļuves punktu.

Ja neplānojat izmantot vietējo DNS serveri - manā gadÄ«jumā tas ir dnscrypt-proxy - varat instalēt DNS=10.0.0.1 Š² DNS=192.168.1.1Kur 192.168.1.1 ā€” sākotnējās vārtejas adrese. Pēc tam jÅ«su resursdatora un lokālā tÄ«kla DNS pieprasÄ«jumi tiks neÅ”ifrēti, izmantojot pakalpojumu sniedzēja serverus.

EmitNTP=yes Šø NTP=192.168.1.1 pārsÅ«tÄ«t NTP iestatÄ«jumus.

Tas pats attiecas uz līniju NTP=10.0.0.1.

Instalējiet un konfigurējiet NTP serveri

Instalējiet sistēmā:

apt install ntp

Rediģējiet konfigurāciju /etc/ntp.conf. Komentāros norādiet standarta pūlu adreses:

#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

Pievienojiet publiskā servera adreses, piemēram, Google publisko NTP:

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

NodroŔiniet piekļuvi serverim klientiem jūsu tīklā:

restrict 10.0.0.0 mask 255.255.255.0

Iespējot apraidi savā tīklā:

broadcast 10.0.0.255

Visbeidzot pievienojiet Å”o serveru adreses statiskajai marÅ”rutÄ“Å”anas tabulai. Lai to izdarÄ«tu, atveriet bezvadu interfeisa konfigurācijas failu /etc/systemd/network/25-wlp6s0.network un pievienojiet sadaļas beigās 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

Izmantojot utilītu, varat uzzināt savu NTP serveru adreses host Ŕādi:

host time1.google.com

Instalējiet dnscrypt-proxy, noņemiet reklāmas un paslēpiet DNS trafiku no sava pakalpojumu sniedzēja

apt install dnscrypt-proxy

Lai apkalpotu resursdatora un lokālā tÄ«kla DNS vaicājumus, rediģējiet ligzdu /lib/systemd/system/dnscrypt-proxy.socket. Mainiet Ŕādas rindas:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Restartēt systemd:

systemctl daemon-reload

Rediģējiet konfigurāciju /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

Lai marÅ”rutētu dnscrypt-proxy savienojumus caur tun2socks, pievienojiet tālāk:

force_tcp = true

Rediģējiet konfigurāciju /etc/resolv.conf, kas paziņo DNS serverim saimniekdatoram.

nameserver 127.0.0.1
nameserver 192.168.1.1

Pirmā rinda ļauj izmantot dnscrypt-proxy, otrā rinda izmanto sākotnējo vārteju, ja dnscrypt-proxy serveris nav pieejams.

Gatavs!

Atsāknējiet vai pārtrauciet tīkla pakalpojumu darbību:

systemctl stop networking NetworkManager NetworkManager-wait-online

Un restartējiet visu nepiecieÅ”amo:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Pēc atsāknÄ“Å”anas vai restartÄ“Å”anas jums bÅ«s otrs piekļuves punkts, kas novirza resursdatora un LAN ierÄ«ces uz SOCKS.

Šādi izskatās izvade ip a parastais klēpjdators:

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

Kā rezultātā,

  1. Pakalpojumu sniedzējs redz tikai Å”ifrētu savienojumu ar jÅ«su SOCKS serveri, kas nozÄ«mē, ka viņŔ neko neredz.
  2. Un tomēr tas redz jÅ«su NTP pieprasÄ«jumus, lai to novērstu, noņemiet statiskos marÅ”rutus NTP serveriem. Tomēr nav skaidrs, vai jÅ«su SOCKS serveris atļauj NTP protokolu.

KruÄ·is tika pamanÄ«ts uz Debeina 10

Ja mēģināt restartēt tīkla pakalpojumu no konsoles, tas neizdosies ar kļūdu. Tas ir saistīts ar faktu, ka daļa no tā virtuālā interfeisa veidā ir saistīta ar tun2socks pakalpojumu, kas nozīmē, ka tā tiek izmantota. Lai restartētu tīkla pakalpojumu, vispirms ir jāpārtrauc pakalpojums tun2socks. Bet, manuprāt, ja izlasi līdz galam, tā tev noteikti nav problēma!

atsauces

  1. Statiskā marÅ”rutÄ“Å”ana operētājsistēmā Linux ā€” IBM
  2. systemd-networkd.service ā€” Freedesktop.org
  3. Tun2socks Ā· ambrop72/badvpn Wiki Ā· GitHub
  4. oblique/create_ap: Ŕis skripts izveido NATed vai Bridged WiFi piekļuves punktu.
  5. dnscrypt-proxy 2 ā€” elastÄ«gs DNS starpniekserveris, kas atbalsta Å”ifrētus DNS protokolus.

Avots: www.habr.com