Изграждане на рутер в SOCKS на лаптоп Debian 10

От цяла година (или две) отлагам публикуването на тази статия поради основната причина - вече публикувах две статии, в които описах процеса на създаване на рутер в SOCKS от най-обикновен лаптоп с Debian.

Въпреки това, тъй като стабилната версия на Debian беше надстроена до Buster, доста хора се свързаха с мен с молба за помощ при настройката, което означава, че предишните ми статии не са изчерпателни. Е, аз самият предположих, че описаните в тях методи не разкриват напълно всички тънкости на настройката на Linux за маршрутизиране към SOCKS. В допълнение, те са написани за Debian Stretch и след надграждане до Buster, в системата за стартиране на systemd, забелязах лека промяна във взаимодействието на услугите. И в самите статии не използвах systemd-networkd, въпреки че е най-подходящ за сложни мрежови конфигурации.

В допълнение към горните промени, следните услуги бяха добавени към моята конфигурация: hostapd - услуга за виртуализация на точката за достъп, ntp за синхронизиране на времето на клиентите на локалната мрежа, dnscrypt-прокси за криптиране на връзки чрез DNS протокола и забраняване на рекламите на клиенти на локална мрежа, а също така, както споменах по-рано, systemd-networkd за конфигуриране на мрежови интерфейси.

Ето най-простата блокова схема на вътрешната структура на такъв рутер.

Изграждане на рутер в SOCKS на лаптоп Debian 10

И така, ще ви напомня какви цели преследва поредицата от тези статии:

  1. Насочете всички OS връзки към SOCKS, както и връзките на всички устройства, които са в същата мрежа като лаптопа.
  2. Лаптопът в моя случай трябва да остане напълно мобилен. Тоест да се даде възможност да се използва десктоп средата и да не се обвързва с физическо местоположение.
  3. Последната точка предполага връзка и маршрутизиране само чрез вградения безжичен интерфейс.
  4. Е, разбира се, създаването на изчерпателно ръководство, както и анализ на съответните технологии според моите скромни познания.

Какво ще бъде разгледано в тази статия:

  1. Git - изтегляне на хранилища на проекти tun2socksнеобходим за насочване на TCP трафик към SOCKS и create_ap - скрипт за автоматизиране на конфигурацията на виртуална точка за достъп с помощта hostapd.
  2. tun2socks - изграждане и инсталиране на услугата systemd в системата.
  3. systemd-networkd - конфигуриране на безжични и виртуални интерфейси, статични таблици за маршрутизиране и пренасочване на пакети.
  4. create_ap - инсталирайте услугата systemd в системата, конфигурирайте и стартирайте виртуалната точка за достъп.

Незадължителни стъпки:

  • ntp - инсталирайте и конфигурирайте сървъра за времева синхронизация на клиенти на виртуална точка за достъп.
  • dnscrypt-прокси - криптирайте DNS заявки, насочвайте ги към SOCKS и деактивирайте рекламните домейни за локалната мрежа.

За какво е всичко това?

Това е един от начините за организиране на защитата на TCP връзките в локална мрежа. Основното предимство е, че всички връзки отиват към SOCKS, освен ако за тях не е изграден статичен маршрут през оригиналния шлюз. Това означава, че не е необходимо да записвате настройките на SOCKS сървъра нито на отделни програми, нито на клиенти в локалната мрежа - всички те отиват на SOCKS по подразбиране, тъй като това е шлюзът по подразбиране, докато не посочим друго.

По принцип добавяме втори рутер за шифроване като лаптоп пред оригиналния рутер и използваме интернет връзката на оригиналния рутер за вече SOCKS криптирани заявки на лаптопа, което на свой ред маршрутизира и криптира заявки от LAN клиенти.

От гледна точка на доставчика ние сме постоянно свързани към един и същ сървър с криптиран трафик.

Съответно всички устройства са свързани към виртуалната точка за достъп на лаптопа.

Инсталирайте tun2socks на вашата система

Стига да имате интернет на вашата машина, изтеглете всички необходими инструменти.

apt update
apt install git make cmake

Изтеглете пакета badvpn

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

Във вашата система ще се появи папка badvpn. Създайте отделна папка за компилация

