LINUX.ORG.RU
ФорумAdmin

need HELP: VPN с доступом через разное сервеное ПО ( OpenVPN + (PPTPD or (xl2tpd + IPsec) ) + Radius )

 , , ,


0

1

Приветствую всех. Имеется готовая сеть:

Имеем следующее:

Есть виртуальная сеть поднятая посредством OpenVPN. Сеть состоит из 5 серверов: S1: WIP=1.1.1.1 Головной сервер, на котором стоит MySQL + Freeradius S2: WIP=2.2.2.2 Рядовой сервер как и оставшиеся три, к ним подключаются клиенты. На борту OpenVPN(tcp + udp) S3: WIP=3.3.3.3 S4: WIP=4.4.4.4 S5: WIP=5.5.5.5 *WIP - внешний IP сервера

На S1 запущен OpenVPN сервер, к которому подключаются все остальные сервера, подсеть 10.127.0.0/24 назовем её ServiceNet, сам сервер соответственно имеет IP=10.127.0.1, а остальные в соответствии со своим номером: (S2)IP=10.127.0.2; (S3)IP=10.127.0.3; (S4)IP=10.127.0.4; (S5)IP=10.127.0.5 Эта сеть сделана специально для управления серверами, а именно для работы серверов с Radius, сбора информации, и управления подключениями клиентов(а точнее их отключения).

Интерфейсы для ServiceNET на серверах: S1=tun0 S2=tun0 S3=tun0 S4=tun0 S5=tun0

Для сервера S1 это все,на нем более никаких интерфейсов не будет. На серверах S2-S5 идет одинаковое распределение интерфейсов под конкретные цели:

  • tun1 - OpenVpn сервер по протоколу tcp
  • tun2 - OpenVpn сервер по протоколу udp
  • tun3 - reserved
  • tun4 - reserved

Но у каждого сервера для клиентов своя подсеть:

  • S2:
    • tun1 - 10.128.2.0/25
    • tun2 - 10.128.2.127/25
  • S3:
    • tun1 - 10.128.3.0/25
    • tun2 - 10.128.3.127/25
  • S4:
    • tun1 - 10.128.4.0/25
    • tun2 - 10.128.4.127/25
  • S5:
    • tun1 - 10.128.5.0/25
    • tun2 - 10.128.5.127/25

Как вы наверно заметили третий октет соответствует номеру сервера, это сделано для определения какой клиент с какого сервера. Сразу отмечу что клиенты вынесены в отдельную 12-ти битную подсеть, не спроста, 10.127. нам еще пригодиться чуть ниже.

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

Идем далее... Каждый сервер соединен с другим по типу «звездочка» (или кому понятнее: «каждый к каждому»), назовем эту сеть RouteNet, т.к. это название наиболее полно отражает её предназначение =). Не буду описывать логику по которой определяется какой сервер к какому подключается, опишу лишь то что считаю нужным. Соединяются они с помощью OpenVPN типа p2p, что позволяет избавиться от накладных расходов по трафику и авторизации. На каждое такое соединение каждый сервер запускает свою копию OpenVPN (клиент/сервер) с отдельным интерфейсом и отдельными (не пересекающимися адресами). При соединении серверов Sx и Sy, серверу Sx будет присвоен IP=10.127.y.x а серверу Sy будет присвоен IP=10.127.x.y. Тогда при соединении S2 и S3 серверов они получат следующие IP:

  • S2(IP)=10.127.3.2
  • S3(IP)=10.127.2.3

Тем самым когда вся RouteNet соединиться, получаем удобное распределение адресов для маршрутизации. К примеру чтобы с S2 перенаправить трафик клиента на сервер S4 достаточно будет направить его на IP 10.127.2.4, соответственно для направления на S3 или S5, отправляем на адреса 10.127.2.3 и 10.127.2.5.

Поначалу может показаться сложным, но эту схему главно понять =) Теперь когда пользователь подключается к сети, специально написанная прога берет из базы маршрут для него и прописывает на необходимые сервера. Опишу как это происходит.

на каждом сервере есть таблица в iproute2 следующего содержания:

ip ru list 0: from all lookup local 32762: from all fwmark 0x5 lookup to_srv5 32763: from all fwmark 0x4 lookup to_srv4 32764: from all fwmark 0x3 lookup to_srv3 32765: from all fwmark 0x2 lookup to_srv2 32766: from all lookup main 32767: from all lookup default

В которой конечно нету правила для самого себя (т.е. на сервере S2 не будет строки from all fwmark 0x2 lookup to_srv2).

ну и для каждой таблицы (to_srv2/to_srv3/etc..) прописан маршрут по умолчанию:

#ip ro ist table to_srv3 default via 10.127.2.3 dev tun7

это все настраивается единожды, при помощи самописного скрипта или ручками, не суть важно.

Теперь лишь остается помечать пакеты, для отправки, пакеты не помеченные шлются в соответствии с адресом назначения по правилам ip ro list А теперь пояснительный пример:

