بناء جهاز توجيه في SOCKS على كمبيوتر محمول Debian 10

لمدة عام كامل (أو عامين) كنت أقوم بتأجيل نشر هذه المقالة للسبب الرئيسي - لقد قمت بالفعل بنشر مقالتين وصفت فيهما عملية إنشاء جهاز توجيه في SOCKS من أكثر أجهزة الكمبيوتر المحمول العادية مع دبيان.

ومع ذلك ، منذ أن تمت ترقية إصدار Debian المستقر إلى Buster ، فقد تواصل معي عدد لا بأس به من الأشخاص لطلب المساعدة في الإعداد ، مما يعني أن مقالاتي السابقة ليست شاملة. حسنًا ، لقد خمنت بنفسي أن الطرق الموضحة فيها لا تكشف تمامًا كل التفاصيل الدقيقة لإعداد Linux للتوجيه إلى SOCKS. بالإضافة إلى ذلك ، تمت كتابتها من أجل Debian Stretch ، وبعد الترقية إلى Buster ، في نظام systemd init ، لاحظت تغيرًا طفيفًا في تفاعل الخدمات. وفي المقالات نفسها ، لم أستخدم systemd-networkd ، على الرغم من أنه الأنسب لتكوينات الشبكة المعقدة.

بالإضافة إلى التغييرات المذكورة أعلاه ، تمت إضافة الخدمات التالية إلى التكوين الخاص بي: hostapd - خدمة افتراضية لنقطة الوصول ، NTP لمزامنة وقت عملاء الشبكة المحلية ، وكيل dnscrypt لتشفير الاتصالات عبر بروتوكول DNS وتعطيل الإعلان على عملاء الشبكة المحلية ، وأيضًا ، كما ذكرت سابقًا ، systemd- شبكة د لتكوين واجهات الشبكة.

فيما يلي أبسط مخطط كتلة للبنية الداخلية لجهاز التوجيه هذا.

بناء جهاز توجيه في SOCKS على كمبيوتر محمول Debian 10

لذا ، سوف أذكرك بالأهداف التي تسعى إليها سلسلة هذه المقالات:

  1. قم بتوجيه جميع اتصالات نظام التشغيل إلى SOCKS ، بالإضافة إلى توصيلات جميع الأجهزة الموجودة على نفس الشبكة مثل الكمبيوتر المحمول.
  2. يجب أن يظل الكمبيوتر المحمول في حالتي متحركًا بالكامل. أي لإعطاء الفرصة لاستخدام بيئة سطح المكتب وعدم التقيد بموقع مادي.
  3. تشير النقطة الأخيرة إلى الاتصال والتوجيه فقط من خلال الواجهة اللاسلكية المدمجة.
  4. حسنًا ، بالطبع ، إنشاء دليل شامل ، بالإضافة إلى تحليل للتقنيات ذات الصلة على حد علمي المتواضع.

ما سيتم تناوله في هذا المقال:

  1. طائرة نفاثة - تحميل مستودعات المشروع tun2socksمطلوب لتوجيه حركة مرور TCP إلى SOCKS ، و create_ap - برنامج نصي لأتمتة تكوين نقطة وصول افتراضية باستخدام hostapd.
  2. tun2socks - بناء وتثبيت خدمة systemd على النظام.
  3. systemd- شبكة د - تكوين الواجهات اللاسلكية والظاهرية وجداول التوجيه الثابتة وإعادة توجيه الحزم.
  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-network د

شغله systemd-networkd:

systemctl enable systemd-networkd

تعطيل خدمات الشبكة الحالية.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • مدير الشبكة الانتظار عبر الإنترنت هي خدمة تنتظر اتصال شبكة يعمل قبل أن يستمر 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

سيظهر التكوين على نظامك /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

قم بتحرير ملف config /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

قم بتحرير ملف config /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

لتوجيه اتصالات dnscrypt-proxy من خلال tun2socks ، أضف ما يلي:

force_tcp = true

قم بتحرير ملف config /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

ونتيجة لذلك،

  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. منحرف / create_ap: هذا البرنامج النصي ينشئ NATed أو Bridged WiFi Access Point.
  5. dnscrypt-proxy 2 - وكيل DNS مرن ، مع دعم لبروتوكولات DNS المشفرة.

المصدر: www.habr.com