Есть ли способ перенаправить DNS-трафик на ssh-туннель?

Есть ли способ перенаправить DNS-трафик на ssh-туннель?

Я пытаюсь получить базовые решения, аналогичные различным доступным прокси-серверам Smart DNS.

Теперь я могу выполнить одну часть, используя SSH-туннелирование и создавая динамическую пересылку.

host myserver
User root
    HostName MyIP
    IdentityFile <MyKey>
    DynamicForward 4444

Теперь это работает, когда у меня есть браузер и я могу настроить Sock-прокси.

Но что

  1. Мне нужно запустить DNS-сервер (похожий на dnsmasq).
  2. Настройте DNS-сервер на моем маршрутизаторе.
  3. Направить весь трафик через ssh.

решение1

шаттлможет быть полезно:

Прозрачный прокси-сервер, работающий как VPN для бедных. Пересылает по ssh. Не требует администратора. Работает с Linux и MacOS. Поддерживает DNS-туннелирование.

Он позволяет вам перенаправлять весь ваш трафик по SSH на сервер,включая DNS.

Я сам этим не пользовался, но, возможно, это то, что вы ищете?

решение2

И да, и нет. Dnsmasq не может просто попросить SOCKS-прокси разрешить имена, так как такой команды протокола SOCKS нет; у прокси есть только команда, которая принимает доменное имя + портинемедленно подключается к нему, в то время как клиент фактически никогда не узнает IP-адрес, который был использован. (И, кроме того, DNSеще немногочем просто поиск IP-адресов, поэтому даже если такая функциябыл(Вы все равно не сможете правильно эмулировать DNS поверх него.)

Однако некоторые DNS-резолверы (не Dnsmasq) могут взаимодействовать снастоящийDNS-сервер через туннель SSH. DNS-серверы должны поддерживать TCP, поэтому вы можете использовать стандартный ssh -Lтуннель и направить его на какой-нибудь удаленный сервер. Dnsmasq не будет работать (он всегда сначала пытается использовать UDP), но Unbound можно настроить так, чтобы он всегда запрашивал по TCP. Также подойдет резолвер, использующий DoT (DNS через TLS) или DoH, поскольку они в настоящее время также основаны на TCP.

Я бы действительно рекомендовал туннель IP-уровня (VPN) вместо SOCKS. Хотя вы можете выжить в течение длительного времени, используя только TCP, многим программам требуется также UDP, и в целом гораздо проще маршрутизировать все через туннель IP, чем делать то же самое через SOCKS.

решение3

Спасибо Сааруотвечать, мне удалось заставить sshuttle работать через прокситолькоDNS-запросы с помощью команды следующего вида:

sshuttle --dns -r username@host \
    --ns-hosts=dns01.example.com,dns02.example.com \
    0/0:53 ::/0:53

Связанный контент