Клиент user1 подключился к S2 и для него, в базе, записан маршрут S2-S5-S3. Что означает, что его трафик будет перенаправляться с S2 на S5, а с S5 на S3 и только потом выходить к адресу назначения. Обратный путь трафика точно такой же. После подключения на S2 добавляется правило:

iptables -t mangle -A PREROUTING -s 10.128.2.2/32 -j MARK --set-mark 5

на S5 добавляется два правила:

iptables -t mangle -A PREROUTING -s 10.128.2.2/32 -j MARK --set-mark 3 iptables -t mangle -A PREROUTING -d 10.128.2.2/32 -j MARK --set-mark 2

на S3 добавляется одно хитрое правило которое пришлось чуть чуть поискать:

iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate SNAT --ctorigsrc 10.128.2.2 -j MARK --set-mark 5

и трафик успешно гуляет от клиента и к клиенту.

таким образом добавляя динамические маршруты, мы гибко рулим трафиком и эффективно используем сеть. Не хватает лишь того из-за чего, я и обратился к вам.

Встала задача, чтоб клиенты могли пользоваться не только OpenVPN, а еще и стандартными средствами в Win/Mac/nix и мобильных устройствах. Я пока что вижу перспективу только у PPTPd или xl2tpd+ipsec, больше ничего не нашел, что может взаимодействовать с этими клиентскими платформами без установки доп.ПО. Больше волнует следующее:

  • на PPTPD для каждого клиента создается PPPx интерфейс, интересует во первых лимит этих интерфейсов, и что если у меня при этом будет 200 созданных tunX интерфейсов?
  • возможно ли как то заставить PPTPD не создавать новые интерфейсы, а работать со всеми клиентами на одном PPP0 интерфейсе или и того лучше юзать /dev/tun (в мане на pppd есть конфиг ttyname не поможет?)
  • Плагин radius работает ли с сессиями и шлет данные аккаунтинга?
  • Как можно отключить клиента от сервера НЕ грубыми методами типа iptables -s x.x.x.x -j REJECT/DROP ?

Пока что не удалось успешно настроить (xl2tpd/l2tpd)+ipsec а тем более подцепить к нему авторизацию Radius, но интересует следующее:

  • Имеется ли возможность создания одного интерфейса pppX для всех клиентов, или же как PPTPD будет создаваться на каждого клиента свой интерфейс pppX?
  • Имеется ли возможность Radius сессиий и аккаунтинга?
  • Как отключать клиентов не грубыми методами?

И конечно же выслушаю ваши предложения ПО которое поддерживается клиентскими платформами стандартно и может быть интегрировано в вышеописанную сеть.

Если напишете свой pppd, то, может, он будет работать со всеми на одном tun-интерфейсе. А так, это извращение, когда на нескольких клиентов один интерфейс и сервер перестаёт быть маршрутизатором.

Лимит ppp-интерфейсов, ЕМНИП, достаточно большой, около 2 или 4 тысяч.

Radius плугин есть, что то он умеет, посмотрите.

Отключение клиента — это kill соответствующего pppd-процесса.

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

А так, это извращение, когда на нескольких клиентов один интерфейс и сервер перестаёт быть маршрутизатором.

Ну в этом плане, вынужден не согласиться... У OpenVPN в при использовании топологии сети «subnet» все клиенты идут через один интерфейс, точно так же как через ethX из локалки... Вполне удобно для маршрутизации iproute2 + iptables.

Лимит ppp-интерфейсов, ЕМНИП, достаточно большой, около 2 или 4 тысяч.

А вот за эту ценную инфу огромное спасибо, теперь знаю что она меня точно устраивает!

Отключение клиента — это kill соответствующего pppd-процесса.

Это очень и очень печально =( придется как то следить кто каким процессом обрабатывается....

Спасибо за ответ.

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

Встала задача, чтоб клиенты могли пользоваться не только OpenVPN, а еще и стандартными средствами в Win/Mac/nix и мобильных устройствах

SoftEther VPN

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

SoftEther VPN

Я вот тоже сначала, обрадовался когда узнал об этой чудо штуке... Только вот объясни мне милый человек, как даже если создать каскадные сервера:

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

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

KIR_PRO
() автор топика
Ответ на: комментарий от KIR_PRO

https://www.softether.org/4-docs/1-manual/2._SoftEther_VPN_Essential_Architec...

http://www.vpnusers.com/viewtopic.php?f=7&t=2703

Очень частично, аккаунтинга судя по всему еще нет. Можешь спросить или возмозможно даже попробовать постучаться MikeDM насколько я знаю он большой сторонник SoftEther и что-то подскажет, конкретно по твоим вопросам. Вообще не вижу проблемы поднять все в виртуалке, да посмотреть, это будет гораздо проще чем выискивать информацию по кусочкам. Да к слову, я недавно случайно узнал о существовании tinc судя по всему интересная замена openvpn. Впрочем лично для меня киллер фича openvpn это поддержка polarssl и наличии пакетов с ним для openwrt.

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

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

Дак итак делал уже... SoftEther вообще не создает интерфейсов никаких, он сам все решает, какому трафику куда пойти. Его в этом плане можно смело назвать виртуальным сервером.

Да к слову, я недавно случайно узнал о существовании tinc судя по всему интересная замена openvpn

Я тоже пока читал про различные VPN натыкался на статьи о нем.

Еще вопросик: xl2tpd+ipsec трафик могут резать некоторые првайдеры/роутеры? И что, вероятно более часто будет резаться провами/роутерами, pptpd или ipsec ?

p.p.s. первый раз участвую в беседе на лоре, ранее только пролистывал темы в поисках ответов, не обращая внимания на суть прочих сообщений. Приятно, что контингент форума, имеет привычку общаться развернуто, не жалея лишней минуты на изложение мысли! Тфу-тфу-тфу, чтоб не сглазить ;)

