Что нового

Article Немного практической анонимности: DoH на OpenWRT.

Человек Тьмы 0
19.04.2020
24
59
Тема анонимности в сети Интернет будет жить вечно. Этому неоспоримому факту благоприятно способствуют ... ( я позже придумаю, что способствует, этому факту , а также продолжу философствовать на тему блаприятности, а сейчас - ближе к телу сути, потому что на предисловие не хочется тратить время и фантазию :)
Сейчас у меня появилось желание поймать хайп от написания статьи, а желания должны исполняться.
Наверное, сейчас невозможно найти пользователя этого (и не только этого) форума, который не слышал о технологии DNS over HTTPS (DoH). Название говорит само за себя: вся суть заключается в пропускании запросов DNS не через традиционный 53 порт по протоколу UDP, а через шифрованный HTTPS. Запросы DNS при этом минуют сервера провайдера, что делает нашу жизнь в Интернете чуточку более приятной приватной.
Технология DoH уже более полугода встроена в популярные браузеры, но как быть с DNS - запросами от других приложений ? Ответ прост: можно установить специальные приложения в операционную систему либо на роутер, а лучше настроить перехват DNS - трафика везде, где только можно, руководствуясь надёжным принципом всех времён и народов - лучше перебздеть, чем недобздеть :)

В этой статье я опишу процесс установки и настрйки программы Dns-Crypt_v.2 на OpenWRT - операционную систему, которой управляются роутеры.
Иногда для неподггтовленного пользователя, впервые столкнувшегося с незнакомой операционной системой, установка и настройка программ связана с преодолением так называемого "порога вхождения", под которым подразумевается ознакомление и привыкание к незнакомой среде. И для того, чтобы статья была предельно понятной любому новичку, считаю необходимым описать план действий.
  1. Сборка и установка операционной системы OpebWRT на роутер в данной статье описываться НЕ будет: предполагается, что на маршрутизаторе пользователя уже хозяйничает Linux.
  2. Установка приложений в операционной системе OpenWRT осуществляется приложением opkg - аналогом Debian-овского apt или yum из RedHat-подобных систем.
  3. Настройка программы Dns-Crypt_v.2 после установки заключается в редактировании четырёх текстовых файлов:
# vi /etc/config/dnscrypt-proxy.toml​
# vi /etc/config/dhcp​
# vi /etc/config/firewall​
# vi /etc/config/network​
4. Последним этапом является проверка корректности настроек.​
5. Запрет использования собственных DNS-настроек на клиентах​


Установка приложения Dns-Crypt_v.2 в операционной системе OpenWRT .

Установка Dns-Crypt_v.2 на OpenWRT осуществляется последовательным выполнением нескольких команд:

Код:
# opkg update
# opkg install ca-bundle
# opkg install wget                            зависимости: libpcre  libopenssl1.1.
# opkg install mc                               зависимости: terminfo.  zlib  libffi  libattr  glib2  libncurses6  librt  libuuid1  libblkid1 libmount1  libmbedtls12  libssh2-1
# opkg install dnsmasq-full              зависимости: kmod-nfnetlink. libnfnetlink0. kmod-nf-conntrack-netlink  libmnl0  libnetfilter-conntrack3  libgmp10  libnettle7. kmod-ipt-ipset.
# opkg install dnscrypt-proxy2        зависимости: ca-bundle
screen.png

Несколько примечаний для новичков:
Описанные выше команды предусматривают обновление и установку не только пакета dnscrypt-proxy2, но и двухпанельного файлового менеджера mc, утилиты для скачивания файлов wget, полного пакета dnsmasq-full вместо кастомизированного dnsmasq. Дополнительный софт нужет только для удобства работы на роутере, его установка не обязательна.
Кроме того, может возникнуть вполне закономерный вопрос: " Зачем упоминать зависимости пакетов ?" Действительно, при установке приложений непосредственно в уже установленную на маршрутизатор систему дополнительные сведения о зависимостях не нужны - программа установки "подтянет" и установит их автоматически. Но, возможно среди читателей найдутся пользователи, которые изъявят желание собрать прошивку из исходников или из образа ImageBuilder. В этом случае знание зависимостей просто необходимо для правильной, корректно работающей прошивки.


