Я использую ssh -D 8080 my server
для создания прокси-сервера SOCKS. Затем я настраиваю OS X для использования localhost:8080
как прокси-сервер SOCKS. Я использую это для доступа к Интернету без наблюдения.
Я использую DNS-серверы Google (8.8.8.8), но как мне убедиться, что DNS-запросы проходят через туннель SSH?
Я знаю, что ответ немного запоздал, но для справки и для тех, кто все еще ищет ответ,
Установить network.proxy.socks_remote_dns
в конфигурации firefox (введите about: config в адресной строке) в значение ИСТИНА (просто дважды щелкните свойство, чтобы переключить значение), чтобы включить поиск DNS через локальный / удаленный прокси-сервер socks5.
PS: Насчет других браузеров я не уверен :(
Если это НОСКИ 5 прокси, а клиентская программа его поддерживает, DNS будет проходить через прокси. Большинство браузеров поддерживают DNS через прокси Socks 5, но для этого может потребоваться специальная настройка.
Если ваша цель - конфиденциальность в Интернете, вам действительно стоит использовать что-то вроде Privoxy. Privoxy очистит заголовки ваших веб-запросов и обеспечит прохождение всего трафика, включая DNS, через прокси Socks 5. Бегать privoxy
локально, и вы можете использовать ssh
для туннелирования трафика Socks 5.
Вы не можете сделать это из коробки, поскольку туннель SSH предназначен только для подключений TCP / IP - трафик UDP не сможет пройти через этот туннель без специальной настройки. По сути, вам нужно создать fifo, чтобы проделать некоторые трюки с netcat, как описано Вот. Тогда вы можете использовать DNS Google из удаленного окна.
Как уже упоминалось там, ваш поиск в системе не туннелируется.
Если вам нужно решение на основе 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
Как говорит pfo, туннели SSH предназначены только для трафика TCP, и приложение должно знать о прокси-серверах SOCKS.
Если вы хотите, чтобы все туннелировалось, вам нужен правильный VPN. Взгляните на что-то вроде OpenVPN.
Это зависит от вашего приложения. Firefox, например, отправляет имя хоста прокси-серверу SOCKS, не разрешая его. В этом случае вам не нужно ничего делать для конфиденциальности. Вы можете подтвердить это с помощью wirehark.
PS. Предположим, вы используете прокси-сервер SOCKS5. SOCKS4 не поддерживает имя хоста.