Gradimo usmerjevalnik v SOCKS na prenosniku z Debian 10

Celotno leto (ali dve) sem odlašal s publikacijo tega članka iz glavnega razloga — že sem objavil dva članka, v katerih sem opisal postopek ustvarjanja usmerjevalnika v SOCKS iz povsem navadne prenosne naprave z Debianom.

Vendar se je od takrat stabilna različica Debiana posodobila na Buster, prejemal sem dovolj sporočil od ljudi, ki so prosili za pomoč pri nastavitvah, kar pomeni, da moji prejšnji članki niso izčrpni. No, sam sem slutil, da metode, predstavljene v njih, ne razkrivajo vseh podrobnosti nastavitve Linuxa za usmerjanje v SOCKS. Poleg tega so napisani za Debian Stretch, po nadgradnji na Buster pa sem opazil manjše spremembe v interakciji storitev v sistemu inicializacije systemd. Tudi v samih člankih nisem uporabil systemd-networkd, čeprav je ta najbolj primerna za kompleksne omrežne konfiguracije.

Poleg zgoraj omenjenih sprememb so se v mojo konfiguracijo dodale storitve, kot so hostapd — storitev za virtualizacijo dostopne točke, ntp za sinhronizacijo časa odjemalcev lokalnega omrežja, dnscrypt-proxy za šifriranje povezav preko protokola DNS in blokiranje oglasov na odjemalcih lokalne mreže, ter, kot sem omenil prej, systemd-networkd za konfiguracijo omrežnih vmesnikov.

Tukaj je najpreprostejši blok-diagram notranjega delovanja takega usmerjevalnika.

Gradimo usmerjevalnik v SOCKS na prenosniku z Debian 10

Torej, opomnim, katere cilje zasleduje ta serija člankov:

  1. Usmerjati v SOCKS vse povezave operacijskega sistema ter vse povezave vseh naprav, ki so v eni mreži z prenosnikom.
  2. Prenosnik v mojem primeru mora ostati povsem mobilen. To pomeni omogočiti uporabo delovnega okolja in ne biti vezan na fizično lokacijo.
  3. Zadnja točka pomeni povezovanje in usmerjanje samo preko vgrajenega brezžičnega vmesnika.
  4. No, in seveda, ustvariti izčrpno vodilo ter obravnavati ustrezne tehnologije v okviru svojih skromnih znanj.

Kaj bo obravnavano v tem članku:

  1. git — prenesemo repozitorije projektov tun2socks, potrebnega za usmerjanje TCP prometa v SOCKS, in create_ap — skripta za avtomatizacijo nastavitve virtualne dostopne točke z uporabo hostapd.
  2. tun2socks — zgradili in namestili bomo storitev systemd v sistem.
  3. systemd-networkd — nastavili bomo brezžične in virtualne vmesnike, tabele statične usmerjanja in preusmerjanje paketov.
  4. create_ap — namestimo storitev systemd v sistem, nastavimo in zaženemo virtualno dostopno točko.

Neobvezni koraki:

  • ntp — namestimo in nastavimo strežnik za sinhronizacijo časa na odjemalcih virtualne dostopne točke.
  • dnscrypt-proxy — šifriramo DNS poizvedbe, jih usmerjamo v SOCKS in onemogočimo oglaševalske domene za lokalno omrežje.

Zakaj vse to?

To je eden od načinov za organizacijo zaščite TCP povezav lokalnega omrežja. Glavna prednost je, da vse povezave gredo v SOCKS, razen če za njih ni nastavljen statični route preko izvirnega prehoda. To pomeni, da ni treba nastavljati SOCKS strežnika za ločene programe ali odjemalce v lokalnem omrežju — vsi gredo v SOCKS po privzetku, ker je to privzeti prehod, dokler ne navedemo nasprotnega.

V bistvu dodajamo drugi šifrirni usmerjevalnik v obliki prenosnega računalnika pred izvirnim usmerjevalnikom in uporabljamo internetno povezavo izvirnega usmerjevalnika za že šifrirane SOCKS poizvedbe prenosnika, ki nato usmerja in šifrira poizvedbe odjemalcev lokalnega omrežja.

Z vidika ponudnika smo ves čas povezani na en strežnik z šifriranim prometom.

Odtod se vsa naprave povezujejo na virtualno dostopno točko prenosnika.