Настройка программы Dns-Crypt_v.2 после установки.

Скачиваем конфиг:
# wget -O /etc/config/dnscrypt-proxy.toml [URL]https://raw.githubusercontent.com/blackcofee/guides/master/opt/etc/dnscrypt-proxy.toml[/URL]
Данный файл является файлом конфигурации утилиты dnscrypt-proxy. В нём производятся основные настройки.
Данная версия конфигурационного файла настроена таким образом, чтобы использовать только сервера от CloudFlare - 1.1.1.1 и Google.

Вносим изменения в конфигурационный файл, используя текстовый редактор vi:
# vi /etc/config/dnscrypt-proxy.toml


screen01.png

server_names = ['cloudflare', 'google', 'yandex']
В этом-же файле необходимо раскомментировать строку
Обратить внимание на изменение адреса:
listen_addresses = ['127.0.0.53:53']
и закомментировать строку:
##listen_addresses = ['127.0.0.1:65053']

Пример:
server_names = ['cloudflare', 'google', 'yandex']
listen_addresses = ['127.0.0.53:53']


Если же хотите использовать все имеющиеся сервера, то стоит закомментировать данную строку поставив знак решетки:
#server_names =

В том случае, если на роутере установлен TOR-прокси, то желательно произвести дополнительные изменения в данном файле:
Код:
## Раскомментируйте следующую строку, чтобы направить все TCP-соединения на локальный узел Tor
## Tor не поддерживает UDP, поэтому установите `force_tcp ' в 'true'.
force_tcp = true
proxy = 'socks5://127.0.0.1:9050'

И наконец проверка корректности синтаксиса файла :
# dnscrypt-proxy -config /etc/config/dnscrypt-proxy.toml -check
Желаемый ответ:
Код:
[2020-04-07 21:23:07] [NOTICE] dnscrypt-proxy 2.0.42
[2020-04-07 21:23:07] [NOTICE] Network connectivity detected
[2020-04-07 21:23:07] [NOTICE] Source [public-resolvers] loaded
[2020-04-07 21:23:07] [NOTICE] Source [relays] loaded
[2020-04-07 21:23:07] [NOTICE] Configuration successfully checked
Если ответ не такой, то нужно искать ошибки в файле конфигурации.


Редактирование второго файла /etc/config/dhcp
сводится к следующему:
# vi /etc/config/dhcp

Код:
config dnsmasq
    ...
    # Ignore ISP's DNS:
    option noresolv '1'
    # Change /etc/resolv.conf to direct local router processes to use local dnsmasq:
    option localuse '1'
    # Don't forward RFC 1918 private addresses and RFC 6761 top level domains
    option boguspriv '1'
    # Also don't forward these local zones to the upstream resolver:
    # The local domain (e.g. /lan/) is already automatically added
    list server '/internal/'
    list server '/intranet/'
    list server '/private/'
    list server '/workgroup/'
    list server '/10.in-addr.arpa/'
    list server '/16.172.in-addr.arpa/'
    list server '/168.192.in-addr.arpa/'
    list server '/254.169.in-addr.arpa/'
    list server '/d.f.ip6.arpa/'
    # Upstream dnscrypt-proxy resolver to use for queries:
    list server '127.0.0.53'
screen03.png

После внесения изменений неплохо произвести перезагрузку программы dnsmasq
/etc/init.d/dnsmasq restart
А также просмотреть логи dnsmasq :
logread -l 100 | grep dnsmasq

Проверка:
# logread | grep -n "using nameserver"
Желаемый ответ:
215:Wed Apr 8 00:01:11 2020 daemon.info dnsmasq[869]: using nameserver 127.0.0.53#53
296:Wed Apr 8 00:01:29 2020 daemon.info dnsmasq[1473]: using nameserver 127.0.0.53#53



