Всем привет!
Задача: Создать систему предоставляющую интернет большому колличетсву пользователей большой закрытой сети.Вариант решения:
Закрытая сеть -> GetWay (FreeBSD, dhcp, bind, mpd4+radius+mysql) -> Internet;
Недостатки:
- сильно нагружает сервер, потому при большом траффике у пользователей "слабеет" соединение, начинаються жалобы, постоянные звонки... - Лечится но не сильно - отключением шифрований.
- Есть ограничение числа создаваемых ptp интерфейсов, гдже-то 400, где-то 900, как повезет. Соответственно в сети на 3000 пользователей начинаются проблемы.
Приемущетсва очевидны:
- Появляеться возможность разделенного шейпинга каждого пользователя, учет траффика нге по машинам а по пользователям, разграничение доступов и построение нормальной полноценной биллинговой системы. - то что нужно, но недостатки многое перечеркивают.
Более оптимизированное решение:
define VPN {FreeBSD, mpd4+radius+mysql}
Закрытая сеть -> GetWay (dhcp, bind) -> VPN1, VPN2, VPN3, ...
Пользователи такой сети подключаються не к ип адресу сервера vpn а к его имени.
Например есть имя: vpngw.network.net;
На сервере GetWay есть база данных в которую пишется сколько пользователей обрабатывает в данный момент каждый из серверов VPN распредиляя новых пользователей между ними равномерно например следующим образом:
По имеющимся данным getway по базе находит список самых разгруженных на данный момент серверов VPN, выбирает случайным образом какой либо сервер из этого списка и в системе bind переписывает запись vpngw.network.net присваевая ей новый ip(выбранного vpn сервера).
Такая операция происходит каждые N минут (например раз в 5 или 10 минут, в зависимости от размаха пользовательской сети);
Такая система реально работает и я сам реализовывал её на практике.
Я столкнулся с трудностью кеширования - многие windows машины кешировали у себя запись о имени сервера и не сверяясь с сервером подкючались сами по себе к когда то запомненной машине.
Лечиться ipconfig /flushdns -ом, или правкой конфигов на клиенте.. но неприятно.
Во всех вышеописанных примерах есть еще один недостаток - если сеть сегментированна, то каждому пользователю необходимо прописывать какое то колличество маршрутов, ведь при подключении точка-точка шлюз по умолчанию имеет свойство меняться, с звезды(впереди стоящего маршрутизатора) на vpn сервер, который с топологией сети вообще может быть слабо связанн.
Лечится тяжело - например dhcpd-isc умеет передавать маршруты пользователю при выдаче ему сетевых параметров.
В ообщем не самый лучший метод - много где не работает, часто воспринимаеться только первый маршрут.
Вопрос состоит в следующем:
Прошу вас предложить Альтернотивные варианты создлания такой системы, либо методом модернизации этой(но не стоит зацикливаться) либо совершенно иным методом. Может быть появились какие-то новые технологии или идеи?
Методы типа "открыть интернет себе через web страницу, по конкретному своему ip адресу и контролировать доступ по связке ip+mac пингуя клиента чтобы понять когда он отключился и когда ему требуетьсяч закрыть интернет" не предлогать, так как они не удовлетворяют требованиям.
Тоесть - пользователь не должен знать ip адреса машины на которой он седит, должен уметь войти с любой машины в сети по своему логину и паролю и тарифицироваться в соответствии с ними, Пользователь должен уметь заходить в основном из под винды, но очень желательно возможность захода его под другими системами типа FreeBSD, PCBSD, linux*, macOS, others...
regards, procool@