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

Не получается собрать.

Система Debian

root /opt/isg/lISG-0.1-alpha/kernel #  make && make install
echo "" > build.h
printf "/* Compilation date.\n * Written by Makefile (userspace) */\n#define _BUILD_DATE \"%s %s\"\n" `date +'%F %T'` > build.h
make -C /lib/modules/2.6.25-2-686/build M=/opt/isg/lISG-0.1-alpha/kernel modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.25-2-686'
  Building modules, stage 2.
  MODPOST 0 modules
make[1]: Leaving directory `/usr/src/linux-headers-2.6.25-2-686'
gcc -O2 -Wall -Wunused -I/lib/modules/2.6.25-2-686/build/include -I../../iptables-1.4.6/include -DIPTABLES_VERSION=\"1.4.6\" -fPIC -o libipt_ISG_sh.o -c libipt_ISG.c
libipt_ISG.c: In function ‘parse’:
libipt_ISG.c:37: warning: implicit declaration of function ‘exit_error’
libipt_ISG.c: In function ‘save’:
libipt_ISG.c:65: warning: implicit declaration of function ‘save_string’
gcc -shared -o libipt_ISG.so libipt_ISG_sh.o
make -C /lib/modules/2.6.25-2-686/build M=/opt/isg/lISG-0.1-alpha/kernel modules_install
make[1]: Entering directory `/usr/src/linux-headers-2.6.25-2-686'
  DEPMOD  2.6.25-2-686
make[1]: Leaving directory `/usr/src/linux-headers-2.6.25-2-686'
make: *** Нет правила для сборки цели `ipt_ISG.ko', требуемой для `iinstall'.  Останов.

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

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


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

Исправил глупую ошибку, выложил новую версию. Попробуйте, теперь модуль ядра должен собираться. Ядро ваше довольно старое (2.6.25), а модуль писался всего пол-года назад, поэтому поддержку старых ядер я не делал, есть вероятность что не соберется. Но попробуйте. Если что, пишите.

 

По поводу iptables. К сожалению придется использовать версию 1.4.2. Это ограничение, которое накладывает IPTables::libiptc. Я подумаю, что можно сделать с этим, но пока это единственный workaround.

 

UPD: Подумал. Скорее всего откажусь от использования IPTables::libiptc. Особого смысла в нем нет.

UPD2: Ядро для текущего релиза потребуется не ниже 2.6.28. Либо обновите ядро, либо подождите, пока я допилю модуль для 2.6.25.

Изменено пользователем Умник

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


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

Выложил 0.3-alpha.

 

http://www.progtech.ru/~oleg/lISG

 

Модуль ядра теперь собирается под ядрами >= 2.6.24, но нужно протестировать как это будет работать.

Все еще обязателен iptables 1.4.2. Работаю над этим - ограничение будет снято в 0.4-alpha.

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


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

Вышла версия 0.4-alpha.

 

http://www.progtech.ru/~oleg/lISG/

 

* Исправлен ряд мелких багов

* Теперь не требуются модули IPTables::libiptc и Time::HiRes

* Поддержка версий iptables 1.4.x

 

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


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

Собственно не до конца понятно, что есть haha в --session-init "haha", т.е. в --session-init можно подставить любую строку? Для чего используется?

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


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

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

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


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

Где можно выставить частоту обновлений аккунтинга через радиус?

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


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

В etc/config.pl $cfg{alive_interval} и $cfg{unlim_alive_interval} (в секундах). Первое значение - для сессий, на которые не назначена скорость через RADIUS-атрибут Class = ... (на них по-умолчанию вешается rate $cfg{default_speed}), второе - для сессий с ограниченной скоростью. Разделение сделано для того, чтобы не перегружать биллинг постоянными Alive-ами от анлимитчиков (для них не требуется real-time accounting).

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


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

Ну осталось дождаться CoA что бы отказаться от iptables для блокировки доступа, и будет шикарно =)

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


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

Постараюсь сделать в этом году. :)

У кого-нибудь в текущем виде заработал дистрибутив? Ну или хотя бы без ошибок собрался и загрузился... :)

Изменено пользователем Умник

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


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

Ещё есть просьба добавить атрибут NAS-Identifier в радиус пакет.

И, по возможности, в Called-Station-Id добавить значение из --session-init

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

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


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

