Dhcp + Radius 3

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку

Выдача ip может быть основана на разных критериях, например:

  • авторизация по мак-адресу клиента (преимущественно используется в неуправляемых сетях)
  • по комбинации мак клиента, мак свича, порт свича
  • по номеру vlan
  • по имени nas, vlan свича, vlan клиента
  • по имени nas, маку и vlan клиента

Вариантов может быть множество, в зависимости от того, что придумает админ. Но суть везде одна: на radius приходят параметры, с которыми подключается клиента, а radius возвращает параметры: обычно ip + любое множество иных параметров.

В данном документе будет описан самый простой вариант: авторизация по мак-адресу клиента. Потом сложнее.

Мы настраиваем Radius так, чтобы он "принимал" любого, в том числе неизвестного, клиента, поскольку неизвестным клиентам будет выдан ip из пула динамических адресов. После чего у клиента появится возможность через личный кабинет зарегистрировать свое подключение и и данный мак-адрес перестанет быть неизвестным.


Установка Radius

Поскольку понадобится radius с модулем mysql, установим его не из бинарных пакетов (pkg install freeradius), а из портов:

cd /usr/ports/net/freeradius3 && make install clean

Обязательно поставим галку напротив опции MYSQL

Автозапуск:

sysrc radiusd_enable="yes"

Конфигурирование

cp /usr/local/nodeny/etc/raddb/* /usr/local/etc/raddb/
rm /usr/local/etc/raddb/sites-enabled/default 
ee /usr/local/etc/raddb/sites-enabled/nodeny

Вставляем следующий текст:

server default {
    listen {
        type = auth
        ipaddr = *
        port = 1812
    }
    listen {
        type = acct
        ipaddr = *
        port = 0
    }
    authorize {
        sql
        update control {
          Auth-Type := Accept
        }
    }
    authenticate {
    }
    preacct {
        acct_unique
        preprocess
    }
    accounting {
        sql
    }
    session {
        radutmp
        sql
    }
    post-auth {
        sql
    }
    Post-Auth-Type ACCEPT {
        sql
    }
}

Sql конфиг

В консоли:

ee /usr/local/etc/raddb/mods-enabled/sql

Вставляем следующий текст:

sql {
    driver = "rlm_sql_mysql"
    mysql {
        warnings = auto
    }
    server = "localhost"
    port = 3306
    login = "nodeny"
    password = "hardpass"
    radius_db = "nodeny"

    read_groups = no
    authorize_reply_query = "call radreply('%{User-Name}')"
    accounting {
        reference = "%{tolower:type.%{Acct-Status-Type}.query}"
        type {
            start {
                query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                        'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')"
            }
            interim-update {
                query = "${..start.query}"
            }
            stop {
                query = "call radstop('%{User-Name}', '%{Framed-IP-Address}')"
            }
        }
    }
    post-auth {
        query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\
                'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')"
    }
}