LINUX.ORG.RU
ФорумAdmin

Заставить Dns сервер отвечать по TCP

 , , , ,


0

1

Доброго дня всем. Есть компьютер на нем настроен Redsocks, который фильтрует TCP трафик. К нему претензий нет, все работает как нужно. Однако как мне отфильтровать UDP трафик, если Socks не поддерживает проксификацию UDP запросов? Заставить его отвечать по TCP, вместо UDP. И все бы хорошо. Поднимаем локальный кеширующий Bind9, перенаправляем исходящие запросы в 'dnstc'(модуль идет вместе с Redsocks) с помощью iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 5300 и вроде как он должен повторить попытку по TCP(исходя из слов самого автора программы Redsocks), однако нихрена он не повторяет. А просто пропадает интернет! Вопрос, как можно заставить Bind9 или dnsmasq отвечать по TCP? Неужели кроме DNSChef больше нет ничего похожего?


Ответ на: комментарий от trancefer

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

Pindos
() автор топика

Bind9 или dnsmasq отвечать по TCP.

Не отвечать, а отправлять запросы по tcp, не знаю самому было бы интересно услышать. а вот pdnsd умеет в конфиге,

query_method=tcp_only
таким образом твой кэш. сервер будет отправлять запросы серверам по tcp и направит их в туннель

ving2
()
Последнее исправление: ving2 (всего исправлений: 3)
Ответ на: комментарий от ving2

Странно. Все настроил. Поднял Pdnsd, настроил

global {
        perm_cache=10240;                             
        cache_dir="/var/cache/pdnsd";               
        server_ip = 0.0.0.0;                        
        status_ctl = on;                      
        min_ttl=15m;                           
        max_ttl=1w;                         
        timeout=10;                     
        par_queries=2;                           
       // query_method=tcp_only;
}
// DNS-отвечающий за локальные ресурсы
/*
server {
        label = ".localdomain";                     
        ip = 192.168.1.1;                     
        timeout = 10;                              
        uptest = query;                             
        interval = 10m;                             
        ping_timeout = 300;
}

// Google DNS
server {
        label = "recurse";
        root_server=on;
        randomize_servers = on;
        ip = 8.8.8.8, 8.8.8.4; 
        timeout = 10;                                
        uptest = query;                              
        interval = 10m;                              
        ping_timeout = 300;                          
        exclude = .localdomain;                     
        policy = included;                          
        preset = off;                             
}
*/
В начале пробывал без того что в /*...*/, не получилось, раскоментировал, все равно не получилось, думаю наверное проблема в query_method=tcp_only, закоментировал. Все равно зараза не работает. И вообще странно себя ведет. Скажем при отключении его через service stop или init.d stop выдает странные ошибки ни на что не указывающие. А в netstat-e как висит так и висит, хотя я его завершил через сервис. В resolv.conf прописал. А ping не идет никуда. Хотя dig проходит, но проходит даже на несуществующий сайт и везде 0msec. Честно даже не знаю что делать. Мысль бросить его и попытаться настроить DNSChef не дает мне покоя. Что скажите?

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

А ping не идет никуда.

пинги ты и не пустишь через редсокс, (не знаю почему они у тебя там не идут, но их лучше порезать правильно). Только tcp трафик. Скажу возьми конфиг отсюда: http://talk.maemo.org/showthread.php?t=92703

ving2
()
Последнее исправление: ving2 (всего исправлений: 1)
Ответ на: комментарий от Pindos

В resolv.conf прописал

зачем? У тебя запросы на него должны редериктом обрабатываться. Все днс запросы по удп на 53 порт, пойдут на порт который слушает pdnsd . Далее pdnsd его обработает отправит tcp запрос на 8.8.8.8, он пойдет через socks. Тебе ответ придет уже от твоего локального сервера.

думаю наверное проблема в query_method=tcp_only

без этого твоя схема не заработает.

ving2
()
Последнее исправление: ving2 (всего исправлений: 1)
Ответ на: комментарий от ving2

Угу. Я понял, что вы имеете ввиду. Перенаправить запросы примерно таким правилом iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 5353. Скопировал как вы и сказали конфиг. Однако при запуске pdnsd, он все равно весит на 53 порту, хоть ты тресни. Вот что сказал netstat

tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      1191/pdnsd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1061/sshd
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      3025/cupsd
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      1518/master
tcp6       0      0 :::22                   :::*                    LISTEN      1061/sshd
tcp6       0      0 ::1:631                 :::*                    LISTEN      3025/cupsd
tcp6       0      0 :::25                   :::*                    LISTEN      1518/master
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           810/avahi-daemon: r
udp        0      0 0.0.0.0:44807           0.0.0.0:*                           810/avahi-daemon: r
udp        0      0 127.0.0.1:53            0.0.0.0:*                           1191/pdnsd
udp        0      0 0.0.0.0:68              0.0.0.0:*                           1619/dhclient
udp        0      0 192.168.1.25:123        0.0.0.0:*                           1254/ntpd
udp        0      0 127.0.0.1:123           0.0.0.0:*                           1254/ntpd
udp        0      0 0.0.0.0:123             0.0.0.0:*                           1254/ntpd
udp        0      0 0.0.0.0:631             0.0.0.0:*                           3027/cups-browsed
udp6       0      0 :::5353                 :::*                                810/avahi-daemon: r
udp6       0      0 :::59123                :::*                                810/avahi-daemon: r
udp6       0      0 fe80::ced8:7651:a52:123 :::*                                1254/ntpd
udp6       0      0 ::1:123                 :::*                                1254/ntpd
udp6       0      0 :::123                  :::*                                1254/ntpd
raw6       0      0 :::58                   :::*                    7           854/NetworkManager
Вы скажите - правильно! 5353 то занят, однако я пробовал 5354 к примеру, результат тот же, он все равно на 53 запускается. Еще один нюанс хотел спросить.

pdnsd его обработает отправит tcp запрос на 8.8.8.8, он пойдет через socks. Тебе ответ придет уже от твоего локального сервера.

Pdnsd отправит запрос на 8.8.8.8, он пойдет через мой Socks, а с Socks-a, он пойдет на 8.8.8.8, и DNS гугла будут видны на том же Whoer, как мои. А мне нужно чтобы DNS были как у Socks-a. То есть его и были. Какие выдал провайдер серверу DNS, затем на нем подняли Socks, и вот я хочу получить эти DNS провайдера сервера. Или я что-то путаю?

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

Вы скажите - правильно! 5353 то занят, однако я пробовал 5354 к примеру, результат тот же, он все равно на 53 запускается.

В конфиге должно быть:

server_port = 5354;
или любой другой порт отличный от 53. Как ты его растартишь, у тебя системд? И нужен ли тебе этот avahi-daemon? Да и куча остальных сокетов. У тебя дебиан?

А мне нужно чтобы DNS были как у Socks-a... Или я что-то путаю?

Такого не будет и не получится. Будут видны днс, какие впишешь в конфиг в данном случае гугла.

ving2
()
Последнее исправление: ving2 (всего исправлений: 1)
Ответ на: комментарий от ving2

Я с ним уже намучился. Вы хотите сказать, что

А мне нужно чтобы DNS были как у Socks-a... Или я что-то путаю?

такой вариант возможен только при проксификации udp трафика через Socks? То есть чтобы на Socks была открыта такая возможность? Или получить DNS провайдера с помощью Socks невозможно, для этого только VPN?

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

Вы имеете ввиду, что возможно направить UDP через TCP, чтобы получить DNS провайдера? Или здесь имеется ввиду про проксификацию UDP трафика через Socks, чтобы получить DNS провайдера?

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