Третий редактируемый файл - конфигурационный файл фаерволла /etc/config/firewall
# vi /etc/config/firewall:

Здесь попосту нужно дописать следующие разделы, описывающие "взаимоотношения" iptables и dnscrypt-proxy2.
Данные настройки можно также осуществить через WEB-интерфейс роутера, но в данном случае я предпочитаю консоль.

Код:
config redirect
    option name 'Divert-DNS, port 53'
    option src 'lan'
    option proto 'tcp udp'
    option src_dport '53'
    option dest_port '53'
    option target 'DNAT'

config redirect
    option name 'Divert-DNS, port 853'
    option src 'lan'
    option proto 'tcp udp'
    option src_dport '853'
    option dest_port '853'
    option target 'DNAT'

config redirect
    option name 'Divert-DNS, port 5353'
    option src 'lan'
    option proto 'tcp udp'
    option src_dport '5353'
    option dest_port '5353'
    option target 'DNAT'
screen02.png
После внесения изменений желательно произвести перезагрузку фаерволла:
/etc/init.d/firewall reload

И наконец, последний, четвёртый файл конфигурации сети /etc/config/network

# vi /etc/config/network

Здесь :
в раздел config interface 'wan' записать строку, запрещающую обращаться к DNS провайдера:
option peerdns '0'

Пример:
Код:
onfig interface 'wan'
  .....
        option peerdns '0'
   .....
screen04.png

В случае, если роутер получает Интернет от двух и более провайдеров, то такую строчку необходимо дописать в блок каждого WAN, как бы он не назывался в системе, например:

screen05.png



Запрет использования собственных DNS-настроек на клиентах

В некоторых случаях требуется, чтобы клиенты в локальной сети не использовали сторонние DNS-сервисы.
Это может быть полезным для медиаплееров с намертво вшитыми DNS-серверами или хитрые клиенты,
пытающиеся обойти DNS-фильтрацию, настроенную на роутере.
Можно перехватывать DNS-запросы от клиентов и направлять их на роутер.
Открываем файл /etc/firewall.user для редактирования:

# vi /etc/firewall.user

И вставляем содержимое ниже:

Код:
### Redirect DNS
iptables -t nat -I PREROUTING -i br0 -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -I PREROUTING -i br0 -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
screen06.png

Осталось запустить программу и установить её в автозагрузку, после чего перезагрузить роутер:

Код:
# /etc/init.d/dnscrypt-proxy enable
# /etc/init.d/dnscrypt-proxy start

Перезагружаем роутер:

# reboot
Проверяем корректность настроек:

Я осуществляю проверку с особым пристрастием.
Привожу вкратце свои команды, а также правильные и неправильные ответы на них:

# dnscrypt-proxy -resolve google.com
Resolving [google.com]
НЕПРАВИЛЬНЫЙ ОТВЕТ, так как упоминается ДНС провайдера:
Domain exists: yes, 4 name servers found
Canonical name: google.com.
IP addresses: 172.217.21.174, 2a00:1450:400f:80a::200e
TXT records: facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95 v=spf1 include:_spf.google.com ~all docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e docusign=1b0a6754-49b1-4db5-8540-d2c12664b289 globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8=
Resolver IP: 217.66.153.214 (host-214-153-66-217.spbmts.ru.)

ПРАВИЛЬНЫЙ ОТВЕТ, так как НЕ упоминается ДНС провайдера:
Resolving [google.com]
Domain exists: yes, 4 name servers found
Canonical name: google.com.
IP addresses: 172.217.194.113, 172.217.194.100, 172.217.194.101, 172.217.194.139, 172.217.194.138, 172.217.194.102, 2a00:1450:4010:c05::66
TXT records: docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e v=spf1 include:_spf.google.com ~all globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8= docusign=1b0a6754-49b1-4db5-8540-d2c12664b289 facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95
Resolver IP: 163.172.180.125 (sfw.scaleway-fr.dnscrypt.info.)




