Иногда нужно быстро организовать безопасное соединение, или туннель до удалённого сервера, например для… Для работы с каким-либо зарубежным сервисом, с IP принадлежащим этой же стране. В случае если такие задачи встают регулярно, имеет смысл настроить OpenVPN, однако для разового применения можно ограничиться утилитой sshuttle.
Установить утилиту можно из репозитория дистрибутива, либо с помощью pip:
yum install sshuttle dnf install sshuttle apt-get install sshuttle pip install sshuttle
Конечно же, нам потребуется удалённый сервер, доступный по SSH. Допустим, его IP — 1.2.3.4. Для того что бы завернуть весь трафик через туннель до этого IP, необходимо выполнить команду:
sshuttle --dns -r root@1.2.3.4 0/0
При использовании параметра --dns
DNS запросы будут так же направляться к удалённому серверу. Параметр --daemon
можно передать утилите если мы хотим запустить туннель в фоне. А параметр -v
имеет смысл использовать для получения большего количества информации о соединении во время сессии.
Если мы хотим использовать тунель только для трафика с определённых IP, запустить sshuttle можно вот так:
sshuttle --dns -r root@1.2.3.4 177.20.20.12/32 163.141.135.0/24
Для использования нужного ssh ключа при запуске, выполняем:
sshuttle --dns -r root@1.2.3.4 0/0 --ssh-cmd "ssh -i /home/vasya/.ssh/id_dsa"
Утилита безусловно удобная, но имеет ряд недостатков. Первый — медленная скорость соединения. Второй — доступна работа только с IPv4, поддержки IPv6 пока что нет. Однако оба этих недостатка не критичны (с учётом того для каких целей можно использовать такой туннель), и с лихвой перекрываются основным достоинством — sshuttle просто работает. Ставим, запускаем, используем — что может быть проще?
Автор знает о том, что можно строить туннели просто с помощью SSH и пробрасывания портов. Но автор хотел показать как быстро, без дополнительных заморочек с прописыванием прокси и прочего, поднять аналогичное VPN соединение.