Скомпилилось, iptables съел правила, ISGd запустился, и ничего

ISG.pl показывает

user /usr/local/ISG/bin #  ./ISG.pl show_all
10.10.1.1       0.0.0.0 0.0.0.0 Async0  0000000000000000        0       0       0       0       0       0       0       0

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


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

dolphinik, NAS-Identifier добавлю. По поводу --session-init: важно только само наличие параметра, значение его игнорируется в текущей реализации. То есть классифицировать трафик не получится. В дальшейшем я планирую сделать классификацию по-другому, чтобы не плодить на каждую подсеть по паре правил -j ISG, как я планировал ранее.

 

По поводу проблемы. Сейчас я попробую воспроизвести у себя, но пока покажите вывод хвоста команды dmesg, файлов /var/log/syslog (или messages) и /tmp/ISGd_dbg.log. Возможно эта информация ускорит процесс поиска причины проблемы.

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


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

Проблема решилась. Ошиблись с IP адресом в конфиге.

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

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


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

dolphinik, странно что проблема решилась. Я нашел ошибку, по идее не должны были уходить запросы на RADIUS-сервер. Скачайте пожалуйста 0.5-alpha. Там еще кое-какие исправления.

 

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


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

Есть предложение вынести

NAS-Identifier

в конфиг.

 

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


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

И ещё, просьба, вынести установку NAS-Port-Type = Async до if

Нужно как-то отличать запросы на авторизацию ISG от PPTP/PPPOE/DHCP сессий.

 

    $p->set_attr('NAS-Port-Type', 'Async');

    if ($code eq 'Accounting-Request') {
switch ($ev->{'type'}) {
    case ISG::EVENT_SESS_START   { $p->set_attr('Acct-Status-Type', 'Start'); }
    case ISG::EVENT_SESS_UPDATE  { $p->set_attr('Acct-Status-Type', 'Alive'); }
    case ISG::EVENT_SESS_STOP    { $p->set_attr('Acct-Status-Type', 'Stop'); }
    case ISG::EVENT_SESS_RESTART { $p->set_attr('Acct-Status-Type', 'Stop'); }
}


    $p->set_attr('Framed-IP-Address', ISG::long2ip($ev->{'nat_ipaddr'}));

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


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

После некоторых боданий пришёл к следующему набору атрибутов в пакетах:

    $p->set_password($username, $cfg{radius_secret});

    $p->set_attr('User-Name', $username);
    $p->set_attr('Service-Type', 'Framed-User');
    $p->set_attr('NAS-IP-Address', $nas_ip);
    $p->set_attr('NAS-Identifier', $nas_ip);
    $p->set_attr('NAS-Port', $ev->{'port_number'});
    $p->set_attr('NAS-Port-Type', 'Async');

    if ($code eq 'Accounting-Request') {
        switch ($ev->{'type'}) {
            case ISG::EVENT_SESS_START   { $p->set_attr('Acct-Status-Type', 'Start'); }
            case ISG::EVENT_SESS_UPDATE  { $p->set_attr('Acct-Status-Type', 'Alive'); }
            case ISG::EVENT_SESS_STOP    { $p->set_attr('Acct-Status-Type', 'Stop'); }
            case ISG::EVENT_SESS_RESTART { $p->set_attr('Acct-Status-Type', 'Stop'); }
        }


        $p->set_attr('Framed-IP-Address', ISG::long2ip($ev->{'nat_ipaddr'}));

        $p->set_attr('Acct-Authentic', 'RADIUS');
        $p->set_attr('Acct-Session-Id', $ev->{'session_id'});
        $p->set_attr('Calling-Station-Id', $username);
        $p->set_attr('Called-Station-Id', $nas_ip);

        $p->set_attr('Acct-Session-Time', $ev->{'duration'});

        $p->set_attr('Acct-Input-Packets', $ev->{'in_packets'});
        $p->set_attr('Acct-Output-Packets', $ev->{'out_packets'});

        {
            use bigint;

            $p->set_attr('Acct-Input-String', $ev->{'in_bytes'} & 0xffffffff);
            $p->set_attr('Acct-Output-String', $ev->{'out_bytes'} & 0xffffffff);

            $p->set_attr('Acct-Input-Gigawords', $ev->{'in_bytes'} >> 32);
            $p->set_attr('Acct-Output-Gigawords', $ev->{'out_bytes'} >> 32);
        }
    }

    $rad_reqs{"$src_port"}{'pk_user'} = $username;
    $rad_reqs{"$src_port"}{'pk_port'} = $ev->{'port_number'};
    $rad_reqs{"$src_port"}{'pk_rid'}  = $rid;
    $rad_reqs{"$src_port"}{'pk_time'} = time();

    if (!$sock->send($p->pack)) {
        do_log("err", "Unable to send RADIUS request");
        return 0;
    }

    return 1;
}

 

