Как отследить сетевые запросы программы в linux (отлов DNS утечек)?
Добрый день.
Некоторые программы в моем Debian настроены на работу через SOCKS5 proxy.
Как я могу узнать с какого адреса они делают DNS запросы (тоже через прокси или напрямую)?
Заранее спасибо.
UPD.
Был поставлен wireshark и через него попытался найти запросы на 53 порт, но там пусто. Уточню, что у меня два сетевых интерфейса: wlp60s0 и tun0 (VPN).
Судя по wireshark:
Весь трафик на wlp60s0 ходит от 192.168... до VPN сервера и обратно.
На интерфейсе tun0 уже куча всяких разных адресов в dest и src, но там тоже вообще нет запросов на 53 порт. Использовал фильтр udp.port == 53 || tcp.port == 53
Идете и тыкаете в свои программы, которые работают у вас через сокс5.
Останавливаете tcpdump. И изучайте файл dns.txt
То же самое tcpdump -i tun0 udp port 53 > dns_tun0.txt
kizijo, а
В одном терминале выполните tcpdump udp port 53, во втором ping ya.ru, например. Останавливаете пинг и заново запускаете его, каждый раз в консоли tcpdump после запуска пинга должна добавляться запись. Если она добавилась лишь один раз (это когда запустили пинг в первый раз), а в последующих пингах не добавляется, то у вас стоит днс-кэширющий софт (nscd, dnsmasq, bind) и его надо перезапустить или остановить вовсе на вермя проверки.
У вас классные советы, спасибо. Bind стоит на VPN сервере.
В итоге я пошел смотреть пакеты не у себя на машине, а на VPN сервер. Там тоже не видно трафика на 53 порт (наверное, как раз из-за bind), но при запуске своих программ с прокси я видел трафик только на адрес этого прокси, другого трафика не было. Значит ли это, что весь трафик (в том числе DNS) от этих программ идет через прокси?
По вашему последнему совету: tcpdump udp port 53, во втором ping ya.ru - запись добавлялась каждый раз.
Чтобы было понятнее: у меня весь трафик в системе идет по-умолчанию на VPN сервер. Но в этой системе есть несколько программ, в которых еще настроен прокси.
Включил tcpdump на всем tun0 на VPN сервере и попробовал 2 кейса:
1) Пинговал со своего ПК google.com и в tcpdump было:
10.7.0.9 → 10.7.0.1 DNS 59 Standard query A google.com
10.7.0.9 → 10.7.0.1 DNS 59 Standard query AAAA google.com
10.7.0.1 → 10.7.0.9 DNS 187 Standard query response A google.com A 91.19...
... Далее идут пинги на полученный IP адрес
2) Включал свои программы, которые настроены на работу через прокси, в tcpdump были только запросы между 10.7.0.9 и IP адресом прокси. Все запросы были либо TCP, либо TLSv1.2.
Правильно ли я понимаю, что в первом случае DNS запросы идут на bind9 (10.7.0.1), а во втором случае они идут через прокси? Если да, то с какого адреса сам bind делает DNS запросы?
kizijo, //Значит ли это, что весь трафик (в том числе DNS) от этих программ идет через прокси//.
Только, косвенно. Чтобы точно знать надо разбираться strace-ом.
Проще наверное убедиться, что днс идут через прокси следующим способом: Временно отключить на своей тачке днс сервера в /etc/resolv.conf (или в /etc/network/interfaces, если там есть днс, или в GUI в используемом менеджере подключений). Потом убедиться что пинг на какой-либо ресурс выдает ошибку резолва. И попробовать свое приложение, работающее по с socks5. Если арбайтен, значит точно всё, как вы хотите.
Не могу найти ни одного запроса на 53 порт, использую фильтр: udp.port == 53 || tcp.port == 53
Уточню, что у меня два сетевых интерфейса: wlp60s0 и tun0 (VPN).
Весь трафик на wlp60s0 ходит от 192.168... до VPN сервера и обратно.
На интерфейсе tun0 уже куча всяких разных адресов в dest и src, но там тоже вообще нет запросов на 53 порт.
kizijo, попробуйте включить Wireshark, подключиться к VPN и открыть какой-нибудь сайт, который не открывали раньше. Важно, чтобы раньше он не открывался на этом ПК.
Если ИП_АДРЕС_DNS_ИЛИ_ПРОКСИ равен адресу вашего прокси сервера - получается трафик гуляет через прокси. Если там фигурирует адрес DNS сервера - трафик идёт напрямую.
Уточню, что у меня два сетевых интерфейса: wlp60s0 и tun0 (VPN).
Весь трафик на wlp60s0 ходит от 192.168... до VPN сервера и обратно.
На интерфейсе tun0 уже куча всяких разных адресов в dest и src, но там тоже вообще нет запросов на 53 порт.
Да, безусловно все идет через VPN сейчас. Вся система работает по-умолчанию через VPN, но у некоторых отдельных программ еще стоит SOCKS5 proxy на localhost. Я вот хочу узнать в таком случае DNS идет через proxy или нет (если нет, то в моем случае это будет значить, что идет просто через VPN).
Пусть некоторые идут через прокси, а если потом все завернуто в впн, значит что получается, посмотреть на том конце впна, там и будут ваши днс запросы?
Да, вы правы, я уже как раз там пошел смотреть пакеты. К сожалению, трафика на 53 порт я все равно не увидел (возможно, из-за bind9), но весь трафик от программ с прокси, который я видел, шел на адрес этого прокси. Значит ли это, что весь трафик (в том числе DNS) от этих программ идет через прокси?
Или надо все же как-то получить информацию с 53 порта? Как вариант, отключив bind9.