KIR_PRO
() автор топика
Ответ на: комментарий от anonymous_sama

да да я тут =) у меня с десяток вертится SEVPN инстансов. годная штука. Но я не использую радиус.

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

назнатьчать IP через Radius (он не захотел есть данные от радиуса)

это делает DHCP сервер, либо встроенный ли придется свой использовать.

PS да там и DHCP сервер свой внутри. шайтан сервис.

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

Только если у мобильных которые режут GRE (сам не встречал). Да и пожалуй c любым проводным домашним интернетом сегодня это врядли грозит. (у вас там что обычный домашний провайдер с тарифом для офисов что-ль?)
Да вообще посмотри в сторону GRE over IPSec и соответствующего оборудования.

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

Посмотрел/вспомнил поточнее. В общем, раньше нужно было в исходниках ядра поднимать кол-во сетевых устройств (интерфейсов pppX), сейчас не нужно, там 32 тыс. И нужно было при компиляции ядра задавать кол-во pty побольше (параметр CONFIG_UNIX98_PTY_COUNT). Раньше там был максимум 2048 (или 4096, если пропатчить исходник ядра). Сейчас этого параметра, вроде как, нет.

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

MikeDM А как то возможно динамически рулить маршрутами из сторонник программ/скриптов? Как например у меня в первом посте описано с Openvpn?

anonymous_sama Увы но про оборудование можно забыть.... т.к. сервера находятся в абсолютно разных местах, и к ним коннектятся из инета...

mky Огромное спасибо!

KIR_PRO
() автор топика
Ответ на: комментарий от KIR_PRO

MikeDM А как то возможно динамически рулить маршрутами из сторонник программ/скриптов? Как например у меня в первом посте описано с Openvpn?

вот этот момент не совсем ясен. у SEVPN офигенная рулилка и консольная и гуевая. Почитай примеры использования, у них на сайте очень много описано.

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

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

KIR_PRO
() автор топика
Ответ на: комментарий от KIR_PRO

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

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

И под этот результат можно и структуру сетей переделать.

структура итак самая простая. Делать другую структуру = делать сложнее.

Если коротко и ясно. Нужна сеть виртуальная, к которой можно подключиться через сервер в одной стране, а в инет выйти в другой. Серверов около 12 штук. При этом маршрут как пойдет трафик внутри сети лежит в базе, и это принципиально необходимо, чтоб трафик физически так и двигался по сети. Допустим есть 5 серверов A,B,C,D,E мне надо подключиться к C а выходить через A, но... мне важно чтоб трафик прошел в промежутке через E а потом через B.

В итоге получаем движение трафика по сети такое: C->E->B->A-> internet Маршрут будет изменяемым и лежать будет в базе даных, а потому каких то готовых решений тут не взять, а я остановился на iptables+iproute2

Реально это все на SoftEther организовать?

KIR_PRO
() автор топика
Ответ на: комментарий от KIR_PRO

как бы для этого и существует кластер в SEVPN

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

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

Нее, для каждого клиента будет разный маршрут в разное время. А тоннели(каналы/соединения/etc...) между серверами всегда одинаковые.

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

KIR_PRO
() автор топика
Ответ на: комментарий от KIR_PRO

ну можно сделать tun или tap бриджи и на них рулить уже маршруты как тебе надо. а sevpn может к таким бриджам цепляться с серверной стороны.

MikeDM ★★★★★
()

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

Я нихрена не понел, но мое твердое мнение что вам нужен ospf.

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

Я нихрена не понел, но мое твердое мнение что вам нужен ospf.

Увы но это не то. Маршруты для интерфейсов всегда статические. Маршруты меняются для трафика клиента основываясь на его IP

Например, как у меня сейчас реализовано это: к последнему серверу(C) в цепочке пакеты пользователя доходят с неизменным IP, выданным на сервере (A), основываясь на этом и паре правил iptables ответные пакеты возвращаются к пользователю по тому же маршруту.

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