DoH server connection error: remote disconnected while in HTTP exchange

Обсуждение ПО и его настройки
Ответить
Lurker
Сообщения: 159
Зарегистрирован: 29 апр 2021, 10:45

ROS 6.48.2
Задача: микротик должен обращаться наружу r DNS серверам через DNS over HTTPS
На форумах нашёл только информацию о том, что проблема не только моя и распространяется на все DoH сервера.
Симптомы: оно в принципе работает, но сыпятся единичные ошибки. А иногда они начинаются массовые. И в случае массовых DNS не работает.
Я снял лог https://yadi.sk/d/MoQvRDf1u_jFxA там единичная ошибка вылезла где-то на последних 20 секундах лога.
Но есть нюанс, лог собирался по IP DNS сервера в интернете(как написать лучший фильтр для сбора лога я не придумал)
DNS запрос же может пройти аж 3-мя путями.
1)нас не интересующий: DNS over tls с компьютера. С ним проблем не должно быть.
2)DNS с компьютера на микрот, с микрота DoH в интернет. Тут мы не увидим общения микрота с компом.
3)нешифрованный DNS с компьютера на DNS сервер в интернете. Его перехватывает микрот, сам отправляет DOH в интернет и отвечает компьютеру.
судя по тому, на все нешифрованные DNS запросы в логе были оперативно предоставлены ответы, я думаю что проблемным ошибка возникла во втором варианте. И задержки вопрос-ответ мы не видим т.к. трафик пк-микрот не попал в лог, а микрот-DoH сервер запрос\ответ зашифрован.

А эти ошибки бесят. они и лог забивают и отключать их нельзя т.к. могут массовые валиться.


Lurker
Сообщения: 159
Зарегистрирован: 29 апр 2021, 10:45

Нашёл решение. Провайдер блокирует рандомные DoH запросы. Пустил DoH через VPN, всё работает уже двое суток без единой ошибки.


Lurker
Сообщения: 159
Зарегистрирован: 29 апр 2021, 10:45

Проблема была не до конца решена. Пуляя через GRE я иногда получал отвал DOH.
Проблема в том, что gre шифруется IPSECом. Но с той стороны убунта, и она шлёт GRE даже если ipsec упал. В свою очередь микротик слышит эти пакеты и решает если с той стороны GRE что-то прилетает значит оно живёт. И отправляет DOH через мёртвый GRE туннель.(который мёртвый потому, что IPSEC мёртвый, почему IPSEC мёртвый это отдельный вопрос)
Решение со стороны убунту:
iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT
iptables -A INPUT -p gre -j DROP

# and for outgoing packets:
iptables -A OUTPUT -m policy --dir out --pol ipsec -j ACCEPT
iptables -A OUTPUT -p gre -j DROP

как дропать не шифрованное IPSEC-ом GRE на микротике не понял.


Ответить