LINUX.ORG.RU

Ищу гибрид клиента OpenVPN и прокси-сервера

 , , ,


0

1

Иногда нет надобности заворачивать вообще весь трафик в VPN, и достаточно бывает просто сделать HTTP- или SOCKS-прокси, чтобы управлять трафиком каждого приложения в отдельности. Иногда VPN'ов несколько, и чтобы они ужились и работали, без плясок с бубном и чтения документации просто не обойтись. Поэтому приходится либо прятать клиент OpenVPN в виртуалки или контейнеры, либо мудрить с настройками маршрутизации, чтобы направить трафик в нужных направлениях.

Если так подумать, использование tun/tap — явный оверкил. Пользовательский процесс клиента OpenVPN принимает данные по сети, потом их режет-комбинирует, пихает в ядро. Оттуда пакеты выпрыгивают в локальный прокси-сервер, который потом снова... В общем, лишнее. К тому же, необходимость использования /dev/net/tun вынуждает выдавать контейнеру CAP_NET_ADMIN.

Теоретически, должно быть возможно эдакое скрещивание OpenVPN, юзерспейсной реализации TCP/UDP и какого-нибудь прокси-сервера. Без использования tun/tap.

Такое уже есть?

★★★★★

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

netfilter REDIRECT. shadowsock-redir как локальный проки + redsocks в одном флаконе.
А без лишних прыжков kernelspace/userspace вроде только wireguard умеет (но у меня до него руки ещё не доходили).
UPD: ещё можно в proxychains-ng и прочие LD_PRELOAD хаки.

snizovtsev ★★★★★
()
Последнее исправление: snizovtsev (всего исправлений: 2)
Ответ на: комментарий от ptah_alexs

настрой shadowsocks

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

Shadowsocks — самое близкое по духу к моей хотелке. Но меня просто не пустят его на той стороне запускать.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от snizovtsev

wireguard

Это всё предполагает контроль за другой, удалённой стороной. А мне просто клиентские сертификаты выдают и логин-пароль. И я не хочу совать в чужую сеть свою машину. Например, не хочу, чтобы мне ssh брутили. Мало ли что. Неприятно. Так что я делаю прокси, через который хожу на закрытые ресурсы.

ещё можно в proxychains-ng и прочие LD_PRELOAD хаки.

Нет проблем с работой через прокси. Проблема в том, как поднять этот прокси.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от mos

а (Open)VPN - нет?

Его настраивают и поддерживают админы той сети, к которой я подключаюсь. Не я. Не думаю, что они мне рутовый доступ дадут. Начальство их за такое поувольняет за профнепригодность.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

так вопрос должен звучать так - чем заменить клиент опенвпн что ли?? чтобы он был совместим с официальным, но делал что-то по-другому?

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

так вопрос должен звучать так - чем заменить клиент опенвпн что ли??

В этой формулировке не хватает деталей, но в целом направление верное.

чтобы он был совместим с официальным, но делал что-то по-другому?

Да. Хочу, чтобы он не требовал доступа к /dev/net/tun. В Docker контейнере такое не работает, пока не выдашь ему особые права. Не хочу давать лишние права.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от mos

клиент опенвпн

Поправил титульное сообщение.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

В этой формулировке не хватает деталей

дык ты их дал ещё меньше!)

что-то уж больно упорото. сделал бы несколько tap'ов а уж потом решал где и что ограничить.

но если ты их виртуалках пускаешь то я пас. куда уж дальше-то?

mos ★★☆☆☆
()
Последнее исправление: mos (всего исправлений: 1)
Ответ на: комментарий от mos

сделал бы несколько tap'ов а уж потом решал где и что ограничить.

Tun/tap нужны, чтобы уметь туннелировать вообще любой сетевой трафик, от любого софта. А мне достаточно запустить dante. Если рассмотреть систему в целом, не вдаваясь в детали внутреннего устройства, эта связка ждёт соединений на локальном порту и подсоединяется к удалённому хосту. Тут не для чего требовать дополнительных прав. Но так как реализация использует OpenVPN клиент, появляется требование доступа к /dev/net/tun, например.

но если ты их виртуалках пускаешь то я пас. куда уж дальше-то?

