مرّر بيانات IPv4 عبر خوادم DNS لتجاوز قيود جدار الحماية وتوفير وصول شبكة خفي لاختبار الاختراق.
هذا برنامج يتيح لك تمرير بيانات IPv4 عبر نفق من خلال خادم DNS. يمكن استخدامه في حالات مختلفة حيث يكون الوصول إلى الإنترنت محجوبًا بجدار ناري، لكن استعلامات DNS مسموح بها.
لتجميع iodine تحتاج إلى meson.
شغّل الأوامر التالية للتجميع داخل دليل build:
meson setup build
cd build
ninja
لبناء وتشغيل الاختبارات تحتاج إلى مكتبة check. ابدأها بتشغيل
ninja test داخل دليل البناء.
جرّبه داخل شبكتك المحلية! اتبع هذه الخطوات البسيطة:
./iodined -f 10.0.0.1 test.com.
إذا كنت تستخدم شبكة 10.0.0.0 بالفعل، استخدم شبكة داخلية أخرى مثل
172.16.0.0../iodine -f -r 192.168.0.1 test.com.
استبدل 192.168.0.1 بعنوان IP الخاص بخادمك.10.0.0.2 ولدى الخادم 10.0.0.1.لاستخدامه فعليًا عبر خادم أسماء وسيط، انظر أدناه.
ملاحظة: يجب أن يتحدث الخادم والعميل نفس البروتوكول بالضبط. في معظم الحالات، يعني ذلك تشغيل نفس إصدار iodine. لسوء الحظ، عادةً ما يكون تنفيذ التوافق البروتوكولي للأمام والخلف غير ممكن.
لاستخدام هذا النفق، تحتاج إلى التحكم في نطاق حقيقي (مثل mydomain.com)،
وخادم بعنوان IP عام لتشغيل iodined عليه. إذا كان هذا الخادم
يشغّل برنامج DNS بالفعل، فغيّر منفذ الاستماع الخاص به ثم استخدم خيار -b
في iodined للسماح لـ iodined بإعادة توجيه طلبات DNS. (لاحظ أن هذا الإجراء
غير مُوصى به في بيئات الإنتاج، لأن إعادة توجيه DNS في iodined
ليست شفافة تمامًا، على سبيل المثال لن تعمل عمليات نقل المنطقة.)
بدلاً من ذلك يمكنك إعادة توجيه النطاق الفرعي من خادم DNS الخاص بك إلى iodined
والذي يجب حينها أن يعمل على منفذ مختلف (-p).
ثم، فوّض نطاقًا فرعيًا (مثلاً، t1.mydomain.com) إلى خادم iodined.
إذا كنت تستخدم BIND لنطاقك، أضف سطرين مثل هذين إلى ملف المنطقة:
t1 IN NS t1ns.mydomain.com. ; note the dot!
t1ns IN A 10.15.213.99
سطر NS هو كل ما تحتاجه لتوجيه الاستعلامات الخاصة بالنطاق الفرعي t1
إلى خادم t1ns. نستخدم اسمًا قصيرًا للنطاق الفرعي، للحفاظ على أكبر قدر
ممكن من المساحة المتاحة لحركة البيانات. في نهاية سطر NS
يوجد اسم خادم iodined الخاص بك. يمكن أن يكون أي اسم، يشير إلى أي مكان،
لكن في هذه الحالة يسهل الاحتفاظ به في نفس ملف المنطقة. يجب أن يكون اسمًا
(وليس عنوان IP)، ويجب أن يكون لهذا الاسم نفسه سجل A
(وليس CNAME).
إذا كان خادم iodined الخاص بك لديه IP ديناميكي، استخدم مزود DNS ديناميكي. ببساطة
وجّه سطر NS إليه، واترك سطر A خارجًا:
t1 IN NS myname.mydyndnsprovider.com. ; note the dot!
ثم أعد تحميل أو أعد تشغيل برنامج خادم الأسماء الخاص بك. الآن أي استعلامات DNS
للنطاقات المنتهية بـ t1.mydomain.com سيتم إرسالها إلى خادم iodined الخاص بك.
أخيرًا شغّل iodined على خادمك. الوسيطة الأولى هي عنوان IP
داخل النفق، والذي يمكن أن يكون من أي نطاق لا تستخدمه بعد (على
سبيل المثال 192.168.99.1)، والوسيطة الثانية هي النطاق المعيّن (في هذه
الحالة t1.mydomain.com). استخدام خيار -f سيبقي iodined يعمل في
المقدمة، مما يساعد عند الاختبار. سيفتح iodined واجهة افتراضية
("tun device")، وسيبدأ أيضًا في الاستماع لاستعلامات DNS على منفذ UDP 53.
إما أدخل كلمة مرور على سطر الأوامر (-P pass) أو بعد أن يبدأ الخادم.
الآن كل شيء جاهز للعميل.
إذا كانت هناك احتمالية لاستخدام نفق iodine من بيئات غير متوقعة،
فشغّل iodined مع خيار -c.
سطر الأوامر الناتج في حالة المثال هذه:
./iodined -f -c -P secretpassword 192.168.99.1 t1.mydomain.com
تم إنجاز كل الإعداد، فقط شغّل iodine. يأخذ وسيطة واحدة أو اثنتين،
الأولى هي خادم DNS الوسيط المحلي (اختياري) والثانية هي النطاق
الذي استخدمته (t1.mydomain.com). إذا لم تحدد الوسيطة الأولى،
سيتم الرجوع إلى إعداد DNS الحالي للنظام.
إذا كانت استعلامات DNS مسموحًا بها لأي جهاز كمبيوتر، يمكنك إعطاء عنوان
خادم iodined مباشرة كوسيطة أولى (في المثال: t1ns.mydomain.com أو
10.15.213.99). في هذه الحالة، قد يحدث أيضًا أن أي حركة مرور مسموح بها
إلى منفذ DNS (53 UDP) لأي جهاز كمبيوتر. سيكتشف Iodine هذا، وسيتحول
إلى نفق UDP خام إذا كان ذلك ممكنًا. لفرض نفق DNS في أي حال، استخدم
خيار -r (مفيد بشكل خاص عند الاختبار داخل شبكتك الخاصة).
ستحصل واجهة النفق الخاصة بالعميل على IP قريب من IP الخادم (في هذه
الحالة 192.168.99.2 أو .3 إلخ) و MTU مناسب. أدخل نفس كلمة المرور كما
على الخادم إما كخيار سطر أوامر أو بعد أن يبدأ العميل.
استخدام خيار -f سيبقي عميل iodine يعمل في المقدمة.
سطر الأوامر الناتج في حالة المثال هذه، إضافة -r تفرض نفق DNS حتى لو كان نفق UDP الخام ممكنًا:
./iodine -f -P secretpassword t1.mydomain.com
من أي من الجانبين، يجب أن تكون الآن قادرًا على عمل ping لعنوان IP على الطرف
الآخر من النفق. في هذه الحالة، ping 192.168.99.1 من عميل iodine، و
192.168.99.2 من خادم iodine.
البيانات داخل النفق هي IPv4 فقط.
يستمع الخادم لكل من IPv4 و IPv6 للطلبات الواردة افتراضيًا.
استخدم الخيارين -4 أو -6 للاستماع على بروتوكول واحد فقط. سيتم
محاولة الوضع الخام على نفس البروتوكول المستخدم لتسجيل الدخول.
يمكن للعميل استخدام خوادم أسماء IPv4 أو IPv6 للاتصال بـ iodined. ستترجم
خوادم الأسماء الوسيطة بين البروتوكولات تلقائيًا إذا لزم الأمر. استخدم
الخيارين -4 أو -6 لإجبار العميل على استخدام إصدار IP محدد لاستعلامات
DNS الخاصة به.
إذا كان خادمك يستمع على IPv6 ويمكن الوصول إليه، أضف سجل AAAA له في إعداد DNS الخاص بك. توسيع المثال أعلاه سيبدو هكذا:
t1 IN NS t1ns.mydomain.com. ; note the dot!
t1ns IN A 10.15.213.99
t1ns IN AAAA 2001:db8::1001:99
من الممكن توجيه كل حركة المرور عبر نفق DNS. للقيام بذلك، أولاً أضف مسار مضيف إلى خادم الأسماء المستخدم بواسطة iodine عبر الواجهة السلكية/اللاسلكية مع البوابة الافتراضية كبوابة. ثم استبدل البوابة الافتراضية بعنوان IP لخادم iodined داخل نفق DNS، وقم بتكوين الخادم للقيام بـ NAT.
ومع ذلك، لاحظ أن حركة البيانات المنقولة عبر النفق غير مشفرة على الإطلاق، ويمكن قراءتها وتغييرها من قبل أطراف خارجية بسهولة نسبيًا. لأقصى أمان، شغّل VPN عبر نفق DNS (=نفق مزدوج)، أو استخدم وصول secure shell (SSH)، ربما مع إعادة توجيه المنافذ. يمكن استخدام الأخير أيضًا لتصفح الويب، عندما تشغّل وكيل ويب (على سبيل المثال Privoxy) على خادمك.
يرد خادم iodined على طلبات NS المرسلة للنطاقات الفرعية لنطاق النفق.
إذا كان نطاق iodined الفرعي هو t1.mydomain.com، أرسل طلب NS لـ
foo123.t1.mydomain.com لترى إذا كان التفويض يعمل.
dig أداة جيدة لهذا:
% dig -t NS foo123.t1.mydomain.com
ns.io.citronna.de.
أيضًا، سيجيب خادم iodined على الطلبات التي تبدأ بـ 'z' لأي من أنواع الطلبات المدعومة، على سبيل المثال:
dig -t TXT z456.t1.mydomain.com
dig -t SRV z456.t1.mydomain.com
dig -t CNAME z456.t1.mydomain.com
يجب أن تبدو الردود كنص مشوّه في كل هذه الحالات.
على Mac OS X 10.6 وما بعده، يدعم iodine أجهزة utun الأصلية المدمجة في
نظام التشغيل - استخدم -d utunX.
عادةً ما يتم الاستكشاف التلقائي لحجم جزء استجابة DNS للحصول على أقصى عرض نطاق.
لفرض قيمة محددة (وتسريع الأمور)، استخدم خيار -m.
عادةً ما تُستخدم أسماء مضيفي DNS حتى طولها الأقصى، 255 حرفًا.
تم العثور على بعض مرحّلات DNS التي تجيب على استعلامات كاملة الطول بشكل
غير موثوق، مما يعطي نتائج متباينة بشكل واسع (وفي الغالب سيئة جدًا) للاستكشاف التلقائي
لحجم الجزء عند المحاولات المتكررة. في هذه الحالات، استخدم مفتاح -M
لتقليل طول اسم مضيف DNS إلى، على سبيل المثال 200 حرف، مما يجعل
مرحّلات DNS هذه أكثر استقرارًا بكثير. هذا مفيد أيضًا في بعض مرحّلات DNS
"المُزيلة للتحسين" التي تحشو الاستجابة بنسختين كاملتين من الاستعلام، تاركة
مساحة صغيرة جدًا لبيانات المصب (وأيضًا غير قادرة على EDNS0). يمكن لمفتاح -M
مقايضة بعض عرض النطاق الصاعد بعرض النطاق الهابط. لاحظ أن
الحد الأدنى لقيمة -M هو حوالي 100، لأن البروتوكول يمكنه تقسيم الحزم (1200
بايت كحد أقصى) إلى 16 جزءًا فقط، مما يتطلب على الأقل 75 بايت بيانات حقيقية لكل
جزء.