OS:Ubuntu 12.04 64位

0、Введение

DNS pollution:

Загрязнение кэша на DNS-сервере (DNS cache pollution), также известное как отравление кэша DNS (DNS cache poisoning), — это ситуация, когда некоторые DNS-пакеты создаются намеренно либо возникают случайно, но при этом доменное имя начинает указывать на неверный IP-адрес. Обычно в интернете есть доверенные DNS-серверы, однако чтобы уменьшить нагрузку на сеть, DNS-серверы часто временно кэшируют записи, полученные от вышестоящих DNS-серверов (upstream). Тогда при следующем запросе от другой машины к доменному имени можно быстро отдать результат.

Если локальный DNS-сервер оказался с поврежденным (подмененным) кэшем, он начнет направлять компьютеры в локальной сети на неверные серверы или на неверные страницы/URL. 1

OpenDNS:

OpenDNS предлагает решения DNS как для частных пользователей, так и для бизнеса. Вы можете использовать сервис OpenDNS либо DNS, предоставляемый вашим ISP. Размещение серверной инфраструктуры в стратегически важных местах и использование большого количества кэшированных доменных записей позволяет заметно ускорить выполнение DNS-запросов, а значит — ускорить загрузку страниц.

Результаты DNS-запросов иногда кэшируются на локальной операционной системе или в приложениях, поэтому увеличение скорости может не проявляться при каждом запросе. Однако если нужного ответа нет в локальном кэше, прирост скорости будет очевиден. Среди дополнительных функций — фильтр от фишинга и исправление ввода (type correction). Например, если вы введете wikipedia.og, система автоматически заменит на wikipedia.org.

Собирая списки вредоносных сайтов, OpenDNS блокирует доступ к ним: когда пользователь обращается к этим вредоносным ресурсам через их сервис, OpenDNS препятствует открытию. Недавно OpenDNS запустила антифишинговый сервис (PhishTank), чтобы пользователи по всему миру могли сообщать о подозрительных фишинговых сайтах и просматривать их.

При этом OpenDNS — не open-source продукт, как можно подумать по названию. 2

Почему DNSCrypt помогает предотвратить DNS pollution

Скажем просто и понятно

Обычный DNS передает данные открытым текстом (plaintext). Это похоже на открытку: на открытке есть поля, где вы пишете, кто вы, кому отправляете и какую информацию запрашиваете. Тогда человек, который пересылает открытку, может увидеть, что именно вы написали. Если ему что-то не понравится, он может взять вашу открытку, подделать содержимое и отправить вам «измененный» вариант, чтобы вас обмануть (или вообще перехватить и не отправить — в зависимости от его намерений).

Точно так же устроен ответ, который DNS-сервер отправляет вам.

DNSCrypt шифрует DNS-информацию. То, что оказывается «на открытке», будет на понятном вам и DNS-серверу языке, но на таком, который не сможет прочитать почтальон и другие посторонние. Почтальон решит, что это обычное письмо, и доставит его по назначению без изменений.

Конечно, возможно однажды «почтальоны» решат: «похоже, что-то в DNS-сервере не совсем здоровое», — и тогда они теоретически могут подменить содержимое для всех писем этого сервера или просто выбросить их. Но пока они этого не делают…

То, что некоторые упоминают использование TCP, не является корневым решением: DNSCrypt может работать и через UDP. Опция TCP скорее добавляет дополнительный функционал, а в сетях с высокой потерей пакетов UDP может вести себя хуже. 3

Dnsmasq

Dnsmasq — это open-source легковесный DNS-forwarder, а также сервер DHCP/TFTP. Он написан на C. Dnsmasq ориентирован на небольшие локальные сети, например домашние LAN: использует немного ресурсов и легко настраивается. Поддерживаемые платформы включают Debian, Fedora, Smoothwall, IP-Cop, floppyfw, Firebox, LEAF, Freesco, fli4l, CoyoteLinux и Android. Кроме того, Dnsmasq используется в прошивках dd-wrt и OpenWrt. 4

Ubuntu

Ubuntu (международное фонетическое обозначение: английское произношение: /ʊˈbʊntuː/, uu-buun-too) — это GNU/Linux операционная система, ориентированная прежде всего на рабочий стол. Название происходит от слова «ubuntu» в языках зулусов или коса (Южная Африка) (перевод: «убунту»). Смысл слова — «человечность», а также «мое существование возможно потому, что существует всеобщее». Это отражает ценности африканской традиции.