Ещё прошу привести правильную конфигурацию iptables для работы с этим модулем.

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

ISG        all  --  10.10.1.110          0.0.0.0/0           ISG initiator, service `inet'
ISG        all  --  10.10.1.110          0.0.0.0/0           ISG
ACCEPT     all  --  10.10.1.110          0.0.0.0/0

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


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

dolphinik, в 0.6-alpha NAS-Identifier вынесу в конфиг, сочетание атрибутов сделаю как у вас, спасибо.

 

А это:

ISG        all  --  10.10.1.110          0.0.0.0/0           ISG initiator, service `inet'
ISG        all  --  10.10.1.110          0.0.0.0/0           ISG
ACCEPT     all  --  10.10.1.110          0.0.0.0/0

Должно выглядить так:

ISG        all  --  10.10.1.110          0.0.0.0/0           ISG initiator, service `inet'
ISG        all  --  0.0.0.0/0          10.10.1.110           ISG
ACCEPT     all  --  10.10.1.110          0.0.0.0/0  <-- не уверен, зачем это правило (впрочем, после обработки -j ISG пакет [если ISG его не зарубил] продолжает движение дальше по вашим правилам, так что если политика по-умолачанию для FORWARD - DROP, то после двух ISG должны идти разрешающие правила)

Параметр --session-init говорит, что пакеты, попавшие в это правило будут инициализировать сессию. После успешной инициализации это правило будет использоваться для полисинга и для аккаунтинга исходящего трафика (от пользователя). Правило без параметра --session-init используется для аккаунтинга и обработки трафика на клиента. Я планировал также делать классификацию трафика по подсетям на базе "сервисов", где "сервис" это по-сути два зеркальных правила "-j ISG", но сделаю это позже - по-другому. Поэтому значение параметра --session-init (в вашем случае - inet) не имеет смысла. Чтобы больше не путаться, в 0.6-alpha нужно будет писать просто: -j ISG --session-init, а не -j ISG --session-init somename.

Изменено пользователем Умник

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


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

На всякий случай еще раз замечу, что вместо 10.10.1.110 можно писать сеть - 10.10.1.0/24 или 10.10.1.0/16, не важно. В результате lISG будет учитывать отдельно каждый IP-адрес этой сети, а не сеть целиком (суммарно). Другими словами не нужно плодить по два правила -j ISG для каждого клиента.

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


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

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

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


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

Max P, а в чем проблема? Трафик от конкретного IP, если его отреджектил RADIUS, подропается в первом правиле (initiator, см. выше). Во втором (которое не initiator) подропается трафик на этот IP, потому что сессия для такого IP-адреса не инициирована initiator-ом. В итоге этот клиент не заработает. Если же RADIUS подтвердил доступ, то сессия стартует, трафик для этого IP будет ходить через два правила -j ISG, там учитываться и полиситься. Target ISG выносит вердикт (либо DROP, либо пакет продолжает движение по другим правилам iptables) в зависимости от IP-адреса (src IP для initiator направления и dst IP для не initiator).
Изменено пользователем Умник

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


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

спасибо, понял, попробую поднять на каникулах, как раз сервачок новый появился :)

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


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

На всякий случай еще раз замечу, что вместо 10.10.1.110 можно писать сеть - 10.10.1.0/24 или 10.10.1.0/16, не важно. В результате lISG будет учитывать отдельно каждый IP-адрес этой сети, а не сеть целиком (суммарно). Другими словами не нужно плодить по два правила -j ISG для каждого клиента.

Если я в правиле сейчас пропишу всю сеть, то оставлю её без интернета :)

10.10.1.110 - тестовая клиентская виртуальная машина.

 

Ещё просьба сделать изменение скорости и сессии и её сброс по идентификатору, а не номеру порта.

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

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


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

Join the conversation

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

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

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

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

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

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

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