Как подключаться к OpenVPN через прокси или Tor


Оглавление

1. Особенности подключения OpenVPN через HTTP прокси

1.1 Используйте протокол TCP

1.2 Использование прокси скажется на производительности сети

1.3 Настройка Squid

2. Как проверить, что подключение к OpenVPN действительно выполняется через прокси

2.1 Журналы клиента и сервера

2.2 Маршрут трафика

3. Подключение OpenVPN через HTTP прокси без аутентификации

4. Подключение OpenVPN через HTTP прокси с Basic аутентификацией

5. Подключение OpenVPN через HTTP прокси с NTLM аутентификацией

6. Подключение OpenVPN через HTTP прокси с Digest аутентификацией

7. Подключение OpenVPN через SOCKS прокси

8. Подключение OpenVPN через сеть Tor

8.1 Подключение к серверу OpenVPN через Tor​ (SOCKS)

8.2 Подключение к серверу OpenVPN через Tor (HTTP прокси через Privoxy)

9. Использование VPN в Tails

10. Бесплатные VPN с подключением через прокси и Tor


Эта статья — список рецептов и советов так или иначе связанных с подключением к серверу OpenVPN через прокси-сервер. О том, как создать свою собственную сеть OpenVPN смотрите «Инструкцию по настройке сервера и клиента OpenVPN». Сборник разнообразных советов по применению OpenVPN сети вы найдёте в материале «Продвинутое использование OpenVPN».

Особенности подключения OpenVPN через HTTP прокси

1) Используйте протокол TCP

Смотрите также:

Если вы планируете подключаться к OpenVPN через HTTP/HTTPS прокси, то используйте протокол TCP вместо UDP, в противном случае вы столкнётесь с ошибкой:


Options error: --http-proxy MUST be used in TCP Client mode (i.e. --proto tcp-client)

Даже если вы добавите опцию «—proto tcp-client» к команде подключения к OpenVPN серверу работающему на UDP, то вы успешно подключитесь к прокси-серверу, но попытки подключиться к OpenVPN окажутся неудачными. Из-за ошибки клиент будет постоянно пытаться переподключиться к OpenVPN:

2021-11-06 09:41:10 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
2021-11-06 09:41:10 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
2021-11-06 09:41:10 TCP/UDP: Preserving recently used remote address: [AF_INET]157.245.118.66:44220
2021-11-06 09:41:10 Socket Buffers: R=[131072->131072] S=[16384->16384]
2021-11-06 09:41:10 Attempting to establish TCP connection with [AF_INET]157.245.118.66:44220 [nonblock]
2021-11-06 09:41:10 TCP connection established with [AF_INET]157.245.118.66:44220
2021-11-06 09:41:10 Send to HTTP proxy: 'CONNECT 185.117.153.79:5300 HTTP/1.0'
2021-11-06 09:41:10 Send to HTTP proxy: 'Host: 185.117.153.79'
2021-11-06 09:41:10 HTTP proxy returned: 'HTTP/1.1 200 Connection established'
2021-11-06 09:41:12 TCP_CLIENT link local: (not bound)
2021-11-06 09:41:12 TCP_CLIENT link remote: [AF_INET]157.245.118.66:44220
2021-11-06 09:41:13 Connection reset, restarting [0]
2021-11-06 09:41:13 SIGUSR1[soft,connection-reset] received, process restarting
2021-11-06 09:41:13 Restart pause, 5 second(s)
2021-11-06 09:41:18 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
2021-11-06 09:41:18 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
2021-11-06 09:41:18 TCP/UDP: Preserving recently used remote address: [AF_INET]157.245.118.66:44220
2021-11-06 09:41:18 Socket Buffers: R=[131072->131072] S=[16384->16384]
2021-11-06 09:41:18 Attempting to establish TCP connection with [AF_INET]157.245.118.66:44220 [nonblock]
2021-11-06 09:41:18 TCP connection established with [AF_INET]157.245.118.66:44220
2021-11-06 09:41:18 Send to HTTP proxy: 'CONNECT 185.117.153.79:5300 HTTP/1.0'
2021-11-06 09:41:18 Send to HTTP proxy: 'Host: 185.117.153.79'
2021-11-06 09:41:18 HTTP proxy returned: 'HTTP/1.1 200 Connection established'
2021-11-06 09:41:20 TCP_CLIENT link local: (not bound)
2021-11-06 09:41:20 TCP_CLIENT link remote: [AF_INET]157.245.118.66:44220
2021-11-06 09:41:20 Connection reset, restarting [0]
2021-11-06 09:41:20 SIGUSR1[soft,connection-reset] received, process restarting
2021-11-06 09:41:20 Restart pause, 5 second(s)

