Безграничный DNS: различия между версиями

Материал из ALT Linux Wiki
Строка 27: Строка 27:


==Кэширующий ДНС==
==Кэширующий ДНС==
===DNSmasq===
===DNSmasq===
В <code>/etc/dnsmasq.conf</code> раскомментировать строчку:
В <code>/etc/dnsmasq.conf</code> раскомментировать строчку:
Строка 47: Строка 46:
server=127.0.2.1
server=127.0.2.1
</source>
</source>
===UnBound===
<code>/etc/unbound/unbound.conf</code> (где искать настройки):
<source lang="bash">include-toplevel: "/etc/unbound/*.conf"</source>
<code>/etc/unbound/unbound.conf.d/server.conf</code> (основные настройки):
<source lang="bash">
server:
    do-not-query-localhost: no
    interface: 127.0.0.1
    interface: 10.0.1.187
    access-control: 10.0.1.0/24 allow
    domain-insecure: "onion"
    private-domain: "onion"
    local-zone: "onion." nodefault
</source>
<code>/etc/unbound/unbound.conf.d/forwards.conf</code> (куда стучаться по зонам):
<source lang="bash">
forward-zone:
    name: "onion"
    forward-addr: 127.0.0.1@853


===UnBound===
forward-zone:
    name: "."
    forward-tls-upstream: yes
    forward-addr: 127.0.2.1
</source>


==Переадресация запросов к .onion-сайтам==
==Переадресация запросов к .onion-сайтам==

Версия от 05:53, 9 сентября 2021

Преамбула

Ввиду государственных/корпоративных поползновений на остатки свободы ходить взрослым людям по просторам интернетов куда заблагорассудится, встаёт вопрос, каким образом от оных препон хоть «на минималках» отгородиться.

Что ж, попробуем.

Амбула

Понадобятся пакеты:

  • tor — для преобразования в IP-адреса имён сайтов из зоны .onion и пропуска к ним;
  • dnscrypt-proxy — для преобразования всех остальных имён, не взирая на препоны, чинимые хоть вышестоящим провайдером, хоть надзорными органами;
  • dnsmasq (на уровне организации/квартиры) или unbound (в масштабе провайдера) — для кэширования запросов к обоим вышеозначенным «шифрующимся» (эрго, довольно неспешным) резолверам.

The Onion Router («луковый» маршрутизатор)

Настроим так, чтобы он и в ДНС умел, и к ресурсам пропускал. Добавим в его конфиг /etc/tor/torrc:

VirtualAddrNetwork    172.16.0.0/12   # «Серая» сеть, не используемая на предприятии…
AutomapHostsOnResolve 1               # …адрес из которой прикреплять к IPv6-адресу каждого онион-сайта.
DNSPort               853             # Порт на петлевом интерфейсе для резолвинга .onion-имён.
TransPort             9040            # А этот — для перенаправления в тор-сеть запросов к таким сайтам.
SocksPort             10.0.1.187:9040 # Собственный адрес:порт машины в обслуживаемой локалке (если надо проксировать запросы к недоступным напрямую ресурсам).

Адреса и порты выбирайте уместные для своих реалий.

«Шифрующийся» ДНС-прокси

Всего-то добавить в начало конфига /etc/dnscrypt-proxy/dnscrypt-proxy.toml строчку:

server_names = ['cisco', 'cisco-ipv6']

Кэширующий ДНС

DNSmasq

В /etc/dnsmasq.conf раскомментировать строчку:

conf-dir=/etc/dnsmasq.d/,*.conf

И создать парочку файлов.

/etc/dnsmasq.d/main.conf:

bind-interfaces
expand-hosts
localise-queries
log-queries
# имя интерфейса локалки ставьте своё!
interface=lan

/etc/dnsmasq.d/dns.conf (onion-имена запрашивать у тора, все остальные — у днскриптопрокси):

server=/onion/127.0.0.1#853
server=127.0.2.1

UnBound

/etc/unbound/unbound.conf (где искать настройки):

include-toplevel: "/etc/unbound/*.conf"

/etc/unbound/unbound.conf.d/server.conf (основные настройки):

server:
    do-not-query-localhost: no
    interface: 127.0.0.1
    interface: 10.0.1.187
    access-control: 10.0.1.0/24 allow
    domain-insecure: "onion"
    private-domain: "onion"
    local-zone: "onion." nodefault

/etc/unbound/unbound.conf.d/forwards.conf (куда стучаться по зонам):

forward-zone:
    name: "onion"
    forward-addr: 127.0.0.1@853

forward-zone:
    name: "."
    forward-tls-upstream: yes
    forward-addr: 127.0.2.1

Переадресация запросов к .onion-сайтам

Ну, онион-имена через торовский ДНС-порт теперь резолвятся. Но чтобы до них достучаться, эти стуки следует тоже пропустить через тор. Например, посредством нф-таблиц (примеры к ип-таблицам можете нагуглить самостоятельно — их тьма.).

Запросы машин из локалки к адресам из VirtualAddrNetwork следует перекидывать на транспортный тор-порт, добавив в файл настроек /etc/nftables.conf (в моём случае):

table ip nat {
    chain prerouting {
        type nat hook prerouting priority filter
        iif "lan" ip daddr 172.16.0.0/12 tcp flags & (syn | ack) == syn redirect to 9040
    }
}

А чтоб клиентам можно было ходить не только на .onion-сайты, но и прочие блокируемые ресурсы (ну, и по ссх к нашему серверу подключаться), добавим ещё и это:

table inet filter {
    chain input {
        type filter hook input priority filter
        ct state new tcp dport {ssh,9040} tcp flags & (syn|ack) == syn accept
    }
}

Для пропуска же этих запросов наружу не обойтись без включения маршрутизации — в файл /etc/sysctl.d/router.conf добавить строчку net.ipv4.ip_forward = 1, и примененить без перезагрузки командой:

# sysctl -w net.ipv4.ip_forward=1

Запуск

# systemctl enable --now tor dnscrypt-proxy dnsmasq nftables

Проверка работоспособности

Постамбула

Осталось раздать клиентским дивайсам статический маршрут в сеть VirtualAddrNetwork через нашу тор-машинку.

Вариант статики реализуйте хоть доменными политиками, хоть прибитием через DHCP — как вам угодно.

Кстати, к блокируемым ресурсам не обязательно на каждой машинке через браузерный прокси-плагин ломиться. Есть вариант с ява-скриптовым автопрокси на всю контору, но это тема для другой статьи.