Бүтэн жилийн турш (эсвэл хоёр) би энэ нийтлэлийг нийтлэхийг гол шалтгааны улмаас хойшлуулсан - би Debian-тай маш энгийн зөөврийн компьютерээс SOCKS-д чиглүүлэгч үүсгэх үйл явцыг тайлбарласан хоёр нийтлэлийг аль хэдийн нийтэлсэн.
Гэсэн хэдий ч, тэр цагаас хойш Debian-ийн тогтвортой хувилбарыг Buster болгон шинэчилсэн тул хангалттай тооны хүмүүс надтай холбогдож тохиргооны талаар тусламж хүссэн нь миний өмнөх нийтлэлүүд бүрэн дүүрэн биш гэсэн үг юм. За, тэдгээрт дурдсан аргууд нь SOCKS-д чиглүүлэхийн тулд Linux-ийг тохируулах бүх нарийн ширийн зүйлийг бүрэн илчилж чадахгүй гэж би өөрөө таамаглаж байсан. Нэмж дурдахад тэдгээрийг Debian Stretch-д зориулж бичсэн бөгөөд Buster руу шинэчилсний дараа systemd init системд үйлчилгээнүүдийн харилцан үйлчлэлд бага зэрэг өөрчлөлт гарч байгааг анзаарсан. Мөн нийтлэлүүдэд би systemd-networkd-г ашиглаагүй боловч энэ нь сүлжээний нарийн төвөгтэй тохиргоонд хамгийн тохиромжтой байдаг.
Дээрх өөрчлөлтүүдээс гадна миний тохиргоонд дараах үйлчилгээнүүд нэмэгдсэн: hostapd - хандалтын цэгийн виртуалчлалын үйлчилгээ, ntp дотоод сүлжээний үйлчлүүлэгчдийн цагийг синхрончлох, dnscrypt-прокси DNS-ээр дамжуулан холболтыг шифрлэх, дотоод сүлжээний үйлчлүүлэгчид дээрх зар сурталчилгааг идэвхгүй болгох, мөн миний өмнө дурдсанчлан, systemd-networkd сүлжээний интерфэйсийг тохируулах зориулалттай.
Ийм чиглүүлэгчийн дотоод бүтцийн энгийн блок диаграмм энд байна.
Тиймээс энэ цуврал нийтлэлийн зорилго юу болохыг танд сануулъя.
- Бүх үйлдлийн системийн холболтыг SOCKS руу чиглүүлж, зөөврийн компьютертэй нэг сүлжээнд байгаа бүх төхөөрөмжүүдийн холболтыг чиглүүл.
- Миний тохиолдолд зөөврийн компьютер бүрэн хөдөлгөөнт хэвээр байх ёстой. Энэ нь ширээний орчинг ашиглах боломжийг олгож, физик байршилтай холбоогүй байх явдал юм.
- Сүүлчийн цэг нь зөвхөн суурилуулсан утасгүй интерфэйсээр дамжуулан холболт, чиглүүлэлт хийх гэсэн үг юм.
- За, мэдээжийн хэрэг, иж бүрэн гарын авлагыг бий болгох, түүнчлэн миний даруухан мэдлэгийн дагуу холбогдох технологид дүн шинжилгээ хийх.
Энэ нийтлэлд юу ярих вэ:
- Go - төслийн агуулахыг татаж авах тун2 оймсTCP урсгалыг SOCKS руу чиглүүлэх шаардлагатай ба үүсгэх_ap — виртуал хандалтын цэгийн тохиргоог автоматжуулах скрипт hostapd.
- тун2 оймс — системд systemd үйлчилгээг бүтээж суулгана.
- systemd-networkd — утасгүй болон виртуал интерфэйс, статик чиглүүлэлтийн хүснэгт, пакет дахин чиглүүлэх тохиргоог хийх.
- үүсгэх_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
угсралтын бүрэлдэхүүн хэсгийг багтаасан болно тун2 оймс. 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 нь ирээдүйн виртуал интерфейсийг эхлүүлэх үед түүнд өгөх нэр юм.
- Kind нь виртуал интерфейсийн төрөл юм. 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 хаяг тун2 оймсsystemd үйлчилгээг үүсгэх үед таны зааж өгсөн .
Тиймээс интерфейс тун2 оймс хаягтай 172.16.1.2
, үйлчилгээ тун2 оймс - 172.16.1.1
, өөрөөр хэлбэл, энэ нь виртуал интерфейсээс бүх холболтын гарц юм.
Виртуал хандалтын цэгийг тохируулна уу
Хамаарал суулгах:
apt install util-linux procps hostapd iw haveged
Хадгалах газрыг татаж авах үүсгэх_ап таны машинд:
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
systemd-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-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-proxy суулгаж, зарыг устгаж, үйлчилгээ үзүүлэгчээсээ 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-proxy холболтыг чиглүүлэхийн тулд доор нэмнэ үү:
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
Үүний үр дүнд,
- Үйлчилгээ үзүүлэгч нь зөвхөн таны SOCKS сервертэй шифрлэгдсэн холболтыг хардаг бөгөөд энэ нь юу ч харахгүй гэсэн үг юм.
- Гэсэн хэдий ч энэ нь таны NTP хүсэлтийг хардаг бөгөөд үүнээс урьдчилан сэргийлэхийн тулд NTP серверүүдийн статик замыг устгана уу. Гэхдээ таны SOCKS сервер NTP протоколыг зөвшөөрдөг нь тодорхойгүй байна.
Суга таяг Debain 10 дээр олдсон
Хэрэв та сүлжээний үйлчилгээг консолоос дахин эхлүүлэхийг оролдвол алдаа гарна. Энэ нь түүний нэг хэсэг нь виртуал интерфейс хэлбэрээр tun2socks үйлчилгээнд холбогдсонтой холбоотой бөгөөд энэ нь ашиглагдаж байгаа гэсэн үг юм. Сүлжээний үйлчилгээг дахин эхлүүлэхийн тулд эхлээд tun2socks үйлчилгээг зогсоох ёстой. Гэхдээ, хэрэв та дуустал нь уншвал энэ нь таны хувьд асуудал биш гэж би бодож байна!
лавлагаа
Линукс дээрх статик чиглүүлэлт - IBM systemd-networkd.service - Freedesktop.org Tun2socks · ambrop72/badvpn Wiki · GitHub oblique/create_ap: Энэ скрипт нь NATed эсвэл Bridged WiFi хандалтын цэгийг үүсгэдэг. dnscrypt-proxy 2 — Шифрлэгдсэн DNS протоколуудыг дэмждэг уян хатан DNS прокси.
Эх сурвалж: www.habr.com