2) Использование прокси скажется на производительности сети

Использование прокси снизит скорость передачи трафика в OpenVPN сети и также увеличит пинг.

3) Настройка Squid

Настройка прокси-сервера Squid для работы с OpenVPN не требует каких-то специальных опций. Например, для использования Squid в качестве прокси-сервера для подключения к OpenVPN без аутентификации достаточно указать следующие строки в конфигурационном файле (замените порт 44220 любой другой):

http_port 44220
acl portA localport 44220
http_access allow portA

Дополнительно вы можете настроить Basic или Digest аутентификацию — OpenVPN поддерживает их обе.

Смотрите также: Как создать и настроить прокси-сервер Squid

Как проверить, что подключение к OpenVPN действительно выполняется через прокси

1) Журналы клиента и сервера

Журналы клиента и сервера должны содержать многочисленные упоминания IP и порта прокси-сервера.

К примеру, исходные данные такие:

  • прокси: 157.245.118.66:44220
  • сервер OpenVPN: 185.117.153.79:5300

Пример журнала клиента: как можно увидеть, подключение осуществляется с прокси 157.245.118.66:44220; на прокси сервер отправляются команды, содержащие упоминания VPN сервера 185.117.153.79:5300:

2021-11-06 11:07:25 TCP/UDP: Preserving recently used remote address: [AF_INET]157.245.118.66:44220
2021-11-06 11:07:25 Socket Buffers: R=[131072->131072] S=[16384->16384]
2021-11-06 11:07:25 Attempting to establish TCP connection with [AF_INET]157.245.118.66:44220 [nonblock]
2021-11-06 11:07:26 TCP connection established with [AF_INET]157.245.118.66:44220
2021-11-06 11:07:26 Send to HTTP proxy: 'CONNECT 185.117.153.79:5300 HTTP/1.0'
2021-11-06 11:07:26 Send to HTTP proxy: 'Host: 185.117.153.79'
2021-11-06 11:07:27 HTTP proxy returned: 'HTTP/1.1 200 Connection established'
2021-11-06 11:07:29 TCP_CLIENT link local: (not bound)
2021-11-06 11:07:29 TCP_CLIENT link remote: [AF_INET]157.245.118.66:44220
2021-11-06 11:07:29 TLS: Initial packet from [AF_INET]157.245.118.66:44220, sid=ae11f46a 0d3d585c

В журнале OpenVPN сервера написано, что подключение пришло от IP адреса прокси:

2021-11-06 11:13:07 us=508241 TCP connection established with [AF_INET]157.245.118.66:47930

2) Маршрут трафика

При использовании OpenVPN подключения все маршруты перенаправляются через IP OpenVPN сервера. Если же подключение выполняется через прокси, то в настройках маршрута пользователя все соединения отправляются через IP адрес прокси сервера.

Команда для вывода маршрутов:

ip route

Пример маршрутов с выключенным OpenVPN подключением:

default via 192.168.1.1 dev wlo1 proto dhcp metric 600
192.168.1.0/24 dev wlo1 proto kernel scope link src 192.168.1.44 metric 600

Посмотрим маршруты на клиентской машине подключённой к OpenVPN серверу:

ip route

Как можно увидеть, в маршрутах упоминается IP адрес 157.245.118.66, который является адресом прокси-сервера, а не сервера OpenVPN:


0.0.0.0/1 via 10.8.1.17 dev tun0 
default via 192.168.1.1 dev wlo1 proto dhcp metric 600 
10.8.1.1 via 10.8.1.17 dev tun0 
10.8.1.17 dev tun0 proto kernel scope link src 10.8.1.18 
128.0.0.0/1 via 10.8.1.17 dev tun0 
157.245.118.66 via 192.168.1.1 dev wlo1 
192.168.1.0/24 dev wlo1 proto kernel scope link src 192.168.1.44 metric 600 

