LINUX.ORG.RU

DNSCrypt + VPN + iptables: отваливается DNS-resolving

 , , ,


1

3

Сразу оговорюсь, что крайне слабо понимаю работу DNSCrypt и iptables. Поэтому, если можно, не кидайтесь слишком больно :)

Ситуация 1:
Запущен dnscrypt-proxy.

The default DNS resolver for dnscrypt-proxy.service is dnscrypt.eu-nl

Существует подключение к VPN через NetworkManager.
Всё работает.

Ситуация 2:
Добавляем следующие правила для iptables (украденные из Интернета):

*filter
:INPUT DROP [145:11482]
:FORWARD DROP [0:0]
:OUTPUT DROP [18518:3426455]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -d XXX.XXX.XXX.XXX/32 -p tcp -j ACCEPT
-A OUTPUT -d XXX.XXX.XXX.XXX/32 -p udp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o tun0 -j ACCEPT
-A OUTPUT -o tun1 -j ACCEPT
COMMIT
где XXX.XXX.XXX.XXX - адрес VPN-сервера.
DNS-resolving отваливается. Если временно пропишем в /etc/resolv.conf, например, адрес 8.8.8.8 вместо 127.0.0.1, то всё начинает работать (пока не перезапишется).

Вопрос: Почему с DNSCrypt не работает? Как это починить? Что делать?

Заранее спасибо и прошу прощения за возможную собственную глупость!

Кажется, проблема сложная.
soko1: простите великодушно, что беспокою Вас. Но Вы, кажется, разбираетесь в iptables (правила я взял с Вашего сайта) и вообще в способах обеспечивать собственную безопасность. Поэтому, может быть, у Вас будут идеи, как подружить данные правила iptables с DNSCrypt? Кстати, простите за то, что вмешиваюсь, но мне кажется, что статья по последнему не помешала бы Вашему сайту :)

DNSCrypt encrypts and authenticates DNS traffic between user and DNS resolver. While IP traffic itself is unchanged, it prevents local spoofing of DNS queries, ensuring DNS responses are sent by the server of choice.

fludardes ★★
() автор топика

И так, я связался с разработчиком DNSCrypt по этому вопросу. Если кому-то интересно, вот его ответ:

Hi Emmanuel,

I guess the issue is that even packets for 127.0.0.1 are routed through the VPN, so they don’t hit the dnscrypt proxy.

That said, if you are using a VPN, do not use DNSCrypt.

Would you rather share your internet activity with one person/organization/company (the VPN provider) or two of them? The VPN provider already knows pretty much everything about your traffic, so if they operate DNS resolvers, you’d better use them. In addition, it will make things way faster.

fludardes ★★
() автор топика
Ответ на: комментарий от deadNightTiger

Can't use -i with OUTPUT

Такая ошибка возникает. Наугад исправил -i на -o и всё вроде-как заработало! Но странно: из браузера DNS-resolving есть, из терминала - даже ping google.ru не работает, nslookup тоже.

fludardes ★★
() автор топика

Нет, всё-таки оно как-то работает. Правила те же, добавлена строчка -A OUTPUT -o lo -j ACCEPT:

*filter
:INPUT DROP [145:11482]
:FORWARD DROP [0:0]
:OUTPUT DROP [18518:3426455]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -d X.X.X.X/32 -p tcp -j ACCEPT
-A OUTPUT -d X.X.X.X/32 -p udp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o tun0 -j ACCEPT
-A OUTPUT -o tun1 -j ACCEPT
COMMIT
DNS-resolving работает через DNSCrypt. Магия, не иначе.

fludardes ★★
() автор топика
Ответ на: комментарий от fludardes

Приятно конечно, но не нужно так официально и лучше сразу на ты :)

С DNSCrypt никогда не работал, но обязательно обращу на него внимание и напишу про это. На данный момент ничего сказать не могу, извиняй (но посмотри вот это, вдруг поможет: http://www.insanitybit.com/2013/06/26/hardening-dnscrypt/)

От перезаписи resolv.conf на всех системах спасаюсь следующим хаком:

$ sudo chattr +i /etc/resolv.conf

Не очень красиво, зато никакая софтина этот файл уж точно не перезапишет.

soko1 ★★★★★
()
Ответ на: комментарий от soko1

Спасибо! Уже разобрались: пришлось в Ваши^W твои правила добавить строчку -A OUTPUT -o lo -j ACCEPT, и DNS-resolving через DNSCrypt заработал. Но возник ещё вопрос, прошу прощения - вышеприведённая строчка не создаёт какой-либо опасности утечки? Я просто в iptables ни бум-бум, к сожалению - поэтому всё методом тыка (и по готовым правилам) :( Я так проверил, отключив VPN - соединения ни с чем нет, пинги не идут. Но всё таки?

От перезаписи resolv.conf

У меня в Arch Linux устанавливается такая штука - openresolv, которая позволяет рулить содержанием /etc/resolv.conf. Это так, к слову просто.

fludardes ★★
() автор топика
Ответ на: комментарий от fludardes

Относительно безопасное правило. У меня например оно добавлено, т.к. часто на локалхосте подымаю веб-сервера для отладки кода, который написал. Ну тоесть, без этой строчки невозможно запустить на локалхосте какой-нибудь сервис вроде apache/mysql/socks.

Но в идеале конечно и это не разрешать на хосте, а в виртуалках пускать. Но это смотря какой уровень паранои интересует

У меня в Arch Linux устанавливается такая штука - openresolv

Я бы всё равно поставил атрибут тот, особенно если какой network-manager стоит.

soko1 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.