LINUX.ORG.RU
ФорумAdmin

Как зарезолвить DNS через SOCKS5 proxy

 , ,


0

3

Здравствуйте, возникла такая проблема.

Каким образом можно резолвить хостнеймы через SOCKS5 proxy ?

Собственно, нужно просто чтобы все имена резолвились не локально или через выданный по DHCP DNS сервер, а через те сервера которые обслуживают сервер на котором стоит SOCKS5.

Пробовал найти хоть какую-то инфу по этому поводу, перепробовал кучу готовых решений типа WinCap, ProxyCap, FreeCap.

У них каким-то образом резолвится хостнейм и вместо реального адреса возвращается что-то типо 127.29.*.*

С чем связано данное решение не могу понять. Почитав сорцы Freecap так и не дошло, зачем это нужно делать.

Буду благодарен если кто-то объяснит это.

Собственно, нужно просто зарезолвить хостнейм через ДНС сервер на SOCKS5 сервере.

Буду благодарен за любую помощь в данном вопросе.


1. установить руками 2. если dns не в одной подсети с вами то на форейволе сделать редирект 53 удп порта на тот сервер который вам нужен. 3. если в вашей подсети. то поднять опенвпн сервер, который не будет маршрутом по умолчанию, но будет менять днс.

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

Спасибо за ответ, дело в том, что сервера которые стоят на SOCKS5 серверах не публичные, то есть на запросы из вне не отвечают только из локально сети, насколько я понял. Так как если вручную прописать тот сервак, который выдается разными онлайн тулзами типо DnsLeak, то просто не резолвит хостнейм.

Вопрос такой, тогда чтобы конкретно, как узнать адрес DNS сервера который стоит на прокси сервере ? Если прокси сервер администрируется не мной, например выделенный приватный.

Спасибо.

Yxorp ()

socks по умолчанию резолвит на socks сервере. Для просто разрезолвить возьмите что-то современнее, например https://github.com/flier/asyncdns

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

Отлично, спасибо большое, уже как раз думал что-то сам писать по RFC SOCKS5 чтобы UDP слать.

Обязательно попробую, только с современным вы погорячились конечно, последний коммит был сделан 5 лет назад)

Если кто-то еще знает подобные тулзы, буду благодарен, чтобы не изобретать велосипед.

Спасибо

Yxorp ()
Ответ на: комментарий от hizel

Вопрос такой немного по матчасти. Может кто подскажет каким образом происходит инкапсуляция UDP пакета через SOCKS5, согласно RFC добавляется флаг 0x03 и это так и есть, но после этого и пару служебных полей идет сразу хостнейм. Каким образом эта штука работает ? Если как минимум должен быть DNS UDP пакет, в котором задан, класс, хостнейм и так далее + сам UDP пакет имеет порт и айпишник.

В предложенной вам либе нужно задавать все равно DNS сервер это и логично, сначала немного не допер, потом влепил вместо конкретного адреса 127.0.0.1 и порт 53. Соответственно пакет инкапсулируется в TCP и шлется на прокси сервак, а там уже локально резолвится.

Вот кусок кода

qname = dns.name.from_text(domain, None)
        request = dns.message.make_query(qname, dns.rdatatype.ANY)

        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

        proxy.wrap(sock)

        sent = sock.sendto(request.to_wire(), ("8.8.8.8", 53))

        print "INFO: sent %d bytes through proxy" % sent

        packet, addr = sock.recvfrom(1024)

        print "INFO: received %d bytes packet from %s" % (len(packet), addr)

        response = dns.message.from_wire(packet)

        print "INFO: response=", response

Или каким образом происходит резолв ДНС на прокси сервере ?

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

Если как минимум должен быть DNS UDP пакет, в котором задан, класс, хостнейм и так далее

Ну так у вас в коде dns.message.make_query(qname, dns.rdatatype.ANY) вот это вот, что?

сначала немного не допер, потом влепил вместо конкретного адреса 127.0.0.1 и порт 53

не очень понятно зачем и работает только если на прокси на 127.0.0.1 кто-то dns поднял

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