Перейти к содержимому
Калькуляторы

/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.

Изменено пользователем andrew_G

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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'}?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Жесть :)))) Баш недостаточно кошерен? :)

 

Мне так проще

Изменено пользователем andrew_G

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если в лог интерфейс нормально передаётся, что мешает в ваш скрипт отдать $exp_ev->{'ifname'}?

 

 

Может я чего то не вижу. У меня лог такой.

Session '172.20.0.101' on 'Virtual2' accepted by '127.0.0.1:1812'

Никакого интерфейса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может я чего то не вижу. У меня лог такой.

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 ...."

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В этом месте явно в лог пишется "Interface ...."

Да было такое. И лог был такой некрасивый

Session '172.20.0.101' on 'Virtual2Interface:' accepted by '127.0.0.1:1812'

 

Я засомневался, не накосячил ли я и вернул дефолтный ISGd.pl

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В этом месте явно в лог пишется "Interface ...."

 

"Interface:" . $exp_ev->{'ifname'}

Это я наугад добавил, не получил ничего и забыл убрать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Или может у кого то возникла идея, откуда влан можно взять без LISG.

Выше писал что я запустил accel-pppd который без радиуса просто создает вланы и навешивает ip unnumbered от dhcp. DHCP просто раздает из пула, не смотря на то, какой влан. ISG уже потом авторизовывает по IP. В радиус ISG отправляет CID с номером влана который уже до этого создал accel.

 

P.S. Так сильно костылить с php не стоит.

Изменено пользователем alexmern

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Или может у кого то возникла идея, откуда влан можно взять без LISG.

Выше писал что я запустил accel-pppd который без радиуса просто создает вланы и навешивает ip unnumbered от dhcp. DHCP просто раздает из пула, не смотря на то, какой влан. ISG уже потом авторизовывает по IP. В радиус ISG отправляет CID с номером влана который уже до этого создал accel.

 

P.S. Так сильно костылить с php не стоит.

это все на одном серваке?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

это все на одном серваке?

accel + isg на одном. dhcp + биллинг на другом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

alexmern

а чем просто accel не угодил?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а чем просто accel не угодил?

Нужен аккаунтинг и шейпинг по нескольким направлениям.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте!

 

Никто не сталкивался с таким?

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) , но куда копать, чего ему не хватает?(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всем привет!

 

Чур не пинать!

 

Вопрос, собрал последнюю версию 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).

Заранее спасибо.

Изменено пользователем baronzzz

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У нетапа вроде свой радиус или вы к нему freeradius прикрутили?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У нетапа вроде свой радиус или вы к нему 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

подскажите, можно ли linux ISG прислать по coa L4-Redirect?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Совсем поплыл, подскажите. Что необходимо править в конфигурационных файлах freeradius ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

подскажите, можно ли linux ISG прислать по coa L4-Redirect?

Да, посредством смены сервисов. Конкретно как в accel-ppp - нельзя.

Совсем поплыл, подскажите. Что необходимо править в конфигурационных файлах freeradius ?

Если кратко - всё.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

подскажите, можно ли linux ISG прислать по coa L4-Redirect?

Да, посредством смены сервисов. Конкретно как в accel-ppp - нельзя.

Совсем поплыл, подскажите. Что необходимо править в конфигурационных файлах freeradius ?

Если кратко - всё.

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

 

 

Спасибо, четко и ясно.

Если долго - FreeRADIUS - это не сервер искаропки;

 

Это понятно, я и не отношусь ко всему как - кликнул и пользуй.

 

 с помощью которого можно реализовать свои хотелки.

 

Полагаю, это можно отнести ко всему чем мы пользуемси...

 

 Естественно, нужно иметь понимание того, что вы хотите получить.

 

Ну а тут понятно, понимание продукта и его возможностей наступает не сразу. А с течением времени, которое ты тратишь на его узнавание \ познавание.

Но хотел бы просить помощи у тех, кто уже 'сьел собаку' по настройке \ эксплутации связки lISG + FreeRadius.

 

Помощь в виде ссылок, заметок. Может быть и конфигов...

Изменено пользователем baronzzz

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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).

 

Обычно это всё уже есть в биллинге.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И опять спасибо.

 

Чуть докрутил радиус, и опа, начал авторизовываться.

Но много мусора. Да и ответ от радиуса кривой.

 

Забыл упомянуть, на данный момент у меня пока чистый Олеговский код, без всяких заморочек. Строим дальше. :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Получается Авторизоваться:

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

baronzzz,

1. У вас редирект не включен? Неавторизованные сессии с редиректом именно как Z и выглядят.

2. А попробуйте-ка вообще не выдавать никакого сервиса - заработает ли.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.