Базовые брандмауэры блокируют соединения на основе используемого порта и IP-адреса назначения, но более продвинутые брандмауэры используют глубокую проверку пакетов (DPI) и/или проверку пакетов с контролем состояния (SPI) для различения различных типов алгоритмов шифрования и протоколов VPN. Это означает, что они могут обнаружить трафик OpenVPN и пометить его, чтобы администратор мог заблокировать сервер.

Есть три варианта: обфускация прокси, туннелирование SSL и туннелирование SSH. В этом уроке мы обсудим последнее. Туннелирование SSH оборачивает ваше уже зашифрованное соединение другим уровнем шифрования, поэтому брандмауэр не может их различить. Каждый из этих методов должен обходить брандмауэры DPI и SPI, устанавливаемые корпорациями или правительствами с жесткой цензурой, такими как Китай.

OpenVPN через SSH имеет пару недостатков. Во-первых, это снижение производительности из-за двойного шифрования. Во-вторых, отпечаток OpenVPN больше не может быть обнаружен при туннелировании через SSH, но некоторые брандмауэры также блокируют трафик SSH. Это касается таких сервисов, как Netflix, которые прекращают использование любого типа зашифрованного прокси, OpenVPN, SSH или иным образом. В этом случае мы рекомендуем вместо этого настроить Obfsproxy, что делает зашифрованный трафик нормальным и незашифрованным. По этой причине Obfsproxy гораздо мощнее, но и сложнее в настройке и запуске.

К сожалению, насколько нам известно, Obfsproxy в сочетании с OpenVPN в настоящее время работает только на настольном компьютере. Туннелирование SSH может использоваться на мобильном устройстве Android или iOS.

В этом руководстве предполагается, что вы уже настроили работающий сервер OpenVPN и можете подключиться к нему с помощью графического интерфейса OpenVPN или приложения OpenVPN Connect. Вы также должны иметь возможность SSH подключения на вашем сервере, используя терминал на Mac или PuTTy на ПК. В демонстрационных целях мы будем использовать PuTTy.

Настройка OpenVPN через SSH на ПК

Откройте PuTTy и загрузите конфигурацию вашего VPN-сервера. На боковой панели перейдите к Соединению> SSH> Туннели. Убедитесь, что D8080 включен в список. Если нет, введите 8080 в поле «Порт источника» и выберите «Авто» и «Динамический». Затем нажмите Добавить. Теперь у вас есть прокси-сервер SSH, работающий через порт 8080. Вы можете сохранить его как отдельную конфигурацию сеанса, если хотите вернуться на вкладку Сеанс дерева навигации.

openvpn ssh putty 8080

Нажмите Открыть и войдите на свой сервер. Помните, что в новой версии Amazon Linux AMI имя пользователя — ec2-user.

Перейдите к файлу openvpn.conf и проверьте его содержимое с помощью этих команд.

cd /etc/openvpn
cat openvpn.conf

Это должно отобразить содержимое вашего файла конфигурации сервера OpenVPN. Это должно выглядеть так:

port 1194
proto tcp-server
dev tun1
ifconfig 10.4.0.1 10.4.0.2
status server-tcp.log
verb 3
secret ovpn.key

openvpn ssh server config

Важно то, что вторая строка настроена на TCP, а не на UDP. Если вам нужно изменить его, вы можете отредактировать его с помощью этой команды:

sudo nano openvpn.conf

Затем нажмите CTRL + O (буква «o», а не ноль), чтобы сохранить файл, затем нажмите CTRL + X, чтобы выйти из редактора.

Конфигурация клиента

На локальном компьютере перейдите к файлам конфигурации клиента OpenVPN. Если вы использовали каталог установки по умолчанию, это будет C: / Program Files / OpenVPN / config.

Создайте копию вашего существующего файла конфигурации OpenVPN из последнего урока или создайте новый. Найдите Блокнот или другой текстовый редактор и щелкните его правой кнопкой мыши, чтобы запустить от имени администратора. Откройте или создайте новый файл конфигурации, который должен выглядеть следующим образом:

proto tcp-client
remote localhost 1194
port 1194
dev tun1
secret ovpn.key
redirect-gateway def1
ifconfig 10.4.0.2 10.4.0.1
socks-proxy-retry
socks-proxy 127.0.0.1 8080