Namestite tun2socks v sistem

Dokler ima vaše računalnik internet, prenesite vse potrebne ukaze.

apt update
apt install git make cmake

Prenesite paket badvpn

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

V vašem sistemu se bo pojavila mapa badvpn. Ustvarite ločeno mapo za gradnjo

mkdir badvpn-build

Pojdite vanjo

cd badvpn-build

Sestavite tun2socks

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

Namestite v sistem

make install
  • Parametri -DBUILD_NOTHING_BY_DEFAULT=1 onemogoči gradnjo vseh komponent repozitorija badvpn.
  • —DBUILD_TUN2SOCKS=1 vključi v gradnjo komponento tun2socks.
  • make install — namesti binarno datoteko tun2socks v vaš sistem na naslovu /usr/local/bin/badvpn-tun2socks.

Namestite storitev tun2socks v systemd

Ustvarite datoteko /etc/systemd/system/tun2socks.service s sledečo vsebino:

[Enota]
Opis=SOCKS TCP Relay

[Storitve]
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

[Namestitev]
Želeno s strani=multi-user.target
  • --tundev — sprejema ime virtualnega vmesnika, ki ga initializiramo s pomočjo systemd-networkd.
  • --netif-ipaddr — omrežni naslov 'usmerjevalnika' tun2socks, na katerega se povezuje virtualni vmesnik. Bolje je narediti ločen rezerviran podomrežje.
  • --socks-server-addr — sprejema socket (naslov:port SOCKS strežnika).

Če vaš SOCKS strežnik zahteva avtentikacijo, lahko navedete parametre --username in --password.

Далее зарегистрируйте службу

systemctl daemon-reload

И включите

systemctl enable tun2socks

Прежде чем запускать службу, обеспечим её виртуальным сетевым интерфейсом.

Переходим на systemd-networkd

Aktiviramo systemd-networkd:

systemctl enable systemd-networkd

Отключаем текущие сетевые службы.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-wait-online — это служба, которая ждет наличие работающего сетевого подключения прежде, чем systemd продолжит запуск других служб, зависящих от наличия сети. Мы отключаем её, так как перейдем на аналог systemd-networkd.

Давайте сразу включим его:

systemctl enable systemd-networkd-wait-online

Настройте беспроводной сетевой интерфейс

Создайте файл конфигурации systemd-networkd для беспроводного сетевого интерфейса /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • Ime — это имя вашего беспроводного интерфейса. Идентифицируйте его командой ip a.
  • IPForward — директива, которая включает перенаправление пакетов на сетевом интерфейсе.
  • Address отвечает за присвоение IP-адреса беспроводному интерфейсу. Мы указываем его статически, потому что при эквивалентной директиве DHCP=yes, systemd-networkd создаёт в системе шлюз по-умолчанию. Тогда весь трафик пойдет через оригинальный шлюз, а не через будущий виртуальный интерфейс в отличной подсети. Вы можете проверить текущий шлюз по-умолчанию командой ip r

Создайте статический маршрут для удалённого сервера SOCKS

Если ваш SOCKS сервер не локальный, а удалённый, то вам необходимо создать для него статический маршрут. Для этого добавьте секцию Route в конец созданного вами файла конфигурации беспроводного интерфейса со следующим содержанием:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Prehod — это шлюз по-умолчанию или адрес вашей оригинальной точки доступа.
  • Destination — адрес сервера SOCKS.

Настройте wpa_supplicant для systemd-networkd

systemd-networkd использует wpa_supplicant для подключения к защищенной точке доступа. При попытке «поднять» беспроводной интерфейс systemd-networkd запускает службу wpa_supplicant@имя, gde имя — это имя беспроводного интерфейса. Если вы не использовали systemd-networkd до этого момента, то, наверняка, эта служба в вашей системе отсутствует.

Поэтому создайте её командой:

systemctl enable wpa_supplicant@wlp6s0

Uporabil sem wlp6s0 в качестве имени своего беспроводного интерфейса. У вас это имя может отличаться. Вы можете узнать его командой ip l.

Теперь созданная служба wpa_supplicant@wlp6s0 придет в действие при включении беспроводного интерфейса, однако она будет также искать настройки SSID и пароль точки доступа в файле /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Поэтому необходимо создать его с помощью утилиты wpa_passphrase.