mkdir badvpn-build

Влез в него

cd badvpn-build

Събирай tun2socks

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

Инсталирайте в системата

make install
  • Параметър -DBUILD_NOTHING_BY_DEFAULT=1 деактивира компилирането на всички компоненти на badvpn хранилище.
  • -DBUILD_TUN2SOCKS=1 включва компонент в сглобката tun2socks.
  • make install - ще инсталира двоичния файл tun2socks на вашата система на /usr/local/bin/badvpn-tun2socks.

Инсталирайте услугата tun2socks в systemd

Създайте файл /etc/systemd/system/tun2socks.service със следното съдържание:

[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.
  • --netif-ipaddr - мрежов адрес на "рутера" tun2socks, към който е свързан виртуалният интерфейс. По-добре е да го направите отделно запазена подмрежа.
  • --socks-server-addr - приема сокет (адрес:порт SOCKS сървър).

Ако вашият SOCKS сървър изисква удостоверяване, можете да посочите опции --username и --password.

След това регистрирайте услугата

systemctl daemon-reload

И включете

systemctl enable tun2socks

Преди да стартираме услугата, ще й предоставим виртуален мрежов интерфейс.

Превключване към systemd-networkd

Включи systemd-networkd:

systemctl enable systemd-networkd

Деактивирайте текущите мрежови услуги.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-чакайте-онлайн е услуга, която чака работеща мрежова връзка, преди 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
  • Име е името на вашия безжичен интерфейс. Идентифицирайте го с командата ip a.
  • IP препращане е директива, която позволява пренасочване на пакети на мрежов интерфейс.
  • Адрес отговаря за присвояването на IP адрес на безжичния интерфейс. Указваме го статично, защото с еквивалентната директива DHCP=yes, systemd-networkd създава шлюз по подразбиране в системата. Тогава целият трафик ще преминава през оригиналния шлюз, а не през бъдещия виртуален интерфейс в друга подмрежа. Можете да проверите текущия шлюз по подразбиране с командата ip r

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

Ако вашият SOCKS сървър не е локален, а отдалечен, тогава трябва да създадете статичен маршрут за него. За да направите това, добавете раздел Route до края на създадения от вас конфигурационен файл за безжичен интерфейс със следното съдържание:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway е шлюзът по подразбиране или адресът на вашата оригинална точка за достъп.
  • Destination - SOCKS сървър адрес.

Настройте wpa_supplicant за systemd-networkd

systemd-networkd използва wpa_supplicant за свързване към защитена точка за достъп. Когато се опитва да "повдигне" безжичен интерфейс, systemd-networkd стартира услуга wpa_supplicant@имяКъдето име е името на безжичния интерфейс. Ако не сте използвали systemd-networkd до този момент, вероятно нямате тази услуга на вашата система.

Затова го създайте с командата:

systemctl enable wpa_supplicant@wlp6s0

използвах 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

където SSID е името на вашата точка за достъп, паролата е паролата и wlp6s0 е името на вашия безжичен интерфейс.

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

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

[NetDev]
Name=tun2socks
Kind=tun
  • Име е името, което systemd-networkd ще присвои на бъдещия виртуален интерфейс, когато бъде инициализиран.
  • Мил е типът виртуален интерфейс. От името на услугата tun2socks можете да познаете, че тя използва интерфейс като tun.
  • netdev е разширението на файловете, които systemd-networkd използва за инициализиране на виртуални мрежови интерфейси. Адресът и другите мрежови настройки за тези интерфейси са посочени в . мрежа-файлове.

Създайте такъв файл /etc/systemd/network/25-tun2socks.network със следното съдържание:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • Name е името на виртуалния интерфейс, в който сте посочили netdev-файл.
  • Address — IP адресът, който ще бъде присвоен на виртуалния интерфейс. Трябва да е в същата мрежа като адреса, който предоставихте в услугата tun2socks
  • Gateway - 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

config ще се появи на вашата система /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 инициализира виртуален интерфейс в системата ap0. На теория dnsmasq „виси“ на този интерфейс, но защо да инсталирате допълнителни услуги, ако systemd-networkd съдържа вграден DHCP сървър?

За да го активирате, нека дефинираме мрежовите настройки за виртуалната точка. За да направите това, създайте файл /etc/systemd/network/25-ap0.network със следното съдържание:

[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 инициализира виртуалния интерфейс ap0, systemd-networkd автоматично ще му присвои IP адрес и ще активира DHCP сървър.

линии EmitDNS=yes и DNS=10.0.0.1 предава настройките на DNS сървъра към устройства, свързани към точката за достъп.

Ако не планирате да използвате локален DNS сървър - в моя случай това е dnscrypt-proxy - можете да инсталирате DNS=10.0.0.1 в DNS=192.168.1.1Където 192.168.1.1 е адресът на вашия оригинален шлюз. Тогава DNS заявките на вашия хост и локална мрежа ще преминат некриптирани през сървърите на доставчика.

EmitNTP=yes и NTP=192.168.1.1 предаване на NTP настройки.

Същото важи и за линията NTP=10.0.0.1.

Инсталирайте и конфигурирайте NTP сървър

Инсталирайте в системата:

apt install ntp

Редактирайте конфигурацията /etc/ntp.conf. Коментирайте адресите на стандартните пулове:

#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

Добавете адреси на публичен сървър, като Google Public NTP:

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

Предоставете достъп до сървъра на клиенти от вашата мрежа:

restrict 10.0.0.0 mask 255.255.255.0

Активирайте излъчването във вашата мрежа:

broadcast 10.0.0.255

Накрая добавете адресите на тези сървъри към статичната таблица за маршрутизиране. За да направите това, отворете конфигурационния файл на безжичния интерфейс /etc/systemd/network/25-wlp6s0.network и добавете към края на раздела 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

Можете да разберете адресите на вашите NTP сървъри с помощта на помощната програма host както следва:

host time1.google.com

Инсталирайте dnscrypt-прокси, премахнете рекламите и скрийте DNS трафика от ISP

apt install dnscrypt-proxy

За да обслужвате DNS заявки в хоста и локалната мрежа, редактирайте сокета /lib/systemd/system/dnscrypt-proxy.socket. Променете следните редове:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Рестартирам systemd:

systemctl daemon-reload

Редактирайте конфигурацията /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

За да маршрутизирате dnscrypt-прокси връзки през tun2socks, добавете следното:

force_tcp = true

Редактирайте конфигурацията /etc/resolv.conf, който съобщава на DNS сървъра на хоста.

nameserver 127.0.0.1
nameserver 192.168.1.1

Първият ред позволява използването на dnscrypt-proxy, вторият използва оригиналния шлюз в случай, че dnscrypt-proxy сървърът е недостъпен.

Готово!

Рестартирайте или спрете да изпълнявате мрежови услуги:

systemctl stop networking NetworkManager NetworkManager-wait-online

И рестартирайте всичко необходимо:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

След рестартиране или рестартиране ще имате втора точка за достъп, която насочва хоста и LAN устройствата към SOCKS.

Резултатът изглежда така ip a обикновен лаптоп:

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

В резултат на това

  1. Доставчикът вижда само криптирана връзка към вашия SOCKS сървър, което означава, че не вижда нищо.
  2. Той все още вижда вашите NTP заявки, за да предотвратите това, премахнете статичните маршрути за NTP сървъри. Не е сигурно обаче, че вашият SOCKS сървър позволява NTP протокола.

Патерица, видяна на Debain 10

Ако се опитате да рестартирате мрежовата услуга от конзолата, тя ще се срине с грешка. Това се дължи на факта, че неговата част под формата на виртуален интерфейс е свързана с услугата tun2socks, което означава, че се използва. За да рестартирате мрежовата услуга, първо трябва да спрете услугата tun2socks. Но мисля, че ако сте прочели до края, това определено не е проблем за вас!

Позоваването

  1. Статично маршрутизиране на Linux - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks ambrop72/badvpn Wiki GitHub
  4. oblique/create_ap: Този скрипт създава NATed или Bridged WiFi точка за достъп.
  5. dnscrypt-proxy 2 - Гъвкав DNS прокси, с поддръжка на криптирани DNS протоколи.

Източник: www.habr.com