June 10, 2022

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

Вся представленная информация несёт лишь ознакомительный характер и не призывает вас к действиям нарушающих закон! Мы помогаем вам защитить свои конфиденциальные данные.
Приветствуем всех участников нашего проекта "BLACK CRD"!

Не забудь вступить и подписаться:

Если вы с нами, то вы уже в какой то степени защищены.

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

Если вы планируете подключаться к 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 поддерживает их обе.

Как проверить, что подключение к 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

https://t.me/blackcardpro

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 две половинки — основная ОС и шлюз.

Можно использовать 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, подключение может происходить не с первого раза, а соединение может быть медленным и нестабильным.

Пока я пишу для тебя новую статью, можешь почитать:

https://t.me/+fuTrkEzR5ThjMGYy

и посетить наш чат:
https://t.me/blackcardpro