Ubuntu была создана Марком Шаттлвортом. Первый релиз — 4.10 — вышел 20 октября 2004 года, и в качестве основы использовался Debian. В отличие от Debian, который придерживается более устойчивой стратегии обновлений, Ubuntu выходит с новой версией каждые шесть месяцев — чтобы пользователи могли регулярно получать и использовать новые программы.

Цель разработки Ubuntu — сделать персональные компьютеры проще и удобнее в использовании, а также предоставить серверные версии для корпоративных задач. Каждая новая версия Ubuntu обычно включает актуальную на тот момент среду рабочего стола GNOME; как правило, после релиза новой версии GNOME Ubuntu выходит в течение месяца.

По сравнению с другими дистрибутивами на базе Debian — например MEPIS, Xandros, Linspire, Progeny и Libranet — Ubuntu ближе к идеям разработки Debian: в основном используется свободное и open-source ПО, в то время как другие релизы часто поставляются вместе с большим количеством закрытых (proprietary) компонентов.

Ubuntu построена на базе нестабильной ветки Debian: как по формату пакетов (deb), так и по системе управления и установки программ (Debian Apt). Разработчики Ubuntu передают изменения в ПО в Debian сообществу в режиме реального времени, а не только объявляют их при выходе новой версии. Более того, многие разработчики Ubuntu одновременно являются мейнтейнерами ключевых пакетов Debian. При этом Debian и Ubuntu не всегда полностью совместимы: установка Debian-пакетов в Ubuntu может вызвать проблемы совместимости — и наоборот.

Работу Ubuntu в основном обеспечивает поддержка компании Canonical, а также помощь энтузиастов из Linux-сообщества. Разработчики часто называют Марка Шаттлворта SABDFL — аббревиатурой от self-appointed benevolent dictator for life (самоназначенный доброжелательный диктатор на всю жизнь). 8 июля 2005 года Марк Шаттлворт и Canonical объявили о создании Ubuntu Foundation и выделили 10 миллионов долларов США стартового капитала. Цель фонда — обеспечить непрерывную разработку Ubuntu и поддержку в будущем, однако до 2006 года фонд так и не начал работать в полном объеме. Шаттлворт охарактеризовал этот фонд как «экстренное операционное финансирование», когда у Canonical возник финансовый кризис.

В прошлых версиях пользователи могли получать бесплатные установочные диски через сервис shipit. В Ubuntu 6.06 такой сервис был, но в последующей Ubuntu 6.10 бесплатной доставки установочных дисков через shipit уже не было: пользователям оставалось скачивать образы дисков с сайта и записывать их, чтобы установить систему. На момент релиза Ubuntu 6.06 ходили сообщения, что в дальнейшем shipit не будет предоставляться для не-LTS выпусков, но при выходе Ubuntu 7.04 сервис снова включили — при этом эта версия также не была LTS. Перед релизом Ubuntu 11.04 сервис shipit был остановлен.

На текущий момент существует пять LTS-версий (Long Term Support): Ubuntu 6.06, 8.04, 10.04, 12.04 и 14.04. Ubuntu 12.04 и 14.04 (desktop и server) поддерживаются 5 лет. До этого длительный срок поддержки для desktop составлял 3 года, для server — 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 乌托邦的独角兽

1、Настройка PPA

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:shnatsel/dnscrypt

2、Установка 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 есть три режима работы:

Командная строка: запуск через параметры прямо в командной строке 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-режим: работа в фоне.

Запуск выполняется напрямую через sudo dnscrypt-proxy -d. Никаких параметров командной строки настраивать не нужно — все параметры читаются из конфигурационного файла /etc/default/dnscrypt-proxy.

Режим системного сервиса:режим по умолчанию

После завершения установки либо при старте системы он запускается автоматически. Как и в Daemonize-режиме, стартовые параметры берутся из конфигурационного файла /etc/default/dnscrypt-proxy.

  • Остановка:sudo service dnscrypt stop
  • Запуск:sudo service dnscrypt start
  • Перезапуск:sudo service dnscrypt restart

2、Установка 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, он отличается от порта -p 40 для dnscrpyt-proxy, о котором шла речь выше.

$ 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, на который нужно слушать, не требуется. Для проверки можно сразу обращаться к внешнему IP, например:

nslookup g.cn 192.168
.31.139

3、Проверка эффективности OpenDNS

Откройте OpenDNS的测试页面 и посмотрите, есть ли галочка: если да, значит настройка прошла успешно. Если есть проблемы — оставьте комментарий :)


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.

Это стандартный способ запуска из документации; см. official document: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↩