Смотрите также: Практика настройки сетевых маршрутов: выбор подключения, используемое для Интернета; одновременное использование нескольких подключений для разных целей

Подключение OpenVPN через HTTP прокси без аутентификации

Для подключения к удалённому хосту через HTTP необходимо использовать опцию —http-proxy и указать при ней по крайней мере два аргумента: адрес сервера и номер порта.

К примеру, команда для подключения к OpenVPN серверу напрямую выглядит так:

sudo openvpn client2.ovpn

В ней опущена опция —config которая указывает на конфигурационный файл. Но при использовании других опций необходимо указать —config поскольку программа не сможет правильно интерпретировать аргументы. Таким образом, следующая команда идентична предыдущей:

sudo openvpn --config client2.ovpn

Для подключения к OpenVPN через прокси используется команда вида:

sudo openvpn --config client2.ovpn --http-proxy IP-ПРОКСИ ПОРТ-ПРОКСИ

Пример команды для подключения к OpenVPN через прокси (адрес прокси 157.245.118.66 и номер порта 44220) без проверки имени пользователя и пароля:

sudo openvpn --config client2.ovpn --http-proxy 157.245.118.66 44220

Значение опции —http-proxy можно указать в конфигурационном файле .ovpn, например, если в файле client2.ovpn указать следующую строку:

http-proxy IP-ПРОКСИ ПОРТ-ПРОКСИ

Например:

http-proxy 157.245.118.66 44220

То для подключения к OpenVPN через прокси можно использовать следующую команду — указывать параметры прокси в командной строке уже не нужно:

sudo openvpn client2.ovpn

Подключение OpenVPN через HTTP прокси с Basic аутентификацией

Для базовой аутентификации (кроме необходимых в любом случае IP адреса и порта прокси) требуются имя пользователя и пароль для доступа к прокси серверу.

Имя пользователя и пароль прокси нельзя указать в командной строке. Эти данные должны быть либо помещены в файл с двумя строчками:

ПОЛЬЗОВАТЕЛЬ
ПАРОЛЬ

Например, имя пользователя и пароль помещены в ФАЙЛ-АУТЕНТИФИКАЦИИ.txt, тогда в качестве третьего аргумента опции —http-proxy нужно указать путь до этого файла и команда подключения через прокси будет примерно следующей:

sudo openvpn --config client2.ovpn --http-proxy IP-ПРОКСИ ПОРТ-ПРОКСИ ФАЙЛ-АУТЕНТИФИКАЦИИ.txt

Например:

sudo openvpn --config client2.ovpn --http-proxy 157.245.118.66 44220 authfile.txt

Имя пользователя и пароль для аутентификации на прокси-сервере можно поместить в файл .ovpn используя следующий синтаксис:

<http-proxy-user-pass>
ПОЛЬЗОВАТЕЛЬ
ПАРОЛЬ
</http-proxy-user-pass>

Выше показано, как в конфигурационный файл добавить значение опции —http-proxy, таким образом, все настройки подключения к прокси можно собрать в файле .ovpn следующим образом:



http-proxy IP-ПРОКСИ ПОРТ-ПРОКСИ
<http-proxy-user-pass>
ПОЛЬЗОВАТЕЛЬ
ПАРОЛЬ
</http-proxy-user-pass>

Если вы не указали ФАЙЛ-АУТЕНТИФИКАЦИИ.txt или секцию <http-proxy-user-pass>…</http-proxy-user-pass>, то имя пользователя и пароль подключения к прокси у вас будет запрошен в консоли.

Подключение OpenVPN через HTTP прокси с NTLM аутентификацией

В качестве четвёртого аргумента опции —http-proxy можно указать метод аутентификации, им может быть один из none, basic или ntlm.

Для NTLM аутентификации укажите ntlm, например:

sudo openvpn --config client2.ovpn --http-proxy 157.245.118.66 44220 authfile.txt ntlm

Подключение OpenVPN через HTTP прокси с Digest аутентификацией

Вы могли обратить внимание, что нет опции для HTTP Digest аутентификации, но этот вид аутентификации поддерживается. Она включается с помощью флагов auto или auto-nct, который должен заменить аргумент ФАЙЛ-АУТЕНТИФИКАЦИИ. То есть получается, что логин и пароль нужно будет указать в файле .ovpn или ввести вручную в консоли.

Настройки подключения к прокси с Digest аутентификацией в файле .ovpn:

http-proxy IP-ПРОКСИ ПОРТ-ПРОКСИ auto
<http-proxy-user-pass>
ПОЛЬЗОВАТЕЛЬ
ПАРОЛЬ
</http-proxy-user-pass>

Флаг auto делает так, что OpenVPN автоматически определяет метод аутентификации.

Флаг auto-nct (означает «no clear-text auth», то есть без аутентификации открытым текстом) инструктирует OpenVPN автоматически определить метод аутентификации, но отклонить слабые протоколы аутентификации, такие как HTTP Basic Authentication.

Примеры:

  • http-proxy proxy.example.net 3128
  • http-proxy proxy.example.net 3128 authfile.txt
  • http-proxy proxy.example.net 3128 stdin
  • http-proxy proxy.example.net 3128 auto basic
  • http-proxy proxy.example.net 3128 auto-nct ntlm

Подключение OpenVPN через SOCKS прокси

Для подключения к OpenVPN серверу через SOCKS прокси используется опция —socks-proxy. У неё один обязательный аргумент — это сервер. При желании можно указать порт (по умолчанию 1080) и файл аутентификации. Файл аутентификации — это файл, содержащий имя пользователя и пароль в 2 строки, или stdin может использоваться для запроса с консоли.

Подключение OpenVPN через сеть Tor

Поскольку сеть Tor использует протокол SOCKS, то можно было бы подумать, что подключение к OpenVPN через сеть Tor является всего лишь частным случаем подключения через SOCKS прокси, но на практике нужно помнить, что сеть Tor не передаёт UDP трафик. Но это только начало.

Вы не можете использовать Tor как прокси для OpenVPN если Tor запущен на той же машине, с которой вы пытаетесь подключиться к серверу VPN. Чтобы понять, почему такое подключение в принципе невозможно, рассмотрим, что происходит при использовании VPN.

Когда мы подключаемся к VPN (без прокси или Tor), то на локальном компьютере устанавливаются новые маршруты:

  • в маршруте по умолчанию весь трафик теперь идёт не на шлюз (роутер), а на IP адрес VPN сервера
  • чтобы не оказаться запертым (на IP адрес VPN сервера невозможно попасть, не попав на роутер), добавляется ещё один маршрут: «весь трафик для IP адреса VPN сервера теперь перенаправляется на роутер». То есть для IP адреса VPN сервера делается исключение.

В случае подключения к VPN через прокси (допустим, через Tor), то добавляются следующие маршруты:

  • первый как и раньше — весь трафик теперь идёт на IP адрес VPN сервера
  • а второй отличается — делается точно такое же исключение, но для IP адреса прокси сервера

Так вот, если прокси сервер находится на другом компьютере, то это работает без проблем.

Но вот если указан LOOPBACK (localhost) IP адрес прокси сервера, то получается следующий набор правил:

  • первое как обычно — весь трафик идёт на IP адрес VPN сервера
  • второе — делается исключение для IP адреса прокси, но ведь это 127.0.0.1, то есть localhost.

То есть система сама себя запирает. Да, возможно подключиться к VPN через Tor даже если служба Tor запущена на этом же самом компьютере. Но сразу после этого VPN добавляет необходимые для его работы маршруты, которые намертво запирают движение трафика — он не может выйти с компьютера.

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

Именно из-за этой причины у дистрибутива Whonix две половинки — основная ОС и шлюз. Подробности в статье «Как пользоваться Whonix (операционная система для анонимности, приватности и безопасности)».

Можно использовать Tor в качестве прокси для VPN как:

  • SOCKS прокси — в этом случае не понадобятся другие программы кроме Tor
  • HTTP прокси — кроме Tor нужен ещё Privoxy

Подключение к серверу OpenVPN через Tor​ (SOCKS)

На том компьютере, который будет выполнять роль прокси через Tor, установите пакет tor

На Debian, Kali Linux, Linux Mint, Ubuntu это делается командой:

sudo apt install tor

В Arch Linux, BlackArch, Manjaro установка выполняется командой

sudo pacman -S tor

По умолчанию служба tor разрешает входящие соединения только с localhost, то есть подключения с других компьютеров не принимаются.