Для этого выполните команду:

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

kjer SSID — это имя вашей точки доступа, password — пароль, а wlp6s0 — имя вашего беспроводного интерфейса.

Инициализируйте виртуальный интерфейс для tun2socks

Создайте файл для инициализации нового виртуального интерфейса в системе/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • Ime — это имя, которое systemd-networkd назначит будущему виртуальному интерфейсу при его инициализации.
  • Kind — это тип виртуального интерфейса. Исходя из названия службы tun2socks, вы можете догадаться, что она использует интерфейс типа tun.
  • netdev — это расширение файлов, которые systemd-networkd использует для инициализации виртуальных сетевых интерфейсов. Адрес и другие сетевые настройки для этих интерфейсов указываются в .network-arquivos.

Создайте такой файл /etc/systemd/network/25-tun2socks.network s sledečo vsebino:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • Ime — имя виртуального интерфейса, которое вы указали в netdev-файле.
  • Address — IP адрес, который будет назначен вирутальному интерфейсу. Должен быть в одной сети с адресом, который вы указали в службе tun2socks
  • Prehod — IP адрес «маршрутизатора» tun2socks, который вы указали при создании службы systemd.

Таким образом, интерфейс tun2socks имеет адрес 172.16.1.2, а служба tun2socks — 172.16.1.1, то есть является шлюзом для всех соединений с виртуального интерфейса.

Настройте виртуальную точку доступа

Установите зависимости:

apt install util-linux procps hostapd iw haveged

Скачайте репозиторий create_ap на свою машину:

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

Перейдите в папку репозитория на вашей машине:

cd create_ap

Установите в систему:

make install

В вашей системе появится конфиг /etc/create_ap.conf. Вот основные опции для правки:

  • GATEWAY=10.0.0.1 — лучше сделать отдельной зарезервированной подсетью.
  • NO_DNS=1 — выключите, так как этим параметром будет управлять виртуальный интерфейс systemd-networkd.
  • NO_DNSMASQ=1 — выключите по той же причине.
  • WIFI_IFACE=wlp6s0 — беспроводной интерфейс ноутбука.
  • INTERNET_IFACE=tun2socks — виртуальный интерфейс, созданный для tun2socks.
  • SSID=hostapd — имя виртуальной точки доступа.
  • PASSPHRASE=12345678 — пароль.

Не забудьте включить службу:

systemctl enable create_ap

Включите DHCP сервер в systemd-networkd

Служба create_ap инициализирует в системе виртуальный интерфейс ap0V teoriji se na tem vmesniku nahaja dnsmasq, vendar zakaj namestiti dodatne storitve, če systemd-networkd vsebuje vgrajen DHCP strežnik?

Da ga omogočimo, določimo omrežne nastavitve za virtualno točko. Za to ustvarite datoteko /etc/systemd/network/25-ap0.network s sledečo vsebino:

[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

Ko storitev create_ap inicializira virtualni vmesnik ap0, systemd-networkd mu bo samodejno dodelil IP naslov in omogočil DHCP strežnik.

Vrstice EmitDNS=yes in DNS=10.0.0.1 predajajo nastavitve DNS strežnika napravam, povezanih s točko dostopa.

Če ne nameravate uporabljati lokalnega DNS strežnika — v mojem primeru je to dnscrypt-proxy — lahko nastavite DNS=10.0.0.1 u DNS=192.168.1.1, gde 192.168.1.1 — naslov vašega izvirnega prehoda. Takrat bodo DNS poizvedbe vašega gostitelja in lokalne mreže potovale nešifrirano preko strežnikov ponudnika.

EmitNTP=yes in NTP=192.168.1.1 predajajo nastavitve NTP.

Enako velja za vrstico NTP=10.0.0.1.

Namestite in nastavite NTP strežnik

Установите в систему:

apt install ntp

Uredite konfiguracijo /etc/ntp.conf. Zakomentirajte naslove standardnih bazenov:

#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

Dodajte naslove javnih strežnikov, na primer Google Public NTP:

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

Omogočite dostop do strežnika strankam v vaši mreži:

restrict 10.0.0.0 mask 255.255.255.0

Omogočite oddajanje v vašo mrežo:

broadcast 10.0.0.255

Nazadnje dodajte naslove teh strežnikov v tabelo statičnega usmerjanja. Za to odprite datoteko konfiguracije brezžičnega vmesnika /etc/systemd/network/25-wlp6s0.network in na koncu odseka dodajte 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

Lahko izveste naslove vaših NTP strežnikov z uporabo pripomočka host takole:

host time1.google.com

Namestite dnscrypt-proxy, odstranite oglaševanje in zaščitite DNS promet pred ponudnikom

apt install dnscrypt-proxy

Da obdelujete DNS poizvedbe gostitelja in lokalne mreže, uredite vtičnico /lib/systemd/system/dnscrypt-proxy.socket. Spremenite naslednje vrstice:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Ponovno zaženite -enota:

systemctl daemon-reload

Uredite konfiguracijo /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

Da usmerite povezave dnscrypt-proxy preko tun2socks, dodajte spodaj:

force_tcp = true

Uredite konfiguracijo /etc/resolv.conf, ki obvešča DNS strežnik o gostitelju.

nameserver 127.0.0.1
nameserver 192.168.1.1

Prva vrstica omogoča uporabo dnscrypt-proxy, druga pa uporablja izvirni prehod, v primeru, ko strežnik dnscrypt-proxy ni na voljo.

Gotovo!

Ponovno zaženite ali ustavite aktivne omrežne storitve:

systemctl stop networking NetworkManager NetworkManager-wait-online

In ponovno zaženite vse potrebne:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Po ponovnem zagonu ali ponovnem zagonu boste imeli drugo dostopno točko, ki usmerja gostitelja in naprave lokalnega omrežja v SOCKS.

Tako približno izgleda izhod ip a navadnega prenosnika:

1: lo:  mtu 65536 qdisc noqueue stanje NEZNANO skupina privzeto qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 obseg gostitelja lo
       veljavno_lft za vedno prednostno_lft za vedno
    inet6 ::1/128 obseg gostitelja 
       veljavno_lft za vedno prednostno_lft za vedno
2: tun2socks:  mtu 1500 qdisc pfifo_fast stanje UP skupina privzeto qlen 500
    link/none 
    inet 172.16.1.2/24 brd 172.16.1.255 obseg global tun2socks
       veljavno_lft za vedno prednostno_lft za vedno
    inet6 fe80::122b:260:6590:1b0e/64 obseg povezave stabilna-zasebnost 
       veljavno_lft za vedno prednostno_lft za vedno
3: enp4s0:  mtu 1500 qdisc pfifo_fast stanje NAVZDOL skupina privzeto qlen 1000
    link/ether e8:11:32:0e:01:50 brd ff:ff:ff:ff:ff:ff
4: wlp6s0:  mtu 1500 qdisc noqueue stanje UP skupina privzeto 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 obseg global wlp6s0
       veljavno_lft za vedno prednostno_lft za vedno
    inet6 fe80::4eed:deff:fecb:cf85/64 obseg povezave 
       veljavno_lft za vedno prednostno_lft za vedno
5: ap0:  mtu 1500 qdisc noqueue stanje UP skupina privzeto 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 obseg global ap0
       veljavno_lft za vedno prednostno_lft za vedno
    inet6 fe80::4eed:deff:fecb:cf86/64 obseg povezave 
       veljavno_lft za vedno prednostno_lft za vedno

Na koncu

  1. Ponudnik vidi le šifrirano povezavo s vašim SOCKS strežnikom, kar pomeni, da ničesar ne vidi.
  2. Kljub temu pa vidi vaše NTP poizvedbe, da bi to preprečili, odstranite statične usmeritve za NTP strežnike. Vendar pa ni nujno, da vaš SOCKS strežnik omogoča protokol NTP.

Obvoz, opazen na Debain 10

Če poskusite znova zagnati omrežno storitev iz konzole, bo prišlo do napake. To je povezano s tem, da je njen del v obliki virtualnega vmesnika vezan na storitev tun2socks in se torej uporablja. Da bi znova zagnali omrežno storitev, morate najprej ustaviti storitev tun2socks. A mislim, da to zagotovo ni problem, če ste to pravkar prebrali!

Povezave

  1. Statično usmerjanje v Linuxu - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Ta skripta ustvari NATed ali mostička WiFi dostopno točko.
  5. dnscrypt-proxy 2 - prilagodljiv DNS posrednik z podporo za šifrirane DNS protokole.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster