LINUX.ORG.RU
ФорумAdmin

Как настроить прокси к openvpn в докере

 , , ,


0

2

Я падаю в вашу немилость. Я просто не знаю что делать и как дебажить такие вещи в принципе т.к. я немного далек от всего этого. У меня есть openvpn клиент, он работает в докере. Мне нужно уметь подключаться к этому openvpn контейнеру через socks5 прокси.

Я гуглил. Задача не то чтобы нова и решения уже даже кое-какие есть. Конкретно в моем примере создается через docker-compose 2 контейнера (openvpn и dante), контейнеру с dante проставляется network_mode и все как бы работает. У меня даже был другой контейнер, который все это делал внутри в одиночку, но там точно такая же проблема. Так вот, прокси, которая получается на выходе работает только на локальном компьютере (на котором запущен докер).

Т.е если сделать curl -x socks5://localhost:1080 ifconfig.me, то запрос пройдет и мне на экран выведется ip vpn’a. Но мне нужно чтобы этот прокси был доступен по всей локальной сети. Мне нужно уметь подкачаться к этому прокси и с других компьютеров. А если написать curl -x socks5://192.168.0.123:1080 ifconfig.me (даже на локальном компьютере), то не произойдет ничего вообще. Dante не покажет никаких логов, а запрос потом отвалится по таймауту.

2 контейнера, которые я использую сейчас:

Скачать мой docker-compose.yml и все необходимые файлы (кроме openvpn конфига, разумеется) можно тут https://files.catbox.moe/s2gmpw.zip и тут https://www.dropbox.com/scl/fi/1v9gf6y0xg41m9i5au9vo/reproduce_vpn.zip?rlkey=5izn0jcq0k8df3d1swbz5cfg8&dl=1 Все места, где было указано имя конфиг. файла я заменил на <OPENVPN_CONFIG_FILE>



Последнее исправление: flares (всего исправлений: 1)

Короче тс"у надо создать прокси чтоб следующим хопом был овпн клиент.

Да все можно в 1 контейнере. Главное чтоб ответы с порта прокси в инторнет НЕ роутить в овпн.

Bers666 ★★★★★
()
Ответ на: комментарий от Jameson

ну сервер это то к чему подключается клиент. Я настроил на удаленном сервере openvpn, мне дали конфигурацию с которой нужно к нему подключаться. Подключаюсь я к нему в докер контейнере. Мне нужно к докер контейнеру, где запущен клиент openvpn, подключить прокси сервер, чтобы я мог, например вставить в firefox в настройках подключение через socks5 прокси и чтоб firefox как бы «работал через vpn». Поэтому и «подключиться к клиенту». Не знаю, может формулировка неудачная.

flares
() автор топика

Отлаживать это следует tcpdump’ом в самих контейнерах. Скорее всего, у вас проблема с маршрутизацией — ответы на локальные пакеты маршрутизируются через VPN-интерфейс, из-за чего локальный клиент их не получает.

Решение — правильно настроить маршрутизацию, например, добавив маршруты до локальной сети статически, а если нужно подключаться с разных, заведомо неизвестных адресов, то настроить policy routing обоих интерфейсов.

ValdikSS ★★★★★
()
Ответ на: комментарий от sinaps

на самой машине где запущен докер и в контейнере с dante эта команда ничего не вывела. Просто netstat без grep выводит пустую таблицу

контейнер с openvpn образ основан на alpine и там у меня не получилось установить sockstat, но я загуглил альтернативу, которая может быть выводит ту же информацию

/ # netstat -nat | grep LISTEN
tcp        0      0 172.22.0.2:1080         0.0.0.0:*               LISTEN      
tcp        0      0 127.0.0.11:38129        0.0.0.0:*               LISTEN      
tcp        0      0 fe80::42:acff:fe16:2:1080 :::*                    LISTEN
flares
() автор топика
Ответ на: комментарий от vel

Не знаю то я сделал или нет. Внутри контейнера с openvpn и контейнера с dante команды выводят один и тот же результат

/ # iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
/ # route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.8.0.1        128.0.0.0       UG    0      0        0 tun0
0.0.0.0         172.22.0.1      0.0.0.0         UG    0      0        0 eth0
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
128.0.0.0       10.8.0.1        128.0.0.0       UG    0      0        0 tun0
<ip адрес vpn>  172.22.0.1      255.255.255.255 UGH   0      0        0 eth0
172.22.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0
flares
() автор топика
Ответ на: комментарий от flares

Похоже что на 192.168.0.123:1080 прокси соединений принимать даже не пытается.

sockd.conf

На каком сетевом интерфейсе и порту обслуживаем socks клиентов

internal: eth0 port = 1080

С какого IP или интерфейса выходим во внешний мир

external: tun0

Попробуйте internal: 0.0.0.0 port = 1080

sinaps
()
Ответ на: комментарий от flares

В этой таблице нет маршрута в сеть 192.168.0.0/24 из которой приходят запросы к прокси.

там должна быть строка

192.168.0.0 172.22.0.1 255.255.255.0 ... eth0

Как это сделать в докере - хз. Я им не пользуюсь.

Наверно в документации есть описание процесса добавления статических маршрутов.

Если оно не заработает после добавления марщрута, то нужно смотреть правила iptables на хосте с докером.

vel ★★★★★
()