Обратите внимание, что вторая «remote» строка использует localhost вместо IP-адреса сервера OpenVPN, плюс две строки в конце, которые настраивают OpenVPN для использования прокси SOCKS. Все остальное так же, как и раньше.

Сохраните новый файл конфигурации в папке config вашего каталога OpenVPN.

Настройка приложений

Последний шаг — настроить ваши приложения на использование прокси-сервера через порт 8080. Это похоже на то, что мы делали с базовым SSH-прокси из предыдущего урока. Во многих приложениях настройки прокси-сервера доступны в настройках, а некоторые могут даже автоматически определять их. Если вам нужно настроить его вручную, вам понадобятся три вида информации:

  • Host: 127.0.0.1
  • Port: 8080
  • Proxy type: SOCKS5 (or SOCKS v5)

Вот инструкции для Firefox и Chrome:

В Firefox:

  • Выберите Сервис> Параметры> Дополнительно> Сеть> Соединение> Настройки> Ручная настройка прокси
  • Установите для хоста SOCKS значение 127.0.0.1, а для порта — 8080 (или для любого другого туннельного порта, установленного в PuTTy).
  • Нажмите ОК, чтобы сохранить

В Chrome:

  • Страница установки должна появиться, как только вы установите расширение, или щелкните значок в правом верхнем углу Chrome и нажмите Параметры.
  • Назовите профиль как хотите. В разделе «Ручная настройка» установите для хоста SOCKS значение 127.0.0.1, а для порта — 8080 (или любой другой порт туннеля, указанный в PuTTy. Оставьте все остальное пустым.
  • Нажмите Сохранить, затем снова щелкните значок, чтобы выбрать свой профиль прокси.
obfsproxy chrome proxy switchy

Теперь подключитесь к вашему серверу сначала с помощью PuTTy, используя указанную выше конфигурацию, а затем с помощью VPN, используя созданный нами новый файл конфигурации.

Теперь вы подключены к Интернету с OpenVPN через SSH!

Мобильные устройства

Мы собираемся объяснить, как адаптировать туннель OpenVPN + SSH для Android, хотя iOS не должна сильно отличаться.

Прежде чем мы начнем, есть пара предостережений. Во-первых, этот метод работает только для просмотра веб-страниц. Это связано с тем, что, в отличие от настольного компьютера, вы не можете просто открывать порты на обычном устройстве Android или iOS. Это означает, что порты, используемые другими приложениями, не будут направлены через прокси-сервер SSH. Чтобы преодолеть это, вы можете выполнить рутирование или джейлбрейк вашего устройства и использовать приложение, такое как ProxyDroid или приложения Cydia Unix, для настройки прокси.

Это учебник для более позднего дня. А пока давайте установим и запустим на Android с Firefox. Вам нужно будет установить следующие приложения:

  • OpenVPN for Android (примечание: НЕ OpenVPN Connect, который более требователен к аутентификации)
  • ConnectBot, или эквивалентное приложение терминала SSH (JuiceSSH хорош, но стоит пересылать порты)
  • файловый менеджер, например File Commander
  • Firefox, или другой браузер, который позволяет вам настроить прокси

Вам также потребуются некоторые способы передачи файлов с вашего компьютера на телефон. USB-кабель в порядке. Я использовал папку синхронизации IBackup.

Найдите файл ovpn.key и файл конфигурации .ovpn, который вы создали выше, на рабочем столе и переместите их на внутреннюю память телефона или на SD-карту. Также переместите файл ключа .pem, предоставленный хостом вашего сервера. Вероятно, он находится в том же месте, что и ваш файл .ppk, который вы используете для аутентификации в PuTTy. Если вы его потеряли, вам придется создать еще один на панели инструментов Amazon EC2 или с любой службы хостинга сервера, которую вы используете.

При желании вы можете получить стандартный файл конфигурации .ovpn, который вы используете для подключения без SSH. Затем вы можете использовать VPN со всеми приложениями, а не только с браузером, и это полезно для устранения неполадок.

Настройка ConnectBot

Запустите ConnectBot на своем телефоне. Нажмите на три точки в верхнем правом углу и перейдите к «Управление Pubkeys». Снова нажмите точки на следующей странице и нажмите «Импорт». Это должно запустить файловый менеджер, который вы установили. Найдите файл .pem, который вы только что переместили на свой телефон, и выберите его. Теперь он должен появиться в списке открытых ключей с красным замком рядом с ним. Нажмите на него, чтобы он стал зеленым. Нажмите кнопку «Назад», чтобы вернуться на главную страницу ConnectBot.

connectbot

В нижнем поле терминала рядом с «ssh» введите свои данные SSH. Это должно выглядеть так:

ec2-user@<your-server-IP>:22

Замените на IP-адрес вашего сервера OpenVPN. Нажмите клавишу ввода, чтобы войти в SSH на вашем сервере. Все это должно быть сохранено, чтобы вам больше не приходилось вводить его снова, но в будущем вам может понадобиться снова включить открытый ключ.

После успешного подключения снова нажмите три точки и отключитесь. Ваш профиль должен быть сохранен на главном экране ConnectBot. Нажмите и удерживайте ее, чтобы открыть контекстное меню, и нажмите «Изменить порт вперед». На следующей странице нажмите на три точки и выберите «Добавить порт вперед».

Назовите это как хотите. Установите для параметра «Тип» значение «Динамический» (SOCKS) и для порта источника значение 8080 (или что-либо еще в строке socks-proxy вашего файла конфигурации OpenVPN). Нажмите «Создать порт вперед».

ConnectBot готов к работе, но мы пока не будем подключаться. Давайте сначала установим OpenVPN.

Настройка OpenVPN для Android

Запустите OpenVPN для Android.

Нажмите квадратную кнопку со стрелкой вниз в правом верхнем углу, чтобы импортировать профиль. Перейдите к вашему файлу конфигурации .ovpn и выберите его. На следующей странице нажмите кнопку с надписью «Выбрать».

openvpn for android

На этот раз перейдите к файлу ovpn.key и выберите его. Нажмите желтую кнопку сохранения в правом нижнем углу.

Ваш новый профиль должен появиться в списке на главном экране приложения.

Прежде чем мы подключимся, давайте дважды проверим брандмауэр нашего сервера. Войдите в AWS, выберите Instances и выделите свой сервер OpenVPN. В поле Группы безопасности выберите тот, который используется для этого экземпляра. Щелкните правой кнопкой мыши и выберите «Редактировать правила для входящих подключений».

Добавьте пользовательские правила TCP для портов 22, 1194 и 8080, настраивая их по мере необходимости для вашей личной конфигурации.

Теперь пришло время подключиться. Сначала откройте ConnectBot. Нажмите на профиль, который мы только что создали для SSH, на ваш сервер. Убедитесь, что pubkey включен, иначе вы получите ошибку о пароле. После успешного подключения переключитесь на приложение OpenVPN. Нажмите на свой профиль там, чтобы подключиться.

openvpn ssh android success

В конце журнала OpenVPN, который появляется при подключении, вы должны увидеть сообщение «CONNECTED, SUCCESS».

Обратите внимание: поскольку мы используем те же файлы .pem и .key, что и на нашем компьютере, вы можете использовать эти учетные данные только на одном устройстве одновременно. Сначала убедитесь, что вы не подключены на своем компьютере. Если вы хотите подключиться одновременно на нескольких устройствах, вам нужно будет сгенерировать новые учетные данные (.key и .pem) для каждого.

Настройте Firefox для использования прокси

Наконец, нам нужно настроить Firefox для использования прокси. В Chrome и Safari для мобильных устройств нет параметров настройки прокси-сервера, поэтому мы рекомендуем Firefox. Вы можете попробовать настроить прокси в настройках Wi-Fi, но тогда вам придется менять их каждый раз, когда вы хотите подключиться без прокси.

firefox proxy config

В строке URL Firefox введите «about: config». В строке поиска на этой странице введите «network.proxy». Это затронет все области, которые нас интересуют. Введите следующие параметры в указанные поля:

  • network.proxy.socks: 127.0.0.1
  • network.proxy.socks_port: 8080 (или что-то, что вы установили в конфигурации OpenVPN и ConnectBot)
  • network.proxy.type: 1

Это должно направлять трафик браузера Firefox через OpenVPN и SSH. Теперь вы можете просматривать веб-страницы с мобильного устройства через VPN, не опасаясь глубокой проверки пакетов!

Если вы хотите подключиться через прокси-сервер SSH без OpenVPN, просто подключитесь по SSH к вашему серверу с помощью ConnectBot и не подключайтесь с помощью OpenVPN. И наоборот, вы можете импортировать ваш основной файл конфигурации .ovpn не SSH в приложение OpenVPN и подключиться к нему без SSH-прокси.