Debian 10 noutbukunda SOCKS-da marşrutlaşdırıcının qurulması

Bütün bir il (və ya iki) bu məqaləni dərc etməyi əsas səbəbə görə təxirə saldım - mən artıq Debian ilə çox adi bir noutbukdan SOCKS-da marşrutlaşdırıcının yaradılması prosesini təsvir etdiyim iki məqalə dərc etmişdim.

Bununla belə, o vaxtdan Debian-ın stabil versiyası Buster-ə yeniləndi, kifayət qədər sayda insan mənimlə əlaqə saxlayıb, quraşdırma ilə bağlı kömək istədi, yəni əvvəlki məqalələrim tam deyil. Yaxşı, mən özüm təxmin etdim ki, onlarda göstərilən üsullar SOCKS-də marşrutlaşdırma üçün Linux-un qurulmasının bütün incəliklərini tam açıb göstərmir. Bundan əlavə, onlar Debian Stretch üçün yazılmışdır və Buster-ə yüksəldikdən sonra systemd init sistemində xidmətlərin qarşılıqlı təsirində kiçik dəyişiklikləri müşahidə etdim. Məqalələrin özlərində mən systemd-networkd-dən istifadə etməmişəm, baxmayaraq ki, o, mürəkkəb şəbəkə konfiqurasiyaları üçün ən uyğundur.

Yuxarıdakı dəyişikliklərə əlavə olaraq, konfiqurasiyama aşağıdakı xidmətlər əlavə edildi: hostapd - giriş nöqtəsinin virtuallaşdırılması xidməti, ntp yerli şəbəkə müştərilərinin vaxtını sinxronlaşdırmaq, dnscrypt-proxy DNS vasitəsilə əlaqələri şifrələmək və yerli şəbəkə müştərilərində reklamı deaktiv etmək, həmçinin daha əvvəl qeyd etdiyim kimi, systemd-şəbəkə şəbəkə interfeyslərinin konfiqurasiyası üçün.

Belə bir marşrutlaşdırıcının daxili strukturunun sadə blok diaqramı buradadır.

Debian 10 noutbukunda SOCKS-da marşrutlaşdırıcının qurulması

Beləliklə, bu məqalə silsiləsindəki məqsədlərin nə olduğunu sizə xatırlatmağa icazə verin:

  1. Bütün ƏS bağlantılarını SOCKS-a, eləcə də noutbukla eyni şəbəkədə olan bütün cihazlardan olan bağlantıları yönləndirin.
  2. Mənim vəziyyətimdəki noutbuk tamamilə mobil qalmalıdır. Yəni, iş masası mühitindən istifadə etmək və fiziki bir yerə bağlanmamaq imkanı vermək.
  3. Sonuncu nöqtə yalnız daxili simsiz interfeys vasitəsilə əlaqə və marşrutlaşdırma nəzərdə tutur.
  4. Yaxşı və əlbəttə ki, hərtərəfli bələdçinin yaradılması, eləcə də təvazökar biliklərimə uyğun olaraq müvafiq texnologiyaların təhlili.

Bu məqalədə nələrə toxunulacaq:

  1. git — layihə depolarını yükləyin tun2 corabTCP trafikini SOCKS-ə yönləndirmək üçün tələb olunur və yaratmaq_ap — istifadə edərək virtual giriş nöqtəsinin quraşdırılmasını avtomatlaşdırmaq üçün skript hostapd.
  2. tun2 corab — sistemdə systemd xidmətini qurun və quraşdırın.
  3. systemd-şəbəkə — simsiz və virtual interfeysləri, statik marşrutlaşdırma cədvəllərini və paketlərin yönləndirilməsini konfiqurasiya edin.
  4. yaratmaq_ap — sistemdə systemd xidmətini quraşdırın, virtual giriş nöqtəsini konfiqurasiya edin və işə salın.

Könüllü addımlar:

  • ntp — virtual giriş nöqtəsi klientlərində vaxtı sinxronlaşdırmaq üçün serveri quraşdırın və konfiqurasiya edin.
  • dnscrypt-proxy — biz DNS sorğularını şifrələyəcəyik, onları SOCKS-a yönləndirəcəyik və yerli şəbəkə üçün reklam domenlərini deaktiv edəcəyik.

Bütün bunlar nə üçündür?

Bu, yerli şəbəkədə TCP əlaqələrini qorumağın yollarından biridir. Əsas üstünlük ondan ibarətdir ki, orijinal şlüz vasitəsilə onlar üçün statik marşrut qurulmayıbsa, bütün əlaqələr SOCKS-da aparılır. Bu o deməkdir ki, yerli şəbəkədəki fərdi proqramlar və ya müştərilər üçün SOCKS server parametrlərini təyin etməyə ehtiyac yoxdur - onların hamısı standart olaraq SOCKS-a keçir, çünki biz əksini göstərənə qədər o, standart şlüzdür.

Əslində, biz orijinal marşrutlaşdırıcının qarşısında noutbuk kimi ikinci şifrələyici marşrutlaşdırıcı əlavə edirik və noutbukun artıq şifrələnmiş SOCKS sorğuları üçün orijinal marşrutlaşdırıcının İnternet bağlantısından istifadə edirik ki, bu da öz növbəsində LAN müştərilərinin sorğularını yönləndirir və şifrələyir.

Provayderin nöqteyi-nəzərindən biz daim şifrələnmiş trafikə malik bir serverə qoşuluruq.

Müvafiq olaraq, bütün cihazlar laptopun virtual giriş nöqtəsinə qoşulur.

Sistemə tun2socks quraşdırın

Maşınınızın interneti olduğu müddətdə bütün lazımi alətləri endirin.

apt update
apt install git make cmake

badvpn paketini endirin

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

Sisteminizdə bir qovluq görünəcək badvpn. Quraşdırma üçün ayrıca bir qovluq yaradın

mkdir badvpn-build

Ona get

cd badvpn-build

Toplayın tun2socks

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

Sistemə quraşdırın

make install
  • Parametr -DBUILD_NOTHING_BY_DEFAULT=1 badvpn deposunun bütün komponentlərinin qurulmasını söndürür.
  • -DBUILD_TUN2SOCKS=1 montaja bir komponent daxildir tun2 corab.
  • make install — sisteminizdə tun2socks binarını quraşdıracaq /usr/local/bin/badvpn-tun2socks.

tun2socks xidmətini systemd-də quraşdırın

Fayl yaradın /etc/systemd/system/tun2socks.service aşağıdakı məzmunla:

