Самый простой способ сделать свой VPN-сервер и смотреть через него интернет — использовать SSH как SOCKS5-прокси. Главное преимущество такого подхода: только один браузер в системе отправляет трафик через удалённый сервер, а всё остальное (почта, мессенджеры, обновления) продолжает работать как обычно. Это идеально для обхода геоблокировок, анонимного серфинга или тестирования сайта с другого IP — без сложных настроек и без перенаправления всего системного трафика.
Сначала заказываем VPS. Обычно оно создаётся уже с запущенным SSH-сервером и открытым 22-м портом. На сервере рекомендуется настроить базовый фаервол, отключить вход по паролю и оставить только аутентификацию по SSH-ключу, а также создать отдельного пользователя без прав root.
Теперь на клиенте создаём туннель и запускаем браузер:
ssh -fND 7001 пользователь@ip_адрес_сервера
chromium --proxy-server=socks5://localhost:7001
Если вы пользуетесь Firefox, прокси настраивается в самом браузере: Настройки → Сеть → Настройки прокси → SOCKS v5, хост localhost, порт 7001.
Для Google Chrome используется та же команда, что и для Chromium:
google-chrome --proxy-server=socks5://localhost:7001
На этом всё — можно пользоваться «VPN» через браузер.
Как это работает
Команда
ssh -fND 7001 пользователь@ip_адрес_сервера
создаёт локальный SOCKS5-прокси через SSH-соединение с вашей VPS.
Флаги:
- -f — запускает SSH в фоне (после аутентификации возвращает управление терминалу)
- -N — не выполнять удалённые команды (только туннелирование, без shell)
- -D 7001 — создаёт динамический (SOCKS) прокси на локальном порту 7001
- пользователь@ip_адрес_сервера — ваши учётные данные и адрес VPS
В результате на вашем компьютере открывается локальный порт 7001. Любой трафик, отправленный на localhost:7001 как SOCKS5-прокси, передаётся через зашифрованное SSH-соединение на VPS, а оттуда — в интернет от имени сервера. Внешние сайты видят IP-адрес вашей VPS, а не ваш реальный IP.
Команда
chromium --proxy-server=socks5://localhost:7001
запускает браузер с указанием использовать SOCKS5-прокси на 127.0.0.1:7001 для всех соединений.
Преимущества
Подход прост в настройке: не требуется настраивать NetworkManager, TUN-устройства или параметры вроде PermitTunnel. Весь трафик шифруется благодаря SSH. Решение работает даже с обычным пользователем на VPS — права root не нужны. Кроме того, прокси можно использовать не только в браузере, но и в других приложениях, поддерживающих SOCKS5 (например, curl, Telegram и другие).
Ограничения
Трафик через туннель проходит только у тех приложений, которые явно настроены на использование прокси. SOCKS5 работает только с TCP-соединениями, UDP не поддерживается. Это означает, что веб-сайты будут работать корректно, но технологии вроде WebRTC, торрент-клиенты или онлайн-игры могут использовать ваш реальный IP-адрес. Чтобы предотвратить утечку через WebRTC в Chromium, добавьте флаг:
chromium --proxy-server=socks5://localhost:7001 --disable-webrtc
Альтернатива: proxychains
Если нужно направить через прокси любое приложение, даже не поддерживающее SOCKS напрямую, можно использовать утилиту proxychains. Сначала запустите туннель:
ssh -fND 7001 пользователь@ip_адрес_сервера
Затем выполните любую команду через proxychains:
proxychains curl ifconfig.me
Предварительно убедитесь, что в файле /etc/proxychains.conf или ~/.proxychains/proxychains.conf указано:
socks5 127.0.0.1 7001
Такой «браузерный VPN» — отличный баланс между простотой, безопасностью и контролем. Попробуйте — и вы удивитесь, насколько легко можно получить доступ к интернету «оттуда».
Туннель в две стороны
Туннель, созданный с помощью флага -D (динамический SOCKS-прокси), работает только в одном направлении: от вашего компьютера к серверу. Он позволяет приложениям на вашей машине (например, браузеру) направлять исходящий трафик через удалённый сервер, но не даёт возможности кому-либо с сервера инициировать соединение в обратную сторону. Это делает -D безопасным для повседневного использования в качестве прокси.
Если же вам нужен двунаправленный туннель — например, чтобы с удалённого сервера можно было подключиться к сервису на вашем локальном компьютере (который, возможно, находится за NAT или без публичного IP), — тогда используется обратное пробрасывание портов с флагом -R:
ssh -R серверный_порт:localhost:локальный_порт пользователь@ip_адрес_сервера
так вы разрешаете серверу подключаться к вашему SSH, что потенциально опасно, если не контролировать.
Скрипт создания туннеля
Сделал небольшой скрипт, который поднимает туннель. Можно поставить его запуск на ярлык в панели или на рабочем столе:
# Поднимает ssh тунель для работы через vpn
serverUserName="username" # имя пользователя на сервере
serverIpAddress="XXX.YYY.ZZZ.QQQ" # ip адрес сервера
serverSSHPort=22 # ssh порт для соединения
socksPortNumber=7001 # локальный порт для socks5
while :; do
# проверяем что у нас вообще есть подключение к локальной сети
if [[ "$(lsof -i :${socksPortNumber} -a | grep ssh | wc -l)" != "0" ]]; then
echo "Туннель уже запущен. Завершаем процессы"
lsof -i :${socksPortNumber} -a | grep ssh | awk '{print $2}' | xargs -r kill -9
else
break
fi
done
while :; do
if [[ "$(ip route show default | wc -l)" == "0" ]]; then
echo "Нет локальной сети, подождём..."
sleep 2
else
break
fi
done
while true
do
echo "Пробуем подключиться к VPN."
server_is_started=$(nc -nvz ${serverIpAddress} ${serverSSHPort} 2>&1 | grep "open\|succ" | wc -l)
if [[ "${server_is_started}" != "1" ]]; then
echo "Удалённый сервер не отвечает. Ждём 5 секунд и повторяем попытку..."
sleep 5
else
echo "Соединяемся с сервером."
{
ssh -p ${serverSSHPort} -fND ${socksPortNumber} ${serverUserName}@${serverIpAddress}
echo "Туннель успешно создан.";
echo "Теперь можно запустить браузер так:";
echo "chromium --proxy-server=socks5://localhost:${socksPortNumber} &";
} || {
echo "Ошибка! Не удалось подключиться к серверу";
}
break
fi
done
echo "Теперь можно запустить браузер так:";
echo "chromium --proxy-server=socks5://localhost:${socksPortNumber} > /dev/null 2>&1 &";