OS:Ubuntu 12.04 64位
صفر、مقدمة
DNS pollution:
تلوّث كاش سيرفرات أسماء النطاقات (DNS cache pollution) — وبتهنّى كمان باسم DNS cache poisoning — يعني إنو بعض باكِتات DNS بتتعمل عمدًا أو بتطلع بالغلط، وبعدين بتخلي الدومين يروح على IP غلط. عادةً على الإنترنت في DNS سيرفرات موثوقة، بس لتخفيف ضغط الترافيك، أغلب سيرفرات الـ DNS بتخزّن مؤقتًا سجلات الـ resolution اللي بتوصلها من الـ upstream. وبعدها لما جهاز تاني يطلب حلّ اسم الدومين مرة ثانية، بيعطيه الرد بسرعة.
بس إذا كاش الـ DNS تبع سيرفر محلي داخل الشبكة تلوّث، وقتها ممكن يوجّه أجهزة الكمبيوتر داخل الشبكة لِسيرفر غلط أو لموقع/URL غلط. 1
OpenDNS:
OpenDNS بتقدم حلول DNS للأفراد وللشركات. إنت ممكن تختار تستخدم خدمة OpenDNS أو تستخدم DNS اللي الـ ISP تبعك بيوفره. وضع مجموعة السيرفرات بمناطق استراتيجية واستخدام كاش كبير لأسماء الدومين بيساعد إن عملية DNS query تخلص أسرع بكثير، وبالتالي سرعة فتح الصفحات بتزيد.
أحيانًا نتائج DNS query بتتخزّن كمان بالكاش على نظام التشغيل أو داخل التطبيقات عندك، فزيادة السرعة ممكن ما تبان بكل مرة. بس إذا النتيجة ما كانت موجودة بالكاش المحلي، وقتها زيادة سرعة الاستعلام بتكون واضحة جدًا. ومن الخصائص كمان فلتر anti-phishing وتصحيح الإدخال (type correction). مثال: إذا كتبت wikipedia.og بتتبدّل تلقائيًا لـ wikipedia.org.
من خلال جمع قائمة مواقع خبيثة، لما المستخدم يفتح هالمواقع عبر خدماتهم، OpenDNS بتقوم بحظرها. OpenDNS كمان فعّلت مؤخرًا خدمة مضادة للـ phishing (PhishTank) عشان المستخدمين حول العالم يقدروا يبلّغوا ويشوفوا مواقع phishing غير موثوقة.
بس OpenDNS مش “open-source” زي ما الاسم يوحي—يعني مش برنامج مفتوح المصدر. 2
ليش DNSCrypt بقادر يمنع DNS pollution
خلّينا نحكيها ببساطة
DNS التقليدي بيرسل plaintext يعني نص واضح. تخيّلها مثل “كرت بريد” (postcard). على الكرت في خانة محددة بتكتب فيها مين إنت، لِمين رح تِرسِل، وبتسأل عن شو. هيك الشخص اللي عم يوصّل الكرت بقدر يشوف شو مكتوب. وإذا ما كان مبسوط، ممكن ياخد كرتك ويعمل نسخة فيها تزوير بالمحتوى ويرجع يبعثها إلك لتتخدع (أو ببساطة بحجرها وما توصل للوجهة حسب ما بدّه).
نفس الفكرة تنطبق على جواب سيرفر DNS اللي بيوصله إلك.
أمّا DNSCrypt فبيعمل تشفير لمعلومات DNS. اللي بيطلع “مكتوب على الكرت” بيكون بلغة بتفهمها إنت وسيرفر DNS، بس ما حدا غيرهم—مثل موظف البريد—ما بفهمها. الموظف رح يحسبها رسالة عادية وبيعطيها للمقصِد بدون تغيير.
طبعًا ممكن يوم من الأيام، الموظفين يفكّروا: “هالشي تبع DNS السيرفر مش طبيعي”، وساعتها نظريًا ممكن يعبثوا بمحتوى الرسائل أو يرموا رسائل السيرفر كله. بس لحد هلّق ما عملوا هالشي…
وكمان اللي حكي عن استخدام TCP: هاد مش هو الأساس. لأن DNSCrypt ممكن يشتغل على UDP كمان. خيار TCP بيضيف ميزة إضافية فقط، لأن في شبكات فيها نسبة فقدان باكِتات عالية، UDP ممكن يصير مزعج جدًا. 3
Dnsmasq
Dnsmasq هو open-source خفيف الوزن (lightweight) لعمل DNS forward وبتشتغل كمان كـ DHCP/TFTP server. مكتوب بلغة C. Dnsmasq متصمّم خصوصًا للشبكات المنزلية أو الـ LAN الصغيرة: استهلاك موارد قليل وسهل الإعداد. الأنظمة المدعومة بتشمل Debian وFedora وSmoothwall وIP-Cop وfloppyfw وFirebox وLEAF وFreesco وfli4l وCoyoteLinux وAndroid. وكمان معمول فيه استخدام على أنظمة الراوتر مثل dd-wrt وOpenWrt. 4
Ubuntu
Ubuntu (النطق بالـ IPA: نطق الإنجليزية /ʊˈbʊntuː/ وبالطريقة التقريبية uu-buun-too) هي نظام تشغيل GNU/Linux بيتركز أساسًا على التطبيقات المكتبية (desktop). اسمها جا من كلمة “ubuntu” باللغة الزولو أو الكوسا في جنوب أفريقيا (ترجمة “ubantu”) ومعناها “إنسانية” و”وجودي لأن الجميع موجود”. وهي قيمه من التراث الأفريقي.
Ubuntu اتأسست على يد Mark Shuttleworth. أول نسخة—4.10—صدرت بتاريخ 20 أكتوبر 2004 وكانت مبنية على Debian. وبعكس Debian اللي عنده سياسة تحديثات ثابتة أكثر، Ubuntu بتصدر نسخة جديدة كل ست شهور عشان الناس تضل قادرة تاخذ وتستخدم البرمجيات الجديدة باستمرار. هدف تطوير Ubuntu يخلي الكمبيوتر الشخصي أسهل للاستخدام، وكمان يوفّر نسخة سيرفر لاستخدام الشركات.
كل نسخة جديدة من Ubuntu عادةً بتكون فيها أحدث بيئة سطح مكتب GNOME متاحة وقتها، وغالبًا بتيجي خلال شهر بعد إصدار GNOME لنسخة جديدة. وبالمقارنة مع توزيعات ثانية مبنية على Debian مثل MEPIS وXandros وLinspire وProgeny وLibranet، Ubuntu بتكون أقرب لفكرة تطوير Debian: استخدام برمجيات حرة ومفتوحة المصدر أساسًا، بينما التوزيعات الثانية غالبًا بتجي معها كمية كبيرة من برمجيات مغلقة المصدر.
Ubuntu مبنية على فرع Debian غير المستقر: سواء كان شكل الحزم (deb) أو نظام إدارة البرمجيات والتثبيت (Debian Apt). مطورين Ubuntu بيرجعوا يطلعوا للـ Debian community نتائج التعديلات فورًا وبشكل لحظي، مش لازم يضلوا لحد ما يعلنوا عند إصدار نسخة جديدة. وكمان فعليًا، كثير من مطوري Ubuntu كمان بيكونوا مهدّمين (maintainers) لأهم برمجيات Debian. مع هيك، Debian وUbuntu مش شرط يكونوا متوافقين 100%؛ يعني ممكن تثبيت حزم Debian على Ubuntu يسبب مشاكل توافق، والعكس كمان صحيح.
تشغيل Ubuntu بيعتمد بشكل أساسي على دعم شركة Canonical، ومعه مساعدة من ناس متطوعين من مجتمع Linux. كثير من مطوري Ubuntu بيسمّوا Mark Shuttleworth بـ SABDFL (اختصار self-appointed benevolent dictator for life يعني “ديكتاتور خيّير مدى الحياة وبقرار ذاتي”). في 8 يوليو 2005، Mark Shuttleworth وCanonical أعلنوا تأسيس Ubuntu Foundation ورصدوا 10 ملايين دولار كرأس مال تمهيدي لتشغيل المؤسسة. الهدف من تأسيس المؤسسة كان ضمان استمرار تطوير Ubuntu والحصول على الدعم مستقبلًا، بس لحد 2006 المؤسسة ما كانت فعّلت تشغيل حقيقي. Mark Shuttleworth وصف إنو هالمؤسسة كانت تمويل تشغيلي طارئ لما Canonical صار معها أزمة مالية.
سابقًا، المستخدمين كانوا ممكن ياخدوا أسطوانات تثبيت مجانية عبر خدمة shipit. Ubuntu 6.06 كانت بتوفر shipit مجاني، بس النسخة اللاحقة Ubuntu 6.10 ما عادت توفر أسطوانات التوصيل المجاني. المستخدمين صاروا فقط يقدروا ينزلوا صور الأقراص من الموقع ويسجلوها للتثبيت. وبوقت إطلاق Ubuntu 6.06 صار فيه كلام إنو مستقبلاً ما رح يكون في shipit للإصدارات غير طويلة الدعم (non-LTS)، لكن لما نزلت Ubuntu 7.04 رجعت الخدمة مرة تانية، مع إنها مش نسخة LTS. وقبل إطلاق Ubuntu 11.04 تم إيقاف shipit.
حاليًا Ubuntu فيها خمس إصدارات طويلة الدعم (Long Term Support, LTS): Ubuntu 6.06 و8.04 و10.04 و12.04 و14.04. Ubuntu 12.04 و14.04 (للـ desktop ولـ server) في دورة دعم 5 سنوات. والإصدارات طويلة الدعم قبلها كانت للديسكتوب 3 سنوات وللسيرفر 5 سنوات. 5
قائمة إصدارات Ubuntu: 6
قائمة إصدارات Ubuntu
| رقم النسخة | الاسم الكودي | المعنى الصيني |
| Ubuntu 4.10 | Warty Warthog | 多疣的疣猪 |
| Ubuntu 5.04 | Hoary Hedgehog | 白发的刺猬 |
| Ubuntu 5.10 | Breezy Badger | 活泼的獾 |
| Ubuntu 6.06 | LTS Dapper Drake | 整洁的公鸭 |
| Ubuntu 6.10 | Edgy Eft | 尖利的小蜥蜴 |
| Ubuntu 7.04 | Feisty Fawn | 烦躁不安的小鹿 |
| Ubuntu 7.10 | Gutsy Gibbon | 胆大的长臂猿 |
| Ubuntu 8.04 | LTS Hardy Heron | 坚强的苍鹭 |
| Ubuntu 8.10 | Intrepid Ibex | 勇敢的野山羊 |
| Ubuntu 9.04 | Jaunty Jackalope | 得意洋洋的怀俄明野兔 |
| Ubuntu 9.10 | Karmic Koala | 幸运的考拉 |
| Ubuntu 10.04 | LTS Lucid Lynx | 清醒的猞猁 |
| Ubuntu 10.10 | Maverick Meerkat | 标新立异的的狐獴 |
| Ubuntu 11.04 | Natty Narwhal | 敏捷的独角鲸 |
| Ubuntu 11.10 | Oneiric Ocelot | 有梦的虎猫 |
| Ubuntu 12.04 | LTS Precise Pangolin | 精准的穿山甲 |
| Ubuntu 12.10 | Quantal Quetzal | 量子的格查尔鸟 |
| Ubuntu 13.04 | Raring Ringtail | 铆足了劲的环尾猫熊 |
| Ubuntu 13.10 | Saucy Salamander | 活泼的蝾螈 |
| Ubuntu 14.04 | LTS Trusty Tahr | 可靠的塔尔羊 |
| Ubuntu 14.10 | Utopic Unicorn | 乌托邦的独角兽 |
أولاً、تجهيز PPA
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:shnatsel/dnscrypt
ثانيًا、تثبيت DNSCrypt Proxy
التثبيت:
sudo apt-get update
sudo apt-get install dnscrypt-proxy
الإعداد:
بما إن DNSCrypt افتراضيًا بيشتغل على بورت 53 و رح يصير تعارض بورت مع DNSMasq، لازم نبدّل البورت على شيء تاني مثلًا خليه 40
غيّر /etc/default/dnscrypt-proxy 7: ابحث عن السطر هذا وبدّل البورت إلى 40. طبعًا فيك تغيّره على بورت ثاني، بس لازم ما يتعارض مع باقي بورتات النظام:
# What local IP the daemon will listen to, with an optional port. The default port is 53.
local
-address=127.0.0.2:40
الاختبار:
$ sudo service dnscrypt-proxy restart
dnscrypt-proxy stop/waiting
dnscrypt-proxy start/running, process 1561
$ dig g.cn @127.0
.0.2 -p 40
; > DiG 9.8
.1-P1 <<>> g.cn @127.0.0.2 -p 40;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30656
;; flags: qr rd ra; QUERY: 1
, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0
, flags:; udp: 4096;; QUESTION SECTION:
;g.cn. IN A
;; ANSWER SECTION:
g.cn. 227
IN A 203.208.48.148g.cn. 227
IN A 203.208.48.144g.cn. 227
IN A 203.208.48.145g.cn. 227
IN A 203.208.48.146g.cn. 227
IN A 203.208.48.147
;; Query time: 113
msec;; SERVER: 127.0
.0.2#40(127.0.0.2);; WHEN: Sun Aug 23
22:28:37 2015;; MSG SIZE rcvd: 113
شرح:
DNSCrypt عنده 3 أنماط تشغيل:
نمط سطر الأوامر: مباشرةً على سطر الأوامر بتم تمرير parameters لتحديد أمر التشغيل 8
الأوامر المدعومة:
$ dnscrypt-proxy --help
dnscrypt-proxy 1.4
.0
Options:
-a
--local-address=... # 监听的地址,例如: 127.0.0.1:53 -d
--Daemonize模式 # 守护进程模式 -e
--edns-payload-size=... # 后面略,详情见官方文档[^2] -h --help
-L --resolvers-list=...
-R --resolver-name=...
-l
--logfile=... -m --loglevel=...
-n --max-active-requests=...
-p --pidfile=...
-X --plugin=...
-N --provider-name=...
-k --provider-key=...
-r --resolver-address=...
-u --user=...
-t --test=...
-T --tcp-only
-V --version
Please consult the dnscrypt-proxy(8
) man page for details.
Daemonize mode: تشغيل كـ عملية بالخلفية
إعمل تشغيل مباشرةً عبر sudo dnscrypt-proxy -d، بدون ما تحتاج تضبط أي parameters على سطر الأوامر. كل القيم بتتقرأ من ملف الإعدادات /etc/default/dnscrypt-proxy
نمط خدمة النظام:هو النمط الافتراضي
بعد ما يخلص التثبيت، أو عند إقلاع النظام، بينطلق تلقائيًا. مثل نمط Daemonize، معاملات التشغيل بتتقرأ من ملف الإعدادات /etc/default/dnscrypt-proxy
- إيقاف:
sudo service dnscrypt stop - تشغيل:
sudo service dnscrypt start - إعادة تشغيل:
sudo service dnscrypt restart
ثانيًا、تثبيت DNSMasq
التثبيت:
sudo apt-get update
sudo apt-get -y install dnsmasq
الإعداد:
عدّل ملف الإعداد /etc/dnsmasq.conf。 محتوى الملف ممكن تتغيره حسب الحاجة. هون ما رح نفصّل وظيفة كل خيار وملاحظات الانتباه—شف التفاصيل عبر google 9. اللي يهمنا هون فقط تعديل سطر واحد: خلّ السيرفر upstream تبع DNSMasq يكون هو DNSCrypt-Proxy اللي انت عم تعمل له إعداد من قبل.
ابحث عنه وبدّله هيك:
# You can control how dnsmasq talks to a server: this forces
# queries to 10.1.2.3 to be routed via eth1
# server=10.1.2.3@eth1
server=127.0
.0.2#40
الاختبار
انتبه: البورت هون هو -p 53، وهو مختلف عن بورت dnscrpyt-proxy المذكور قبل على -p 40
$ sudo service dnsmasq restart
Stopped Name Service Cache Daemon: nscd.
* Starting Name Service Cache Daemon nscd [ OK ]
* Restarting DNS forwarder and DHCP server dnsmasq [ OK ]
Stopped Name Service Cache Daemon: nscd.
* Starting Name Service Cache Daemon nscd [ OK ]
$ dig g.cn @127.0
.0.1 -p 53
; > DiG 9.8
.1-P1 <<>> g.cn @127.0.0.1 -p 53;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52188
;; flags: qr rd ra; QUERY: 1
, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0
, flags:; udp: 4096;; QUESTION SECTION:
;g.cn. IN A
;; ANSWER SECTION:
g.cn. 295
IN A 203.208.48.144g.cn. 295
IN A 203.208.48.146g.cn. 295
IN A 203.208.48.148g.cn. 295
IN A 203.208.48.145g.cn. 295
IN A 203.208.48.147
;; Query time: 113
msec;; SERVER: 127.0
.0.1#53(127.0.0.1);; WHEN: Sun Aug 23
22:41:00 2015;; MSG SIZE rcvd: 113
شرح:
dnsmasq ممكن يستخدم upstream آخر كمان، مثل المشهور 8.8.8.8 و 114.114.114.114。 وبشكل افتراضي dnsmasq بيستمع للبورت من جهة الخارج، فمش لازم تعمل إعدادات خاصة لعنوان الـ IP المستمع عليه. فيك تختبر مباشرةً عبر الدخول على الـ external IP، مثل:
nslookup g.cn 192.168
.31.139
ثالثًا、اختبار فعالية OpenDNS
افتح OpenDNS的测试页面، إذا شفت علامة صح (tick) يعني الإعداد صار تمام. إذا في مشكلة اترك تعليق :)
1.
تلوث كاش DNS، ويكيبيديا:https://zh.wikipedia.org/wiki/域名服务器缓存污染↩ 2.
OpenDNS، ويكيبيديا:https://zh.wikipedia.org/wiki/OpenDNS↩ 3.
كيف يعمل DNSCrypt؟ ولماذا يمنع DNS pollution؟,知乎:http://www.zhihu.com/question/24253866/answer/29272628↩ 4.
Dnsmasq، ويكيبيديا:https://zh.wikipedia.org/wiki/Dnsmasq↩ 5.
Ubuntu، ويكيبيديا:https://zh.wikipedia.org/wiki/Ubuntu↩ 6.
قائمة إصدارات Ubuntu، ويكيبيديا:https://zh.wikipedia.org/wiki/Ubuntu发行版列表↩ 7.
هاد الملف بيتولد تلقائيًا وقت تثبيت DNSCrypt ↩ 8.
هاد هو أسلوب التشغيل القياسي الموجود بالوثائق، راجع الدليل الرسمي:https://github.com/jedisct1/dnscrypt-proxy#usage↩ 9.
إعداد DNSMasq:https://www.google.com/search?q=dnsmasq.conf%20%E7%9A%84#newwindow=1&safe=active&q=dnsmasq.conf+%E9%85%8D%E7%BD%AE↩