[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 - systemd-networkd ilə işə saldığımız virtual interfeysin adını alır.
  • --netif-ipaddr — virtual interfeysin qoşulduğu tun2socks “routerin” şəbəkə ünvanı. Ayrılıq etmək daha yaxşıdır qorunan alt şəbəkə.
  • --socks-server-addr - rozetka qəbul edir (адрес:порт SOCKS serverləri).

Əgər SOCKS serveriniz autentifikasiya tələb edirsə, siz parametrləri təyin edə bilərsiniz --username и --password.

Sonra, xidməti qeydiyyatdan keçirin

systemctl daemon-reload

Və onu yandırın

systemctl enable tun2socks

Xidmətə başlamazdan əvvəl biz onu virtual şəbəkə interfeysi ilə təmin edəcəyik.

systemd-networkd-ə keçid

Daxildir systemd-networkd:

systemctl enable systemd-networkd

Cari şəbəkə xidmətlərini deaktiv edin.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-onlayn gözləyin systemd şəbəkənin mövcudluğundan asılı olan digər xidmətləri başlatmağa davam etməzdən əvvəl işləyən şəbəkə bağlantısını gözləyən xidmətdir. systemd-şəbəkə analoquna keçdiyimiz zaman onu söndürürük.

Gəlin onu dərhal aktiv edək:

systemctl enable systemd-networkd-wait-online

Simsiz şəbəkə interfeysini qurun

Simsiz şəbəkə interfeysi üçün systemd-networkd konfiqurasiya faylı yaradın /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • ad simsiz interfeysinizin adıdır. Bunu əmrlə müəyyən edin ip a.
  • IPForward - şəbəkə interfeysində paketlərin yönləndirilməsinə imkan verən direktiv.
  • ünvan simsiz interfeysə IP ünvanının təyin edilməsinə cavabdehdir. Biz onu statik olaraq təyin edirik, çünki ekvivalent direktivlə DHCP=yes, systemd-networkd sistemdə standart şlüz yaradır. Sonra bütün trafik fərqli alt şəbəkədəki gələcək virtual interfeysdən deyil, orijinal şlüzdən keçəcək. Komanda ilə cari standart şlüzü yoxlaya bilərsiniz ip r

Uzaqdan olan SOCKS serveri üçün statik marşrut yaradın

Əgər SOCKS serveriniz yerli deyil, uzaqdırsa, onda siz onun üçün statik marşrut yaratmalısınız. Bunu etmək üçün bir bölmə əlavə edin Route aşağıdakı məzmunla yaratdığınız simsiz interfeys konfiqurasiya faylının sonuna qədər:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway — bu, defolt şlüz və ya orijinal giriş nöqtənizin ünvanıdır.
  • Destination — SOCKS server ünvanı.

systemd-şəbəkə üçün wpa_supplicant-ı konfiqurasiya edin

systemd-networkd təhlükəsiz giriş nöqtəsinə qoşulmaq üçün wpa_supplicant istifadə edir. Simsiz interfeysi "qaldırmağa" çalışarkən, systemd-networkd xidməti işə salır wpa_supplicant@имяHara имя simsiz interfeysin adıdır. Bu nöqtəyə qədər systemd-networkd-dən istifadə etməmisinizsə, bu xidmət sisteminizdə çox güman ki, yoxdur.

Beləliklə, onu əmrlə yaradın:

systemctl enable wpa_supplicant@wlp6s0

Mən istifadə etdim wlp6s0 simsiz interfeysinin adı kimi. Adınız fərqli ola bilər. Bunu əmrlə tanıya bilərsiniz ip l.

İndi yaradılmış xidmət wpa_supplicant@wlp6s0 simsiz interfeys "qaldırıldıqda" işə salınacaq, lakin o, öz növbəsində faylda giriş nöqtəsinin SSID və parol parametrlərini axtaracaq. /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Buna görə də, yardım proqramından istifadə edərək onu yaratmalısınız wpa_passphrase.

Bunu etmək üçün əmri yerinə yetirin:

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

hara SSID giriş nöqtənizin adı, parol paroldur və wlp6s0 — simsiz interfeysinizin adı.

tun2socks üçün virtual interfeysi işə salın

Sistemdə yeni virtual interfeysi işə salmaq üçün fayl yaradın/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • ad systemd-networkd işə salındıqda gələcək virtual interfeysə təyin edəcəyi addır.
  • Uşaq virtual interfeys növüdür. tun2socks xidmətinin adından onun kimi bir interfeysdən istifadə etdiyini təxmin edə bilərsiniz tun.
  • netdev faylların uzantısıdır systemd-networkd Virtual şəbəkə interfeyslərini işə salmaq üçün istifadə edir. Bu interfeyslər üçün ünvan və digər şəbəkə parametrləri aşağıda göstərilmişdir .şəbəkə-fayllar.

Belə bir fayl yaradın /etc/systemd/network/25-tun2socks.network aşağıdakı məzmunla:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • Name — göstərdiyiniz virtual interfeysin adı netdev-fayl.
  • Address — Virtual interfeysə təyin ediləcək IP ünvanı. tun2socks xidmətində göstərdiyiniz ünvanla eyni şəbəkədə olmalıdır
  • Gateway — “Routerin” IP ünvanı tun2 corab, systemd xidmətini yaratarkən göstərdiyiniz.

Beləliklə, interfeys tun2 corab ünvanı var 172.16.1.2, və xidmət tun2 corab - 172.16.1.1, yəni virtual interfeysdən bütün əlaqələr üçün şlüzdür.

Virtual giriş nöqtəsi qurun

Asılılıqları quraşdırın:

apt install util-linux procps hostapd iw haveged

Anbarı yükləyin yaratmaq_ap avtomobilinizə:

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

Maşınınızdakı depo qovluğuna keçin:

cd create_ap

Sistemə quraşdırın:

make install

Sisteminizdə konfiqurasiya görünəcək /etc/create_ap.conf. Əsas redaktə seçimləri bunlardır:

  • GATEWAY=10.0.0.1 — onu ayrıca qorunan alt şəbəkə etmək daha yaxşıdır.
  • NO_DNS=1 - söndürün, çünki bu parametr systemd-şəbəkə virtual interfeysi tərəfindən idarə olunacaq.
  • NO_DNSMASQ=1 - eyni səbəbdən söndürün.
  • WIFI_IFACE=wlp6s0 — noutbukun simsiz interfeysi.
  • INTERNET_IFACE=tun2socks - tun2socks üçün yaradılmış virtual interfeys.
  • SSID=hostapd — virtual giriş nöqtəsinin adı.
  • PASSPHRASE=12345678 - parol.

Xidməti aktivləşdirməyi unutmayın:

systemctl enable create_ap

systemd-networkd-də DHCP serverini aktivləşdirin

Xidmət create_ap sistemdə virtual interfeysi işə salır ap0. Teorik olaraq, dnsmasq bu interfeysdə dayanır, lakin systemd-networkd daxili DHCP serverini ehtiva edirsə, niyə əlavə xidmətlər quraşdırmalısınız?

Onu aktivləşdirmək üçün virtual nöqtə üçün şəbəkə parametrlərini təyin edəcəyik. Bunu etmək üçün bir fayl yaradın /etc/systemd/network/25-ap0.network aşağıdakı məzmunla:

[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

create_ap xidməti virtual interfeysi işə saldıqdan sonra ap0, systemd-networkd avtomatik olaraq ona IP ünvanı təyin edəcək və DHCP serverini işə salacaq.

Simlər EmitDNS=yes и DNS=10.0.0.1 DNS server parametrlərini giriş nöqtəsinə qoşulmuş cihazlara ötürmək.

Əgər yerli DNS serverindən istifadə etməyi planlaşdırmırsınızsa - mənim vəziyyətimdə bu dnscrypt-proxy-dir - quraşdıra bilərsiniz DNS=10.0.0.1 в DNS=192.168.1.1Hara 192.168.1.1 — orijinal şlüzünüzün ünvanı. Sonra host və yerli şəbəkəniz üçün DNS sorğuları provayderin serverləri vasitəsilə şifrələnməyəcək.

EmitNTP=yes и NTP=192.168.1.1 NTP parametrlərini köçürün.

Eyni şey xəttə də aiddir NTP=10.0.0.1.

NTP serverini quraşdırın və konfiqurasiya edin

Sistemə quraşdırın:

apt install ntp

Konfiqurasiyanı redaktə edin /etc/ntp.conf. Standart hovuzların ünvanlarını şərh edin:

#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

İctimai server ünvanlarını əlavə edin, məsələn, Google Public NTP:

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

Şəbəkənizdəki müştərilərə serverə girişi təmin edin:

restrict 10.0.0.0 mask 255.255.255.0

Şəbəkənizdə yayımı aktivləşdirin:

broadcast 10.0.0.255

Nəhayət, bu serverlərin ünvanlarını statik marşrutlaşdırma cədvəlinə əlavə edin. Bunu etmək üçün simsiz interfeys konfiqurasiya faylını açın /etc/systemd/network/25-wlp6s0.network və bölmənin sonuna əlavə edin 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

Utilitdən istifadə edərək NTP serverlərinizin ünvanlarını öyrənə bilərsiniz host belədir:

host time1.google.com

Dnscrypt-proxy quraşdırın, reklamları silin və provayderinizdən DNS trafikini gizləyin

apt install dnscrypt-proxy

Host və yerli şəbəkə DNS sorğularına xidmət etmək üçün yuvanı redaktə edin /lib/systemd/system/dnscrypt-proxy.socket. Aşağıdakı sətirləri dəyişdirin:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Yenidən başlamaq systemd:

systemctl daemon-reload

Konfiqurasiyanı redaktə edin /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

Dnscrypt-proxy bağlantılarını tun2socks vasitəsilə yönləndirmək üçün aşağıdakıları əlavə edin:

force_tcp = true

Konfiqurasiyanı redaktə edin /etc/resolv.conf, bu DNS serverini hosta bildirir.

nameserver 127.0.0.1
nameserver 192.168.1.1

Birinci sətir dnscrypt-proxy-nin istifadəsinə imkan verir, ikinci sətir isə dnscrypt-proxy serverinin mövcud olmadığı halda orijinal şlüzdən istifadə edir.

Bitti!

Şəbəkə xidmətlərini işə salın və ya dayandırın:

systemctl stop networking NetworkManager NetworkManager-wait-online

Və lazım olan hər şeyi yenidən başladın:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Yenidən başladıqdan və ya yenidən başladıqdan sonra host və LAN cihazlarını SOCKS-a yönləndirən ikinci giriş nöqtəniz olacaq.

Çıxış belə görünür ip a adi noutbuk:

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

Nəticədə,

  1. Provayder yalnız SOCKS serverinizlə şifrələnmiş əlaqəni görür, yəni onlar heç nə görmürlər.
  2. Və hələ də NTP sorğularınızı görür, bunun qarşısını almaq üçün NTP serverləri üçün statik marşrutları silin. Bununla belə, SOCKS serverinizin NTP protokoluna icazə verdiyi dəqiq deyil.

Crutch Debain 10-da göründü

Konsoldan şəbəkə xidmətini yenidən başlatmağa cəhd etsəniz, xəta ilə uğursuz olacaq. Bu onunla bağlıdır ki, onun virtual interfeys şəklində olan hissəsi tun2socks xidmətinə bağlıdır, yəni ondan istifadə olunur. Şəbəkə xidmətini yenidən başlatmaq üçün əvvəlcə tun2socks xidmətini dayandırmalısınız. Ancaq məncə, sona qədər oxusanız, bu sizin üçün qətiliklə problem deyil!

References

  1. Linux-da Statik Yönləndirmə - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Bu skript NATed və ya Bridged WiFi Access Point yaradır.
  5. dnscrypt-proxy 2 — Şifrələnmiş DNS protokollarını dəstəkləyən çevik DNS proksi.

Mənbə: www.habr.com