Мен бул макаланы жарыялоону бир жыл (же эки жыл) бою негизги себеп менен кийинкиге калтырдым - мен буга чейин эле SOCKS программасында абдан жөнөкөй ноутбуктан роутерди түзүү процессин сүрөттөгөн эки макала жарыялаган элем. Debian.
Бирок, ошондон бери туруктуу версиясы Debian Мен Buster версиясына өткөм, жана бир топ адамдар мага жеке байланышып, орнотуу боюнча жардам сурашты, демек, мурунку макалаларым толук эмес. Ооба, мен аларда сүрөттөлгөн ыкмалар орнотуунун бардык чоо-жайын толук камтыбайт деп шектенип жаткам. Linux SOCKS'та маршруттоо үчүн. Андан тышкары, алар үчүн жазылган Debian Stretch жана Busterге жаңырткандан кийин, кызматтардын systemd init системасы менен өз ара аракеттенүүсүндө бир аз өзгөрүүлөрдү байкадым. Ошондой эле, макалалардын өзүндө systemd-networkd колдонгон жокмун, бирок ал татаал тармак конфигурациялары үчүн эң ылайыктуу.
Жогорудагы өзгөртүүлөрдөн тышкары, менин конфигурацияма төмөнкү кызматтар кошулду: hostapd - кирүү чекитинин виртуалдаштыруу кызматы, ntp жергиликтүү тармак кардарларынын убактысын синхрондоштуруу үчүн, dnscrypt-прокси DNS аркылуу туташууларды шифрлөө жана локалдык тармак кардарларында жарнаманы өчүрүү, ошондой эле, мен жогоруда айткандай, systemd-networkd тармак интерфейстерин конфигурациялоо үчүн.
Мына ушундай роутердин ички түзүлүшүнүн жөнөкөй блок-схемасы.