Откройте файл /etc/tor/torrc

sudo gedit /etc/tor/torrc

и добавьте в него строку вида:

SOCKSPort ВНЕШНИЙ_IP:9050

Например:

SOCKSPort 192.168.1.39:9050

Запустите служб tor:

sudo systemctl start tor

Вы можете добавить tor в автозагрузку:

sudo systemctl enable tor

Теперь вы можете подключаться к серверу OpenVPN через Tor, запущенный на удалённом компьютере:

sudo openvpn --config client5.ovpn --socks-proxy 192.168.1.39 9050

Подключение к серверу OpenVPN через Tor (HTTP прокси через Privoxy)

Privoxy можно использовать в качестве переходника HTTP прокси → SOCKS прокси. То есть клиент OpenVPN будет подключаться к Privoxy как к HTTP прокси, а Privoxy будет перенаправлять трафик на Tor, который использует протокол SOCKS.

На том компьютере, который будет выполнять роль прокси через Tor, установите пакеты tor и privoxy

На Debian, Kali Linux, Linux Mint, Ubuntu это делается командой:

sudo apt install tor privoxy

В Arch Linux, BlackArch, Manjaro установка выполняется командой

sudo pacman -S tor privoxy

Для настройки Privoxy на компьютере, который будет выполнять роль прокси через Tor, в файл /etc/privoxy/config

sudo gedit /etc/privoxy/config

добавьте строку:

forward-socks5t / 127.0.0.1:9050 .

По умолчанию Privoxy принимает входящие соединения только с этого же самого компьютера, чтобы Privoxy начал принимать подключения из вне, замените строку

listen-address 127.0.0.1:8118

на

listen-address :8118

Если вы хотите, чтобы подключения принимались только из локальной сети, то укажите локальный IP адрес, например:

listen-address 192.168.1.20:8118

Запустите службы tor и privoxy:

sudo systemctl start tor privoxy

Вы можете добавить эти службы в автозагрузку:

sudo systemctl enable tor privoxy

По умолчанию privoxy прослушивает 8118 порт, также укажите IP адрес компьютера, на котором запущены privoxy и Tor, например:

sudo openvpn --config client5.ovpn --http-proxy 192.168.1.39 8118

Из-за специфики сети Tor, подключение может происходить не с первого раза, а соединение может быть медленным и нестабильным.

Использование VPN в Tails

Под статьёй об использовании Tails меня спросили, как в Tails подключаться к VPN через Tor.

Мало того, что невозможно использовать прокси с петлевым адресом (а эта проблема не решаема в принципе), так ещё и в самой Tails стоят ограничения. Например, команды запущенные с правами root не имеют доступа в сеть, а OpenVPN требует прав root.

То есть подключение к VPN серверу через Tor в Tails невозможно. Вообще в Tails использование VPN (например, чтобы подключиться через удалённый прокси сервер) либо невозможно в принципе, либо требует таких изменений системных настроек, что ОС теряет все свои специфические преимущества и фактически перестаёт быть Tails.

Если вы думаете о Tails и VPN, то вам стоит обратить внимание на Whonix, чтобы одновременно использовать Tor и VPN.

Бесплатные VPN с подключением через прокси и Tor

В статье «autovpn2 и autovpn3 — скрипты для автоматического подключения к бесплатным VPN» я упоминал, что скрипт autovpn3 (который ищет бесплатные VPN сервера и подключает компьютер через них), так вот, этот скрипт позволяет искать бесплатные VPN через прокси, а также скачивать их настройки и делать подключение через прокси.

Для того, чтобы программа все действия делала через прокси, отредактируйте в файле autovpn3.sh следующие настройки:

proxy=0 # замените на 1 если вы хотите искать VPN и подключаться к VPN через прокси
proxyIP='' # IP адрес прокси сервера
proxyPort=8080 # порт прокси сервера
proxyType='http' # тип прокси сервера, может быть socks или http

Помните, что по объяснённым выше причинам вы не можете использовать локально запущенный Tor в качестве прокси для подключения к VPN серверу.


Рекомендуется Вам:

One Comment to Как подключаться к OpenVPN через прокси или Tor

  1. инкогнито:

    А, почему именно privoxy? proxychains-ng + toriptables3 + autovpn3 рабочая связка на локальном компьютере?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *