Архив за Июль 2010

Создание кэширующих radius серверов

Использование связки freeradius+pppd вызывает следующие проблемы:

  • потери пакетов из-за большого числа запросов (особенно при массовом отключении юзеров)
  • потери пакетов из-за отказа центрального radius сервера
  • частые попытки авторизации для некоторых клиентов (например, при запрете доступа для роутеров d-link)
  • использование СУБД в качестве хранилища

Решение проблемы в установке freeradius на каждом сервера доступа.

Схема работы:

  1. Локальный сервер принимает все пакеты (auth+acct)
  2. Auth пакет проверяет в кэше и при необходимости делает запрос на мастер-сервер
  3. Acct пакет пишется в файл detail
  4. При наличии  файла detail сервер отсылает их  мастеру

Конфигурирование локальных серверов(только основные параметры):

#разрешаем передачу с порта 1814
proxy_requests  = yes
 
realm DEFAULT {# перенаправление на мастера
   type  = radius
   authhost        = IP_мастера:1812
   accthost        = IP_мастера:1813
   secret          = секрет
}
 
modules{# настройки модулей
  always ok {
    rcode = ok
    simulcount = 0
    mpp = no
  }
 
  detail {
    detailfile = ${radacctdir}/detail
    detailperm = 0644
  }
 
  caching {
    filename = ${logdir}/db.cache
    cache-ttl = 30
    hit-ratio = 3
    key = "%{User-Name}"
    cache-size = 2000
    cache-rejects = yes
  }
}
 
# приемный сервер
server proxy{
  listen {
    type = auth
    ipaddr = приемный IP
  }
  listen {
    type = acct
    ipaddr = приемный IP
  }
  authorize {
    caching {# кэшируем запросы
      ok = return
    }
    update control {# отправляем на мастера
      Proxy-To-Realm := DEFAULT
    }
  }
  post-auth {
     caching
  }
  preacct {
     files
  }
  accounting {# пишем в буферный файл
     detail
  }
}
##############################
# вспомогательный буферирующий сервер
server buf-acct {
   listen {# читаем из буферного файла
     type = detail
     filename = ${radacctdir}/detail
     load_factor = 10
     poll_interval = 1
     retry_interval = 30
  }
  pre-proxy {
    #pre_proxy_log
  }
  post-proxy {
    #post_proxy_log
  }
  preacct {
    files
  }
  accounting {
     update control {# отсылаем на мастера
        Proxy-To-Realm := DEFAULT
     }
  }
}

P.S. Работа с резервированными мастер серверами буду рассматривать позже (если возникнет у меня необходимость)

Теги: ,