Ошентип, бул макалалар сериясынын максаттары эмне экенин эскертип кетейин:
- Бардык ОС туташууларын SOCKSга, ошондой эле ноутбук менен бир тармактагы бардык түзмөктөрдөн туташууларды багыттаңыз.
- Менин ишимдеги ноутбук толугу менен мобилдик бойдон калышы керек. Башкача айтканда, рабочий чөйрөнү колдонууга мүмкүнчүлүк берүү жана физикалык жерге байланбоо.
- Акыркы пункт орнотулган зымсыз интерфейс аркылуу гана байланышты жана маршрутту билдирет.
- Албетте, комплекстүү колдонмону түзүү, ошондой эле менин эң жөнөкөй билимим боюнча тиешелүү технологияларды талдоо.
Бул макалада эмнелер каралат:
- Мурунку — долбоордун репозиторийлерин жүктөө tun2socksTCP трафикти SOCKSга багыттоо үчүн талап кылынат жана create_ap — колдонуу менен виртуалдык кирүү чекитинин орнотууну автоматташтыруу үчүн скрипт hostapd.
- tun2socks — системага systemd кызматын куруу жана орнотуу.
- systemd-networkd — зымсыз жана виртуалдык интерфейстерди, статикалык маршруттук таблицаларды жана пакетти кайра багыттоону конфигурациялоо.
- create_ap — системага systemd кызматын орнотуп, виртуалдык кирүү чекитинин конфигурациясын жана ишке киргизиңиз.
Кошумча кадамдар:
- ntp — виртуалдык кирүү чекитинин кардарларында убакытты синхрондоштуруу үчүн серверди орнотуу жана конфигурациялоо.
- dnscrypt-прокси — биз DNS сурамдарын шифрлеп, аларды SOCKSга багыттайбыз жана жергиликтүү тармак үчүн жарнамалык домендерди өчүрөбүз.
Мунун баары эмне үчүн?
Бул локалдык тармакта TCP туташууларын коргоонун жолдорунун бири. Негизги артыкчылыгы, эгерде алар үчүн баштапкы шлюз аркылуу статикалык маршрут курулбаса, бардык байланыштар SOCKS менен жасалат. Бул SOCKS серверинин жөндөөлөрүн локалдык тармактагы жеке программаларга да, кардарларга да көрсөтүүнүн кереги жок дегенди билдирет - алардын баары демейки боюнча SOCKSге өтүшөт, анткени биз башкасын көрсөткөнгө чейин ал демейки шлюз болуп саналат.
Негизи биз оригиналдуу роутердин алдына ноутбук катары экинчи шифрлөөчү роутерди кошобуз жана ноутбуктун шифрленген SOCKS сурамдары үчүн баштапкы роутердин Интернет туташуусун колдонобуз, ал өз кезегинде LAN кардарларынын суроо-талаптарын багыттап, шифрлейт.
Провайдердин көз карашы боюнча, биз шифрленген трафик менен бир серверге дайыма туташып турабыз.
Демек, бардык түзмөктөр ноутбуктун виртуалдык кирүү чекитине туташтырылган.
Тутумга tun2socks орнотуу
Машинаңызда интернет бар болсо, бардык керектүү шаймандарды жүктөп алыңыз.
apt updateapt install git make cmakebadvpn топтомун жүктөп алыңыз
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=1badvpn репозиторийинин бардык компоненттеринин түзүлүшүн өчүрөт. - -
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-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. - 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 серверинин дареги.
systemd-networkd үчүн wpa_supplicant конфигурациялоо
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Системаңызда конфигурация пайда болот /etc/create_ap.conf. Бул жерде негизги түзөтүү параметрлери болуп саналат:
GATEWAY=10.0.0.1— аны өзүнчө резервдик тармак кылып койгон жакшы.NO_DNS=1- өчүрүү, анткени бул параметр системалык тармактын виртуалдык интерфейси тарабынан башкарылат.NO_DNSMASQ=1- ошол эле себеп менен өчүрүү.WIFI_IFACE=wlp6s0— ноутбуктун зымсыз интерфейси.INTERNET_IFACE=tun2socks- tun2socks үчүн түзүлгөн виртуалдык интерфейс.SSID=hostapd— виртуалдык кирүү чекитинин аталышы.PASSPHRASE=12345678- купуя сөз.
Кызматты иштетүүнү унутпаңыз:
systemctl enable create_apsystemd-networkd DHCP серверин иштетүү
иш 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-прокси - орното аласыз 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.comDnscrypt-прокси орнотуп, жарнамаларды алып салыңыз жана провайдериңизден DNS трафигин жашырыңыз
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']
tun2socks аркылуу dnscrypt-прокси байланыштарын багыттоо үчүн, төмөндө кошуңуз:
force_tcp = true
Конфигурацияны түзөтүңүз /etc/resolv.conf, ал DNS серверин хостко айтат.
nameserver 127.0.0.1
nameserver 192.168.1.1Биринчи сап dnscrypt-проксиди колдонууга мүмкүндүк берет, экинчи сап dnscrypt-прокси сервери жеткиликсиз болгон учурда түпнуска шлюзду колдонот.
Кереги жок!
Тармак кызматтарын өчүрүп күйгүзүү же иштетүүнү токтотуу:
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
Жыйынтыгында
- Провайдер сиздин SOCKS сервериңизге шифрленген байланышты гана көрөт, демек алар эч нерсе көрбөйт.
- Бирок ал сиздин NTP сурамдарыңызды көрөт, муну болтурбоо үчүн NTP серверлери үчүн статикалык маршруттарды алып салыңыз. Бирок, сиздин SOCKS сервериңиз NTP протоколуна уруксат берери анык эмес.
Crutch Debain 10до байкалды
Эгер сиз консолдон тармактык кызматты кайра иштетүүгө аракет кылсаңыз, ал ката менен ишке ашпай калат. Бул виртуалдык интерфейс түрүндөгү анын бир бөлүгү tun2socks кызматына байланганына байланыштуу, демек ал колдонулат. Тармак кызматын кайра иштетүү үчүн, адегенде tun2socks кызматын токтотуу керек. Бирок, менимче, эгер сиз аягына чейин окусаңыз, бул сиз үчүн көйгөй эмес!
шилтемелер
Source: www.habr.com