А если убрать требование доступа к /dev/net/tun, можно просто как один пользовательский процесс пускать. Хочешь — просто на хосте, хочешь — в контейнере.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

а, дошло.
ты хочешь чтобы сеть в компе была не стеком (OSI/TCP) а монолитом))
чтобы dante прямо к удаленной сети подключался (а еще лучше чтоб прям из ethernet карточки торчал сокс прокси)))

ну тогда видимо придется такой клиент openvpn написать/найти... но учитывая, что смысл впн клиента как раз дать доступ любым приложениям на 2/3 уровне, последнее представляется весьма маловероятным.

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

ты хочешь чтобы сеть в компе была не стеком (OSI/TCP) а монолитом))
чтобы dante прямо к удаленной сети подключался (а еще лучше чтоб прям из ethernet карточки торчал сокс прокси)))

Передёргивание какое-то уже. Как я уже писал, хочется некое приложение, которое принимает конфиг openvpn, коннектится к openvpn серверу, договаривается с ним, локально открывает порт и обрабатывает подключения к нему socks-клиентов.

ну тогда видимо придется такой клиент openvpn написать/найти

Ага. Тред как раз о поиске такого клиента. В заголовке написано.

последнее представляется весьма маловероятным

У shadowsocks аналогичная идея. Только там сервер и протокол взаимодействия свой.

Такой подход позволяет выбросить kill-switch как лишнюю сущность: в случае отвала соединения трафик не пойдёт в обычный интернет. И не получится случайно отправить личный трафик через VPN — туда пойдёт только то, что явно направишь через прокси.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

хочется некое приложение, которое принимает конфиг openvpn, коннектится к openvpn серверу, договаривается с ним, локально открывает порт и обрабатывает подключения к нему socks-клиентов.

я ведь это и написал, практически дословно.

В заголовке написано.

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

У shadowsocks аналогичная идея. Только там сервер и протокол взаимодействия свой.

говоря маловероятно я имел в виду такой клиент к опенвпн.

может проще всё-таки подумать в сторону ограничения доступа к tun/tap только дантой, а не искать неведому зверушку? селинуксом там каким-нибудь

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

может проще всё-таки подумать в сторону ограничения доступа к tun/tap только дантой, а не искать неведому зверушку? селинуксом там каким-нибудь

Да проще openvpn+dante+dumb-init в контейнер засунуть. Это уже потом начинают приходить мысли об избыточности использованных инструментов. Напоминает анекдот:

Как вскипятить чайник? Налить воду, зажечь огонь, поставить чайник на огонь и подогреть до 100°С. А теперь новая задача: как вскипятить наполненный водой чайник? Выльем воду из чайника, чем сведем задачу к предыдущей.

i-rinat ★★★★★
() автор топика

юзерспейсной реализации TCP/UDP и какого-нибудь прокси-сервера. Без использования tun/tap. Такое уже есть?

Есть. https://en.wikipedia.org/wiki/Slirp

vodz ★★★★★
()

А зачем в мире быстрого интернета прокси в принципе? Для управления скоростью? (Это не отностися к VPN)

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 2)
Ответ на: комментарий от rumgot

А зачем в мире быстрого интернета прокси в принципе? Для управления скоростью?

Потому что скорость в слове «посредник» не при чём.

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

А зачем в мире быстрого интернета прокси в принципе?

Чтобы трафик, который должен пойти в частную сеть, не пошёл случайно в обычный интернет. Чтобы трафик, который не должен идти в частную сеть, не пошёл случайно туда.

i-rinat ★★★★★
() автор топика

Иногда VPN'ов несколько, и чтобы они ужились и работали, без плясок с бубном и чтения документации просто не обойтись

я неустанно повторяю - network namespaces

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

Нет. Там человек хочет защититься от прослушки на openvpn-сервере и заодно скрыть адрес этого openvpn-сервера от сайтов, к которым он решил подключаться. То есть, сделать цепочку длиннее.

А я хочу убрать лишние звенья в цепочке.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от Ja-Ja-Hey-Ho

Ssh-клиент очень неустойчиво держит связь с openvpn-сервером. Очень быстро отваливается, даже аутентификацию не проходит.

i-rinat ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.