Які будуецца маршрутызатар у SOCKS на наўтбуку з Debian 10
Цэлы год (ці два) я адкладаў публікацыю дадзенага артыкула па галоўным чынніку – мной ужо былі апублікаваныя два артыкула, у якіх я апісаў працэс стварэння маршрутызатара ў SOCKS з самага звычайнага наўтбука з Debian.
Аднак, з тых часоў стабільная версія Debian абнавілася да Buster, мне ў твары звярнулася дастатковая колькасць людзей з просьбай дапамагчы ў наладзе, а значыць, мае папярэднія артыкулы не з'яўляюцца вычарпальнымі. Што ж, я і сам здагадваўся, што метады, выкладзеныя ў іх, не да канца раскрываюць усе тонкасці налады Linux для маршрутызацыі ў SOСKS. Да таго ж яны напісаны для Debian Stretch, а пасля абнаўлення да Buster, у сістэме ініцыялізацыі systemd, я заўважыў невялікія змены ва ўзаемадзеянні службаў. Ды і ў саміх артыкулах я не выкарыстоўваў systemd-networkd, хоць яна лепш за ўсё падыходзіць для складаных сеткавых канфігурацый.
Акрамя вышэйзгаданых змен, у маю канфігурацыю дадаліся такія службы як hostapd - служба для віртуалізацыі кропкі доступу, ntp для сінхранізацыі часу кліентаў лакальнай сеткі, dnscrypt-proxy для шыфравання злучэнняў па пратаколе DNS і адключэння рэкламы на кліентах лакальнай сеткі, а таксама, як я згадваў раней, systemd-networkd для канфіграцыі сеткавых інтэрфейсаў.
Вось найпростая блок-схема, унутранай прылады такога маршрутызатара.
Такім чынам, я нагадаю, якія мэты пераследуе цыкл дадзеных артыкулаў:
Маршрутызаваць у SOCKS усе злучэнні АС, а таксама злучэнні ўсіх прылад, якія складаюцца ў адной сетцы з наўтбукам.
Наўтбук у маім выпадку павінен заставацца цалкам мабільным. Гэта значыць, даваць магчымасць выкарыстоўваць асяроддзе працоўнага стала і не быць прывязаным да фізічнага месцазнаходжання.
Апошні пункт мае на ўвазе падлучэнне і маршрутызацыю толькі праз убудаваны бесправадны інтэрфейс.
Ну, і вядома, стварэнне вычарпальнага кіраўніцтва, а таксама разбор адпаведных тэхналогій у меру маіх сціплых спазнанняў.
Што будзе разгледжана ў дадзеным артыкуле:
мярзотнік - спампуем рэпаізіторыі праектаў tun2socks, неабходнага для маршрутызацыі трафіку TCP у SOCKS, і create_ap - скрыпту для аўтаматызацыі налады віртуальнай кропкі доступу з дапамогай hostapd.
tun2socks - пабудуем і ўсталюем службу systemd у сістэму.
systemd-networkd - наладзім бесправадной і віртуальныя інтэрфейсы, табліцы статычнай маршрутызацыі і перанакіраванне пакетаў.
create_ap - усталюем службу systemd у сістэму, наладзім і запусцім віртуальную кропку доступу.
Неабавязковыя крокі:
ntp - усталюем і наладзім сервер для сихронизации часу на кліентах віртуальнай кропкі доступу.
dnscrypt-proxy - Зашыфруем запыты DNS, маршрутызуем іх у SOCKS і адключым рэкламныя дамены для лакальнай сеткі.
Нашто ўсё гэта?
Гэта адзін са спосабаў арганізацыі абароны TCP-злучэнняў лакальнай сеткі. Галоўная перавага - усе злучэнні ідуць у SOCKS, калі для іх не пабудаваны статычны маршрут праз арыгінальны шлюз. Гэта значыць, што не трэба прапісваць налады SOCKS-сервера ні асобным праграмам, ні кліентам у лакальнай сетцы - яны ўсё ідуць у SOCKS па-змаўчанні, бо ён з'яўляецца шлюзам па-змаўчанні, пакуль мы не пакажам зваротнага.
Па сутнасці мы дадаем другі шыфруючы роўтар у якасці наўтбука перад арыгінальным роўтэрам і выкарыстоўваем інтэрнэт злучэнне арыгінальнага роўтара для ўжо зашыфраваных SOCKS-запытаў наўтбука, які, у сваю чаргу, маршрутызуе і шыфруе запыты кліентаў лакальнай сеткі.
З пункту гледжання правайдэра мы ўвесь час падлучаныя да аднаго сервера з зашыфраваным трафікам.
Адпаведна, усе прылады падключаюцца да віртуальнай кропкі доступу наўтбука.
Усталюйце ў сістэму tun2socks
Пакуль на вашай машыне ёсць інтэрнэт, спампуйце ўсе неабходныя прылады.
apt update
apt install git make cmake
Запампуйце пакет badvpn
git clone https://github.com/ambrop72/badvpn
У вашай сістэме з'явіцца тэчка badvpn. Стварыце асобную тэчку для зборкі
NetworkManager-wait-online - гэта служба, якая чакае наяўнасць працавальнага сеткавага падлучэння перш, чым systemd працягне запуск іншых службаў, якія залежаць ад наяўнасці сеткі. Мы адключаем яе, бо пяройдзем на аналог systemd-networkd.
Давайце адразу ўключым яго:
systemctl enable systemd-networkd-wait-online
Наладзьце бесправадны сеткавы інтэрфейс
Стварыце файл канфігурацыі systemd-networkd для бесправаднога сеткавага інтэрфейсу /etc/systemd/network/25-wlp6s0.network.
Імя - гэта імя вашага бесправаднога інтэрфейсу. Ідэнтыфікуйце яго камандай ip a.
IPForward - Дырэктыва, якая ўключае перанакіраванне пакетаў на сеткавым інтэрфейсе.
Адрас адказвае за прысваенне 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 - гэта імя вашай кропкі доступу, password - пароль, а 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
Запампуйце рэпазітар сreate_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.
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 з наступным змесцівам:
Пасля таго, як служба сreate_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.
Дадайце адрасы публічных сервераў, напрыклад, 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.
Пасля перазагрузкі ці перазапуску ў вас з'явіцца другая кропка доступу, якая маршрутызуе хост і прылады лакальнай сеткі ў 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. Але, я думаю, калі вы дачыталі да канца, для вас гэта сапраўды не праблема!