SSH как SOCKS сервер
Допустим, нам нужен доступ к сайту, который заблокирован на территории России. Тогда нам потребуется ssh-сервер с белым ip-адресом где-то за границей. Можно настроить VPN-сервер, чтобы выходить в интернет через него. Но можно обойтись без установки дополнительного программного обеспечения, а использовать возможности ssh-сервера. Вот цитата из документации по команде ssh:
-D [bind_address:]port Dynamic application-level port forwarding. This allocates a socket to listen to port
on the local side. When a connection is made to this port, the connection is forwarded over the secure channel,
and the application protocol is then used to determine where to connect to from the remote machine.
При использовании ключа -D
осуществляется динамическая переадресация портов на уровне приложения. На локальном устройстве (где работает ssh-клиент) выделяется/создается сокет для прослушивания определенного порта. Когда с этим портом устанавливается соединение, оно перенаправляется по безопасному каналу на удаленное устройство (на котором работает ssh-сервер). А затем уже там, на удаленном компьютере, для определения того, куда именно должно быть осуществлено соединение, используется прикладной протокол.
$ ssh -D 8080 evgeniy@123.123.123.123
Если ssh-сервер работает на порту, отличном от 22-го, его тоже нужно указать:
$ ssh -p 2222 -D 8080 evgeniy@123.123.123.123
Иногда бывает так, что почти все порты закрыты. Но, как правило, открыт 443-ий порт — так что можно настроить ssh-сервер на этот порт. Мало того, можно настроить работу ssh-сервера на двух портах — для этого редактируем файл конфигурации /etc/ssh/sshd_config
.
$ sudo nano /etc/ssh/sshd_config
Port 22 Port 443
$ sudo systemctl restart ssh
Теперь команда будет выглядеть так:
$ ssh -p 443 -D 8080 evgeniy@123.123.123.123
Для удобства можно создать файл конфигурации клиента ~/.ssh/config
:
Host ssh-proxy Hostname 123.123.123.123 User evgeniy Compression yes DynamicForward 127.0.0.1:8080 Port 443
$ ssh ssh-proxy
Хорошо, с этим разобрались, теперь настроим браузер Firefox — Настройки → Основные → Параметры сети:
Ниже есть дополнительная настройка, которая позволяет отправлять DNS-запросы тоже через наш ssh-сервер. Также там есть настройка, чтобы отправлять DNS-запросы через HTTPS, чтобы скрыть от посторонних глаз, какие сайты планируется посетить. И можно указать подходящий DNS-сервер, который поддерживает такую возможность, или оставить DNS-сервер по умолчанию — это Cloudflare.
Теперь проверим, что все работает — заходим на Яндекс и вводим запрос «мой ip адрес»:
Кроме того, мы можем изменить команду, чтобы прослушивать все интерфейсы (а не только localhost
), включая ethernet
или wifi
— это позволит другим компьютерам в нашей локальной сети просматривать сайты через ssh-сервер. Теперь в настройках Firefox на других компах сети нужно указать ip-адрес нашего компа, например 192.168.100.2
.
$ ssh -p 443 -D 0.0.0.0:8080 evgeniy@123.123.123.123
Не только браузер, но и многие другие приложения могут использовать socks-прокси. У некоторых приложений есть параметры конфигурации для активации прокси-сервера. Другим нужно немного помочь вспомогательной программой — например, proxychains позволяет запустить через прокси Microsoft RDP и другие.
Дополнительно
- SSH Tunneling and Proxying
- Практические советы, примеры и туннели SSH
- SSH-туннели: практические примеры
- Dante. Установка и настройка прокси-сервера
- Удаленный рабочий стол в Ubuntu Desktop 18.04 LTS
- Монтирование удаленной директории с помощью sshfs. Часть 2 из 2
- Монтирование удаленной директории с помощью sshfs. Часть 1 из 2
- Автоматическое подключение по ssh из скрипта
- VPN-канал с помощью OpenSSH. Часть четвертая
- VPN-канал с помощью OpenSSH. Часть третья
Поиск: Bash • DNS • HTTP • HTTPS • Linux • SSH • Клиент • Сервер • Сокет • Настройка • SOCKS • прокси • proxy