andrew_G Опубликовано 15 августа, 2014 (изменено) · Жалоба /opt/ISG/bin/getlogin.pl должен выдать по ip нужный vlan (можно вытащать через ip ro get, если вас так устроит). Спасибо за ответ, но это не совсем то. Вернее в обычной ситуации то, но мне, наверное, нужно рассказать поподробнее, что я сделал и чего хочу. Есть у меня тестовый сервер dist. ubuntu-server 14.04 lts. У него 2 сетевухи: eth1 - Интернет eth0 - 172.20.0.1/16 (Локальная сеть - Абоненты) Поднимаю NAT на eth1: /sbin/iptables -t nat -A POSTROUTING -s 172.20.0.0/16 -o eth1 -j SNAT --to-source $IP_ETH1 Для начала делаю аналог цисковской ip unnumbered http://habrahabr.ru/post/71689/ Создаём на eth0 (при этом оставляю eth0 с ip 172.20.0.1/16) 8 вланов без IP eth0.101......eth0.108 К eth0 подключаю 9 порт коммутатора Dlink DES 3200-10, где те же вланы tagged на 9 порту и untagged по принципу 1 порт - 101 2 порт - 102 ............ 8 порт - 108 В 1 порт (влан 101), включаю ноут с ip 172.20.0.101/16 (шлюз 172.20.0.1) Естественно ничего не работает, так как шлюз не знает куда ему отвечать на запросы. Если мы ему поможем и сделаем маршрут руками: ip route add 172.20.0.101 dev eth0.101 src 172.20.0.1 все отлично работает. Эти 8 вланов - это 8 отдельных районов на которые мы разбиваем сеть. При таком сегментировании надежность сети сильно увеличивается. Притом, что блок IP у нас остается один, нам не нужно путаться в каком влане какие IP. Теперь дошли до LISG Я попробовал и у меня получилось поднимать маршруты при поднятии сессии LISG Для этого иницируем поднятие сессии не только на FORWARD но и на INPUT /sbin/iptables -A INPUT -s 127.0.0.0/8 -j ACCEPT /sbin/iptables -A INPUT -s 172.20.0.0/16 -j ISG --session-init /sbin/iptables -A FORWARD -s 172.20.0.0/16 -j ISG --session-init /sbin/iptables -A FORWARD -d 172.20.0.0/16 -j ISG В ISGd.pl дописываем после do_log("info", "Session '$exp_login' on 'Virtual" . $exp_ev->{'port_number'} . "Interface:" . $exp_ev->{'ifname'} ."' accepted by '$src_host:$src_port'"); запуск внешнего скрипта с параметрами my $cmd = ('/home/lisg/command.php'); system($cmd, $exp_login, $exp_ev->{'macaddr'}, "accept"); то есть скрипт будет запускаться при успешной авторизации и аналогично после do_log("info", "Session '$ipaddr' on 'Virtual" . $ev->{'port_number'} . "' finished"); запуск внешнего скрипта с параметрами my $cmd = ('/home/lisg/command.php'); system($cmd, $ipaddr, $ev->{'macaddr'}, "finished"); скрипт будет запускаться при отваливании сесии по таймауту скрипт запускает маршрут для IP /home/lisg/command.php <?php $ip=$argv[1]; $mac=$argv[2]; $action=$argv[3]; $vlan="eth0.101"; if($action=="accept"){ exec("ip route add $ip dev $vlan src 172.20.0.1"); } if($action=="finished"){ exec("ip route del $ip dev $vlan src 172.20.0.1"); } ?> Если $action=="accept" он появляется в ip route 172.20.0.101 dev eth0.101 scope link src 172.20.0.1 Если $action=="finished" - убивается. User IP-address NAT IP-address Port number Uniq. Identifier Durat. Octets-in Octets-out Rate-in Rate-out Macaddr Flags 172.20.0.101 0.0.0.0 Virtual2 1B26FCC46CFA7AE8 9 676 600 1000000 1000000 f0def1b8bda8 A Я немного изменил ISG.pl, чтобы он показывал mac вместо 'Main session' Но при этом есть маленькая неприятность. Как видно в скрипте, я назначил переменной $vlan="eth0.101"; Это потому, что взять ниоткуда этот влан я не могу. Опять же натыкаюсь на то, что нужно знать в каком влане IP находится. Но сессия lisg поднимается уже тогда, когда еще нет ни маршрута, ни арпа, а мы уже знаем с помощью ISG.pl IP и mac. А теперь вопрос, к которому я так долго подводил: Можно ли каким то образом с помощью LISG (может с помощью патча в модуль или изменениями в ISGd.pl) достать влан, с которого поднял сессию данный IP. Или может у кого то возникла идея, откуда влан можно взять без LISG. Изменено 15 августа, 2014 пользователем andrew_G Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Wingman Опубликовано 15 августа, 2014 · Жалоба my $cmd = ('/home/lisg/command.php'); system($cmd, $ipaddr, $ev->{'macaddr'}, "finished"); Жесть :)))) Баш недостаточно кошерен? :) do_log("info", "Session '$exp_login' on 'Virtual" . $exp_ev->{'port_number'} . "Interface:" . $exp_ev->{'ifname'} ."' accepted by '$src_host:$src_port'"); Как видно в скрипте, я назначил переменной $vlan="eth0.101"; Это потому, что взять ниоткуда этот влан я не могу. Если в лог интерфейс нормально передаётся, что мешает в ваш скрипт отдать $exp_ev->{'ifname'}? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
andrew_G Опубликовано 15 августа, 2014 (изменено) · Жалоба Жесть :)))) Баш недостаточно кошерен? :) Мне так проще Изменено 15 августа, 2014 пользователем andrew_G Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
andrew_G Опубликовано 15 августа, 2014 · Жалоба Если в лог интерфейс нормально передаётся, что мешает в ваш скрипт отдать $exp_ev->{'ifname'}? Может я чего то не вижу. У меня лог такой. Session '172.20.0.101' on 'Virtual2' accepted by '127.0.0.1:1812' Никакого интерфейса. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Wingman Опубликовано 15 августа, 2014 · Жалоба Может я чего то не вижу. У меня лог такой. Session '172.20.0.101' on 'Virtual2' accepted by '127.0.0.1:1812' Никакого интерфейса. Вы точно используете тот же ISGd.pl, код которого приводили выше? дописываем после do_log("info", "Session '$exp_login' on 'Virtual" . $exp_ev->{'port_number'} . "Interface:" . $exp_ev->{'ifname'} ."' accepted by '$src_host:$src_port'"); В этом месте явно в лог пишется "Interface ...." Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
andrew_G Опубликовано 15 августа, 2014 · Жалоба В этом месте явно в лог пишется "Interface ...." Да было такое. И лог был такой некрасивый Session '172.20.0.101' on 'Virtual2Interface:' accepted by '127.0.0.1:1812' Я засомневался, не накосячил ли я и вернул дефолтный ISGd.pl Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
andrew_G Опубликовано 15 августа, 2014 · Жалоба В этом месте явно в лог пишется "Interface ...." "Interface:" . $exp_ev->{'ifname'} Это я наугад добавил, не получил ничего и забыл убрать. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alexmern Опубликовано 15 августа, 2014 (изменено) · Жалоба Или может у кого то возникла идея, откуда влан можно взять без LISG. Выше писал что я запустил accel-pppd который без радиуса просто создает вланы и навешивает ip unnumbered от dhcp. DHCP просто раздает из пула, не смотря на то, какой влан. ISG уже потом авторизовывает по IP. В радиус ISG отправляет CID с номером влана который уже до этого создал accel. P.S. Так сильно костылить с php не стоит. Изменено 15 августа, 2014 пользователем alexmern Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Abram Опубликовано 15 августа, 2014 · Жалоба Нихрена себе. Да вы мастер. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
911 Опубликовано 16 августа, 2014 · Жалоба Или может у кого то возникла идея, откуда влан можно взять без LISG. Выше писал что я запустил accel-pppd который без радиуса просто создает вланы и навешивает ip unnumbered от dhcp. DHCP просто раздает из пула, не смотря на то, какой влан. ISG уже потом авторизовывает по IP. В радиус ISG отправляет CID с номером влана который уже до этого создал accel. P.S. Так сильно костылить с php не стоит. это все на одном серваке? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alexmern Опубликовано 17 августа, 2014 · Жалоба это все на одном серваке? accel + isg на одном. dhcp + биллинг на другом. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
911 Опубликовано 17 августа, 2014 · Жалоба alexmern а чем просто accel не угодил? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alexmern Опубликовано 17 августа, 2014 · Жалоба а чем просто accel не угодил? Нужен аккаунтинг и шейпинг по нескольким направлениям. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
C@T Опубликовано 26 августа, 2014 · Жалоба Здравствуйте! Никто не сталкивался с таким? kernel: ipt_ISG: Error (-11) while sending response to pid 5678 kernel: [1437627.194120] ipt_ISG: Lost packet during sending data to listener (err=-11) я догадываюсь, что проблемя не в ISG, а в ядре (2.6.32-5-amd64) , но куда копать, чего ему не хватает?( Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
baronzzz Опубликовано 16 сентября, 2014 (изменено) · Жалоба Всем привет! Чур не пинать! Вопрос, собрал последнюю версию lISG на centos 6. Добавил пару правил в IPTABLES. Поставил FreeRADIUS, и вот тут затык...ранее не пользовался FreeRADIUS опыта, нет. На данный момент, lISG общается с радиус сервером. Т.к. Радиус не знает о клиенте с ип 172.16.10.4, он отправляет клиента в лес. Sep 16 13:02:59 test1 ISG[14506]: Session '172.16.10.4' rejected by '127.0.0.1:1812' User IP-address NAT IP-address Port number Uniq. Identifier Durat. Octets-in Octets-out Rate-in Rate-out Service name Flags 172.16.10.4 0.0.0.0 Virtual1 CE20CBC7CF63E5E2 4 0 0 0 0 Main session X ./ISG.pl show_count Approved sessions count: 0 Unapproved sessions count: 1 Подскажите 'на пальцах' или может ткнете на материал о настройке FreeRADIUS для авторизации клиентов ipoe(билинг netup 5). Заранее спасибо. Изменено 16 сентября, 2014 пользователем baronzzz Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alexmern Опубликовано 16 сентября, 2014 · Жалоба У нетапа вроде свой радиус или вы к нему freeradius прикрутили? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
baronzzz Опубликовано 16 сентября, 2014 · Жалоба У нетапа вроде свой радиус или вы к нему freeradius прикрутили? Ввел Вас в заблуждение. Биллинг собираюсь пользовать UTM 5. На данный момент пытался получить авторизацию от радиуса настроив тока его конф. файлы. Плюнул, решил к радиусу прикрутить mysql. Дополню сообщение тем, что выдает в дебуге сам радиус: rad_recv: Access-Request packet from host 127.0.0.1 port 45115, id=86, length=141 User-Password = "\253\367\303[\036\373\243\200k]\025\233Ǐ\033\251" User-Name = "172.16.10.4" Calling-Station-Id = "172.16.10.4" Service-Type = Framed-User NAS-IP-Address = 127.0.0.1 NAS-Identifier = "lISG" Called-Station-Id = "lISG" NAS-Port = 1 NAS-Port-Type = Virtual Cisco-AVPair = "client-mac-address=6aa2.4438.3529" # Executing section authorize from file /etc/raddb/sites-enabled/default +- entering group authorize {...} ++[preprocess] returns ok ++[chap] returns noop ++[mschap] returns noop ++[digest] returns noop [suffix] No '@' in User-Name = "172.16.10.4", looking up realm NULL [suffix] No such realm "NULL" ++[suffix] returns noop [eap] No EAP-Message, not doing EAP ++[eap] returns noop ++[files] returns noop ++[expiration] returns noop ++[logintime] returns noop [pap] WARNING! No "known good" password found for the user. Authentication may fail because of this. ++[pap] returns noop ERROR: No authenticate method (Auth-Type) found for the request: Rejecting the user Failed to authenticate the user. Login incorrect: [172.16.10.4/\253\367\303[\036\373\243\200k]\025\233▒?\033\251] (from client localhost port 1 cli 172.16.10.4) WARNING: Unprintable characters in the password. Double-check the shared secret on the server and the NAS! Using Post-Auth-Type Reject # Executing group from file /etc/raddb/sites-enabled/default +- entering group REJECT {...} [attr_filter.access_reject] expand: %{User-Name} -> 172.16.10.4 attr_filter: Matched entry DEFAULT at line 11 ++[attr_filter.access_reject] returns updated Delaying reject of request 2 for 1 seconds Going to the next request Waking up in 0.9 seconds. Sending delayed reject for request 2 Sending Access-Reject of id 86 to 127.0.0.1 port 45115 Waking up in 4.9 seconds. Cleaning up request 2 ID 86 with timestamp +86 Ready to process requests. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
zeleniy Опубликовано 16 сентября, 2014 · Жалоба подскажите, можно ли linux ISG прислать по coa L4-Redirect? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
baronzzz Опубликовано 16 сентября, 2014 · Жалоба Совсем поплыл, подскажите. Что необходимо править в конфигурационных файлах freeradius ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Abram Опубликовано 16 сентября, 2014 · Жалоба подскажите, можно ли linux ISG прислать по coa L4-Redirect? Да, посредством смены сервисов. Конкретно как в accel-ppp - нельзя. Совсем поплыл, подскажите. Что необходимо править в конфигурационных файлах freeradius ? Если кратко - всё. Если долго - FreeRADIUS - это не сервер искаропки; это скорее что-то вроде фреймворка, с помощью которого можно реализовать свои хотелки. Естественно, нужно иметь понимание того, что вы хотите получить. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
baronzzz Опубликовано 17 сентября, 2014 (изменено) · Жалоба подскажите, можно ли linux ISG прислать по coa L4-Redirect? Да, посредством смены сервисов. Конкретно как в accel-ppp - нельзя. Совсем поплыл, подскажите. Что необходимо править в конфигурационных файлах freeradius ? Если кратко - всё. Если долго - FreeRADIUS - это не сервер искаропки; это скорее что-то вроде фреймворка, с помощью которого можно реализовать свои хотелки. Естественно, нужно иметь понимание того, что вы хотите получить. Спасибо, четко и ясно. Если долго - FreeRADIUS - это не сервер искаропки; Это понятно, я и не отношусь ко всему как - кликнул и пользуй. с помощью которого можно реализовать свои хотелки. Полагаю, это можно отнести ко всему чем мы пользуемси... Естественно, нужно иметь понимание того, что вы хотите получить. Ну а тут понятно, понимание продукта и его возможностей наступает не сразу. А с течением времени, которое ты тратишь на его узнавание \ познавание. Но хотел бы просить помощи у тех, кто уже 'сьел собаку' по настройке \ эксплутации связки lISG + FreeRadius. Помощь в виде ссылок, заметок. Может быть и конфигов... Изменено 17 сентября, 2014 пользователем baronzzz Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Abram Опубликовано 17 сентября, 2014 · Жалоба baronzzz, Нет, вы меня не поняли. У FreeRADIUS из коробки есть возможность отправлять пакеты, принимать пакеты, работать со словарями; есть какие-то модули для часто решаемых задач (chap, mschap etc). Но логику придётся делать самому. Вот я могу дать свой "рабочий" кусок конфига (опустим всякую воду, это именно site в sites-enabled): server default { listen { type = auth ipaddr = * port = 0 limit { max_connections = 16 lifetime = 0 idle_timeout = 30 } } listen { ipaddr = * port = 0 type = acct limit { } } authorize { auth_log files accel_python } authenticate { Auth-Type python { accel_python ok } } preacct { preprocess files accel_python } accounting { accel_python ok } session { # accel_python } post-auth { reply_log accel_python Post-Auth-Type REJECT { accel_python #attr_filter.access_reject } } pre-proxy { } post-proxy { } } Много понятно? Нет, потому что этот конфиг нифигашень почти не делает, только отправляет запросы в самописный модуль accel_python (который состоит из 100500 строк кода на python). Обычно это всё уже есть в биллинге. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
baronzzz Опубликовано 17 сентября, 2014 · Жалоба И опять спасибо. Чуть докрутил радиус, и опа, начал авторизовываться. Но много мусора. Да и ответ от радиуса кривой. Забыл упомянуть, на данный момент у меня пока чистый Олеговский код, без всяких заморочек. Строим дальше. :-) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
baronzzz Опубликовано 17 сентября, 2014 · Жалоба Получается Авторизоваться: User IP-address NAT IP-address Port number Uniq. Identifier Durat. Octets-in Octets-out Rate-in Rate-out Service name Flags 172.16.10.4 0.0.0.0 Virtual1 09CEB08FA020CF5F 313 1172 180 0 0 Main session AZ В результате хожу на сети за lISG (серая сеть 172.16.10.0 - пользовательская локалка). Если ручками изменить скорость для сессии, шейпер отрабатывает. Скорость режися. Беспокоит: 1. Флаг Z Что может быть не так ? 2. Автоматически не назначается скорость. Ограничение делал по инструкции Сервисы типа Policer https://bitbucket.org/sysoleg/lisg/wiki/Home Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Abram Опубликовано 17 сентября, 2014 · Жалоба baronzzz, 1. У вас редирект не включен? Неавторизованные сессии с редиректом именно как Z и выглядят. 2. А попробуйте-ка вообще не выдавать никакого сервиса - заработает ли. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...