На этот вопрос уже есть ответ здесь:
Итак, используя ssh, вы подключитесь к серверу, набрав ssh User @ PrivateIP
, как можно было бы превратить этот код в фрагмент кода, который работает как VPN (поиск, например, в Google с другой геолокации). Для справки: Под подключением я подразумеваю, что вы подключаетесь к собственному компьютеру, а не к поставляемому VPN-серверу.
Это не точно VPN, но могло быть достаточно в большинстве случаев. Можно создать соединение SSH с динамическим перенаправлением портов для создания прокси носков:
ssh -D 9050 user@sshserver -fTNC
-D [bind_address:]port
Указывает локальное “динамическое” перенаправление портов прикладного уровня... Каждый раз, когда связь установлена с этим портом, соединение передается по безопасному каналу, и прикладной протокол затем используется для определения, где соединиться с от удаленной машины. В настоящее время SOCKS4 и протоколы SOCKS5 поддерживаются... читает больше в man ssh
.
Опции -fTNC
включит сжатие и продвинет соединение в фоновом режиме.
Дополнительно используйте autossh
вместо ssh
.
Кроме того, можно создать crontab
запись как это:
@reboot autossh -D 9050 user@sshserver -fTNC
Остальное, которое необходимо сделать, должно сказать приложениям использовать localhost:9050
как прокси носков. Вот немного ссылок, выделенных этой задаче:
В масштабе всей системы проксируйте настройки в человечности или Как к на Ubuntu 18.04
Установите Системные Настройки Прокси Ubuntu без Перезапуска от командной строки
Как направить веб-трафик надежно без VPN Используя туннель SOCKS
Для любых других особых требований, вероятно, iptables
правила могут быть применены.
Другое решение, которое является больше близко к VPN, sshuttle
, который работает по ssh также. Вот его обзор:
sshuttle
: где прозрачный прокси встречается, VPN встречает sshНасколько я знаю, шаттл является единственной программой, которая решает следующий общий падеж:
- Вашей клиентской машиной (или маршрутизатор) является Linux, FreeBSD или MacOS.
- У Вас есть доступ к удаленной сети через ssh.
- У Вас не обязательно есть доступ администратора в удаленной сети.
- Удаленная сеть не имеет никакой VPN или только глупых/сложных протоколов VPN (IPsec, PPTP, и т.д.). Или возможно Вы - администратор, и Вы просто были расстроены ужасным состоянием утилит VPN.
- Вы не хотите создавать ssh порт вперед для каждого хоста/порта в удаленной сети.
- Вы ненавидите перенаправление портов openssh, потому что это случайным образом медленно и/или глупо.
- Вы не можете использовать функцию PermitTunnel openssh, потому что она отключена по умолчанию на openssh серверах; плюс он делает TCP по TCP, который имеет ужасную производительность (см. ниже).
Это доступно в репозитории Ubuntu, таким образом, можно установить его и запустить исследование командой:
sudo apt install sshuttle
Также возможно установить в virtualenv как некорневой пользователь. После того как это установлено, можно использовать:
sshuttle --dns -r user@sshserver 0.0.0.0/0
Эта команда передаст весь трафик включая запросы DNS, будет проксирован через сервер DNS сервера, к которому Вы являетесь подключением.