لمدة عام كامل (أو اثنين) ، أجلت نشر هذه المقالة للسبب الرئيسي - لقد نشرت بالفعل مقالتين وصفت فيه عملية إنشاء جهاز توجيه في SOCKS من كمبيوتر محمول عادي مع دبيان.ومع ذلك ، منذ ذلك الحين تم تحديث الإصدار المستقر من دبيان إلى Buster ، أرسل لي عدد كاف من الأشخاص طلبًا شخصيًا للمساعدة في التكوين ، مما يعني أن مقالاتي السابقة ليست شاملة. حسنًا ، لقد خمنت بنفسي أن الأساليب الموضحة فيها لم تكشف تمامًا عن جميع تعقيدات تكوين Linux للتوجيه في SOSKS. بالإضافة إلى ذلك ، تمت كتابتها لـ Debian Stretch ، وبعد الترقية إلى Buster ، في نظام التهيئة systemd ، لاحظت تغيرات صغيرة في تفاعل الخدمات. نعم ، وفي المقالات نفسها ، لم أستخدم systemd-networkd ، على الرغم من أنه الأنسب لتكوينات الشبكة المعقدة.وبالإضافة إلى التغييرات المذكورة أعلاه، والخدمات مثل hostapd أضيفت إلى تكوين بلدي - خدمة للمحاكاة الافتراضية نقطة وصول، معاهدة عدم الانتشار لمزامنة الوقت من عملاء شبكة الاتصال المحلية، dnscrypt بالوكالة لتشفير اتصالات 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
قم بتنزيل حزمة badvpngit clone https://github.com/ambrop72/badvpn
سيظهر
مجلد badvpn على نظامك . قم بإنشاء مجلد بناء منفصلmkdir badvpn-build
اذهب اليهاcd badvpn-build
قم ببناء tun2sockscmake ../badvpn -DBUILD_NOTHING_BY_DEFAULT=1 -DBUILD_TUN2SOCKS=1
التثبيت على النظامmake install
- -DBUILD_NOTHING_BY_DEFAULT = 1 تقوم المعلمة بتعطيل تجميع كل مكونات مستودع badvpn .
- DBUILD_TUN2SOCKS = 1 يتضمن مكونات tun2socks في التجميع .
- إجراء التثبيت - تثبيت ثنائي 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-wait-online هي خدمة تنتظر اتصال شبكة عاملاً قبل أن يواصل systemd تشغيل خدمات أخرى اعتمادًا على توفر الشبكة. نقوم بتعطيله ، حيث ننتقل إلى النظام التناظري d-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
IPMasquerade=yes
- Name هو اسم الواجهة اللاسلكية الخاصة بك. حدده باستخدام الأمر ip a .
- IPMasquerade هو توجيه يتضمن التنكر وإعادة توجيه الحزم على واجهة الشبكة.
- العنوان مسؤول عن تعيين عنوان IP للواجهة اللاسلكية. نحدده بشكل ثابت لأنه مع توجيه DHCP = نعم ، يقوم systemd-networkd بإنشاء بوابة افتراضية في النظام. ثم ستمر كل حركة المرور عبر البوابة الأصلية ، وليس من خلال الواجهة الافتراضية المستقبلية في شبكة فرعية ممتازة. يمكنك التحقق من العبارة الافتراضية الحالية باستخدام الأمر
ip r
إنشاء مسار ثابت لخادم SOCKS البعيد
إذا كان خادم SOCKS الخاص بك ليس محليًا ، ولكنه بعيد ، فأنت بحاجة إلى إنشاء مسار ثابت له. للقيام بذلك ، أضف قسم التوجيه في نهاية ملف التكوين اللاسلكي الذي قمت بإنشائه بالمحتويات التالية:[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
- البوابة هي البوابة أو العنوان الافتراضي لنقطة الوصول الأصلية.
- الوجهة - عنوان خادم SOCKS.
تكوين wpa_supplicant لنظام systemd-networkd
يستخدم systemd-networkd wpa_supplicant للاتصال بنقطة وصول آمنة. عند محاولة "رفع" الواجهة اللاسلكية ، يبدأ systemd-networkd الخدمة wpa_supplicant @ name ، حيث يكون name هو اسم الواجهة اللاسلكية. إذا لم تكن قد استخدمت 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
- Name هو الاسم الذي سيخصصه systemd-networkd للواجهة الظاهرية المستقبلية عندما تتم تهيئته.
- النوع هو نوع من الواجهة الافتراضية. بناءً على اسم خدمة tun2socks ، يمكنك تخمين أنها تستخدم واجهة مثل tun .
- netdev هو امتداد الملف الذي يستخدمه systemd-networkd لتهيئة واجهات الشبكة الافتراضية. يتم تحديد العنوان وإعدادات الشبكة الأخرى لهذه الواجهات في ملفات .network .
قم بإنشاء ملف /etc/systemd/network/25-tun2socks.network بالمحتويات التالية:[Match]
Name=tun2socks
[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
- الاسم - اسم الواجهة الافتراضية التي حددتها في ملف netdev .
- العنوان - عنوان IP الذي سيتم تخصيصه للواجهة الافتراضية. يجب أن يكون على نفس الشبكة مثل العنوان الذي حددته في tun2socks
- البوابة - عنوان 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 بالمحتويات التالية:[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
بعد تهيئة الخدمة sreate_ap للواجهة الظاهرية Ap0 ، يقوم systemd-NetworkD تلقائيًا بتعيين عنوان IP وتمكين خادم DHCP.خطوط EmitDNS = نعم و 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 = نعمو NTP = 192.168.1.1 يرسلان إعدادات NTP.وينطبق نفس الشيء على الخط NTP = 10.0.0.1 .تثبيت وتكوين خادم NTP
التثبيت في النظام:apt install ntp
قم بتحرير config /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]
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 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
قم بتحرير التكوين /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 . ولكن ، أعتقد ، إذا قرأت حتى النهاية ، فبالنسبة لك بالتأكيد ليست مشكلة!المراجع
- التوجيه الثابت على Linux - IBM
- systemd-networkd.service - Freedesktop.org
- Tun2socks ambrop72 / badvpn ويكي جيثب
- oblique / create_ap: ينشئ هذا النص البرمجي نقطة وصول WiFi NATed أو Bridged.
- dnscrypt-proxy 2 - وكيل DNS مرن ، مع دعم بروتوكولات DNS المشفرة.