От цяла година (или две) отлагам публикуването на тази статия поради основната причина - вече публикувах две статии, в които описах процеса на създаване на рутер в SOCKS от най-обикновен лаптоп с Debian.
Въпреки това, тъй като стабилната версия на Debian беше надстроена до Buster, доста хора се свързаха с мен с молба за помощ при настройката, което означава, че предишните ми статии не са изчерпателни. Е, аз самият предположих, че описаните в тях методи не разкриват напълно всички тънкости на настройката на Linux за маршрутизиране към SOCKS. В допълнение, те са написани за Debian Stretch и след надграждане до Buster, в системата за стартиране на systemd, забелязах лека промяна във взаимодействието на услугите. И в самите статии не използвах systemd-networkd, въпреки че е най-подходящ за сложни мрежови конфигурации.
В допълнение към горните промени, следните услуги бяха добавени към моята конфигурация: hostapd - услуга за виртуализация на точката за достъп, ntp за синхронизиране на времето на клиентите на локалната мрежа, dnscrypt-прокси за криптиране на връзки чрез DNS протокола и забраняване на рекламите на клиенти на локална мрежа, а също така, както споменах по-рано, systemd-networkd за конфигуриране на мрежови интерфейси.
Ето най-простата блокова схема на вътрешната структура на такъв рутер.
И така, ще ви напомня какви цели преследва поредицата от тези статии:
Насочете всички OS връзки към SOCKS, както и връзките на всички устройства, които са в същата мрежа като лаптопа.
Лаптопът в моя случай трябва да остане напълно мобилен. Тоест да се даде възможност да се използва десктоп средата и да не се обвързва с физическо местоположение.
Последната точка предполага връзка и маршрутизиране само чрез вградения безжичен интерфейс.
Е, разбира се, създаването на изчерпателно ръководство, както и анализ на съответните технологии според моите скромни познания.
Какво ще бъде разгледано в тази статия:
Git - изтегляне на хранилища на проекти tun2socksнеобходим за насочване на TCP трафик към SOCKS и create_ap - скрипт за автоматизиране на конфигурацията на виртуална точка за достъп с помощта hostapd.
tun2socks - изграждане и инсталиране на услугата systemd в системата.
systemd-networkd - конфигуриране на безжични и виртуални интерфейси, статични таблици за маршрутизиране и пренасочване на пакети.
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. Създайте отделна папка за компилация
NetworkManager-чакайте-онлайн е услуга, която чака работеща мрежова връзка, преди systemd да продължи да стартира други зависими от мрежата услуги. Ние го деактивираме, докато преминаваме към аналога systemd-networkd.
Нека го активираме веднага:
systemctl enable systemd-networkd-wait-online
Настройте безжичния мрежов интерфейс
Създайте конфигурационен файл systemd-networkd за безжичния мрежов интерфейс /etc/systemd/network/25-wlp6s0.network.
Име е името на вашия безжичен интерфейс. Идентифицирайте го с командата 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.
където 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 със следното съдържание:
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 със следното съдържание:
След като услугата 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. Коментирайте адресите на стандартните пулове:
Добавете адреси на публичен сървър, като 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.
След рестартиране или рестартиране ще имате втора точка за достъп, която насочва хоста и 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
В резултат на това
Доставчикът вижда само криптирана връзка към вашия SOCKS сървър, което означава, че не вижда нищо.
Той все още вижда вашите NTP заявки, за да предотвратите това, премахнете статичните маршрути за NTP сървъри. Не е сигурно обаче, че вашият SOCKS сървър позволява NTP протокола.
Патерица, видяна на Debain 10
Ако се опитате да рестартирате мрежовата услуга от конзолата, тя ще се срине с грешка. Това се дължи на факта, че неговата част под формата на виртуален интерфейс е свързана с услугата tun2socks, което означава, че се използва. За да рестартирате мрежовата услуга, първо трябва да спрете услугата tun2socks. Но мисля, че ако сте прочели до края, това определено не е проблем за вас!