Если я использую SSH для прокси-сервера SOCKS, проходят ли через него DNS-соединения?

14

Я использую ssh -D 8080 my serverдля создания SOCKS прокси. Затем я настраиваю OS X для использования localhost:8080в качестве SOCKS-прокси. Я использую это, чтобы получить доступ к Интернету без мониторинга.

Я использую DNS-серверы Google (8.8.8.8), но как мне убедиться, что DNS-запросы проходят через туннель SSH?

Джейсон Марзст
источник
1
«без
слежки

Ответы:

22

Я знаю, что ответ немного опоздал, но для справки и для тех, кто все еще ищет ответ,

Задайте для network.proxy.socks_remote_dnsсвойства в конфигурации Firefox (введите about: config в адресной строке) значение TRUE (просто дважды щелкните свойство, чтобы переключить значение), чтобы разрешить поиск DNS через локальный / удаленный прокси-сервер socks5.

PS: я не уверен насчет других браузеров :(

Джимсон Каннантхара Джеймс
источник
1
Для тех, кто предпочитает пользовательский интерфейс, это в «Предпочтения» → «Дополнительно» → вкладка «Сеть» → кнопка «Настройки» (для «Соединения») → «Прокси DNS при использовании SOCKS v5».
JWD
Я заметил, что DNS НЕ проходит через прокси для HTTP, но он работает для HTTPS. Как это может быть дело? Это как задумано? (Я использую Firefox)
Евгений Дмитриевич Губенков
8

Если это прокси SOCKS 5 , и клиентская программа поддерживает его, DNS будет проходить через прокси. Большинство браузеров поддерживают DNS через прокси-сервер Socks 5, но для этого может потребоваться специальная конфигурация.

Если вашей целью является конфиденциальность в сети, вам действительно следует использовать что-то вроде privoxy . Privoxy очистит заголовки ваших веб-запросов и гарантирует, что весь трафик, включая DNS, проходит через прокси Socks 5. Запустите privoxyлокально, и вы можете использовать sshдля туннелирования трафика Socks 5.

Дэвид Шварц
источник
2

Вы не можете сделать это «из коробки», поскольку туннель SSH предназначен только для соединений TCP / IP - трафик UDP не сможет пройти через этот туннель без специальной настройки. По сути, вам нужно создать fifo, чтобы поработать с netcat, как описано здесь . Тогда вы можете использовать DNS Google из дальнего конца.

PFO
источник
1

Как уже упоминалось там , ваши общесистемные поиски не туннелированы .

Если вам нужно решение на основе SSH, вы можете получить вдохновение здесь или использовать SSHuttle (например, упомянутый здесь ). Существует патч для простой пересылки DNS-запросов.

YMMV, но у меня был успех со следующим:

#!/bin/bash
# Taken from http://stackoverflow.com/questions/4594319/shell-replace-cr-lf-by-comma
DNSSERVERS=$(nmcli d show | grep DNS | awk '{print $2}' | sed -e 'H;${x;s/\n/,/g;s/^,//;p;};d' )
sshuttle  \
    -vvv                \
     --dns-hosts ${DNSSERVERS}   \
    -r server   \
    254.254.254.254/32
Фредерик Норд
источник
0

Как говорит pfo, SSH-туннели предназначены только для трафика TCP, и приложение должно знать о прокси-серверах SOCKS.

Если вы хотите, чтобы все было туннелировано, вам нужен надлежащий VPN. Посмотрите на что-то вроде OpenVPN .

Джеймс О'Горман
источник
0

Это зависит от вашего приложения. Например, Firefox отправляет имя хоста прокси-серверу SOCKS без его разрешения. В этом случае вам не нужно ничего делать для конфиденциальности. Вы можете подтвердить это Wireshark.

PS. Предположим, вы используете прокси-сервер SOCKS5. SOCKS4 не поддерживает имя хоста.

Okwap
источник