# ping ya.ru
PING ya.ru (87.250.250.242): 56 data bytes
64 bytes from 87.250.250.242: seq=0 ttl=63 time=78.243 ms
64 bytes from 87.250.250.242: seq=1 ttl=63 time=91.504 ms
64 bytes from 87.250.250.242: seq=2 ttl=63 time=77.682 ms
НЕПРАВИЛЬНЫЙ ОТВЕТ:
ping: bad address 'ya.ru'



@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ПРОВЕРКА ИСПОЛЬЗУЕМЫХ ИНТЕРНЕТ-СОЕДИНЕНИЕМ ДНС-СЕРВЕРОВ
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Проверка логов - РАЗ:


# logread | grep -n "using nameserver"
НЕПРАВИЛЬНЫЙ ОТВЕТ, так как упоминается ДНС провайдера:
215:Tue Apr 7 22:49:16 2020 daemon.info dnsmasq[868]: using nameserver 127.0.0.1#5353
272:Tue Apr 7 22:49:26 2020 daemon.info dnsmasq[868]: using nameserver 127.0.0.1#5353
300:Tue Apr 7 22:49:29 2020 daemon.info dnsmasq[868]: using nameserver 127.0.0.1#5353
302:Tue Apr 7 22:49:29 2020 daemon.info dnsmasq[868]: using nameserver 192.168.8.1#53
303:Tue Apr 7 22:49:29 2020 daemon.info dnsmasq[868]: using nameserver 192.168.3.1#53
316:Tue Apr 7 22:50:39 2020 daemon.info dnsmasq[1473]: using nameserver 127.0.0.1#5353
325:Tue Apr 7 22:50:39 2020 daemon.info dnsmasq[1473]: using nameserver 127.0.0.1#5353
327:Tue Apr 7 22:50:39 2020 daemon.info dnsmasq[1473]: using nameserver 192.168.8.1#53
328:Tue Apr 7 22:50:39 2020 daemon.info dnsmasq[1473]: using nameserver 192.168.3.1#53


ПРАВИЛЬНЫЙ ОТВЕТ, так как НЕ упоминается ДНС провайдера:
В логах не должно быть ничего кроме:
215:Wed Apr 8 00:01:11 2020 daemon.info dnsmasq[869]: using nameserver 127.0.0.53#53
296:Wed Apr 8 00:01:29 2020 daemon.info dnsmasq[1473]: using nameserver 127.0.0.53#53


______________________________________________________________________________________
Проверка логов - ДВА:

2.1 Проверка dnsmasq
# logread -l 100 | grep dnsmasq
НЕПРАВИЛЬНЫЙ ОТВЕТ, так как упоминается ДНС провайдера:
daemon.info dnsmasq[1948]: using nameserver 192.168.8.1#53
daemon.info dnsmasq[1948]: using nameserver 192.168.3.1#53

ПРАВИЛЬНЫЙ ОТВЕТ -
daemon.info dnsmasq[1473]: using nameserver 127.0.0.53#53


2.2 Проверка dnsmasq
# netstat -nap | grep LISTEN | grep dnsmasq

tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 812/dnscrypt-proxy
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 1476/dnsmasq
tcp 0 0 192.168.1.1:53 0.0.0.0:* LISTEN 1476/dnsmasq
tcp 0 0 192.168.3.195:53 0.0.0.0:* LISTEN 1476/dnsmasq
tcp 0 0 ::1:53 :::* LISTEN 1476/dnsmasq
tcp 0 0 fe80::16dd:a9ff:fef4:ef28:53 :::* LISTEN 1476/dnsmasq
tcp 0 0 fdcd:7253:658a::1:53 :::* LISTEN 1476/dnsmasq
tcp 0 0 fe80::16dd:a9ff:fef4:ef28:53 :::* LISTEN 1476/dnsmasq
tcp 0 0 fe80::16dd:a9ff:fef4:ef29:53 :::* LISTEN 1476/dnsmasq
 
Последнее редактирование:
Верх Низ