Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Описание


Модуль Eltex-APB предназначен для обмена информацией между точками доступа. Обеспечивает:

  • Роуминг пользователей, подключившихся при помощи авторизации на WEB-портале
  • Настройку и передачу списков белых адресов при портальной авторизации

Управление сервисом


Установка сервиса

apt-get install eltex-apb

Способ запуска/остановки:

ДействиеКомандаОтвет
Проверка состояния
service eltex-apb status

Сервис работает

eltex-apb is running with pid <pid>

Сервис не работает

eltex-apb is not running
Запуск сервиса
service eltex-apb start

Сервис запустился

Starting eltex-apb ...
eltex-apb started

Сервис уже работает

eltex-apb is already running
Остановка сервиса
service eltex-apb stop

Сервис успешно остановлен

Stopping eltex-apb ...
eltex-apb stopped

Сервис не остановлен, т.к. не был запущен

eltex-apb is not running
rm: cannot remove '/var/run/eltex-apb.pid': No such file or directory
Перезапуск сервиса
service eltex-apb restart

Сервис успешно перезапущен

Stopping eltex-apb ...
eltex-apb stopped
Starting eltex-apb ...
eltex-apb started


Просмотр точек доступа, которые находятся под управлением сервиса:

http://localhost:8090/apb/ap.jsp

Просмотр пользователей, которые находятся под управлением сервиса:

http://localhost:8090/apb/users.jsp

Конфигурация


/etc/default/eltex-apb

Содержит параметры, необходимые для инициализации сервиса.

/etc/default/eltex-apb
# Port for use by Access Point Binder service
PORT=8090
# Number of connection requests that can be queued
ACCEPT_QUEUE_SIZE=0
# Max text message buffer size, in bytes
MAX_TEXT_MESSAGE_BUFFER_SIZE=524288

# Path to Java executable
JAVA=/usr/bin/java

# Memory
JAVA_INIT_HEAP=128m
JAVA_MAX_HEAP=2048m

# To enable remote JMX monitoring uncomment the following line
#JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8091 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=127.0.0.1"
  • Слушаемый порт:
PORT=8090
  • Длина очереди запросов. При заполнении очереди, новые запросы будут игнорироваться сервером, пока старые запросы не будут обработаны (по дефолту очередь не будет накапливаться):
ACCEPT_QUEUE_SIZE=0
  • Максимальный размер буфера сообщения, в байтах:
MAX_TEXT_MESSAGE_BUFFER_SIZE=262144
  • Настройка памяти, выделяемой на работу сервиса (память выделяется на сам процесс, а не на кэш, прописанный в /etc/eltex-apb/ehcache.xml):

JAVA_INIT_HEAP=128m
JAVA_MAX_HEAP=2048m


/etc/eltex-apb/apb.properties

Содержит основные настройки сервиса.

/etc/eltex-apb/apb.properties
mercury.host=localhost
mercury.port=6565
mercury.pool.size=100

# Config filePath to cache
cache.config=/etc/eltex-apb/ehcache.xml

# list of permitted files to
hosts.file=/etc/eltex-apb/hosts.json

# Timeout waiting for subscribe-request after connecting the access point to the server, in seconds
subscribe.idle.timeout=60

# Timeout during that the session will stay opened without receiving any message
message.idle.timeout=90

# Interval of ping to be sent to the websocket session
ping.idle.timeout=30

# Maximum count of outgoing messages to queue for each session
session.outgoingQueue=100
nbi.client.login=admin
nbi.client.password=password
  • Настройки для подключения к сервису Mercury:
mercury.host=localhost 
mercury.port=6565 
mercury.pool.size=100
  • Расположение необходимых файлов:
# Config filePath to cache
cache.config=/etc/eltex-apb/ehcache.xml

# list of permitted files to
hosts.file=/etc/eltex-apb/hosts.json
  • Время ожидания запроса подписки после подключения точки доступа к серверу, в секундах:
# Timeout waiting for subscribe-request after connecting the access point to the server, in seconds
subscribe.idle.timeout=60
  • Время, в течение которого сессия остается открытой без отправки сообщений:
# Timeout during that the session will stay opened without receiving any message
message.idle.timeout=9
  • Интервал отправки пингов:
# Interval of ping to be sent to the websocket session
ping.idle.timeout=30
  • Максимальное количество исходящих сообщений для очереди на каждый сеанс:
# Maximum count of outgoing messages to queue for each session
session.outgoingQueue=100
  • Данные для учетной записи NBI:
nbi.client.login=admin
nbi.client.password=password


/etc/eltex-apb/ehcache.xml

Содержит системные настройки хранения данных о Wi-Fi-пользователях, подключенных на портале. При необходимости название и расположение файла может быть изменено в /etc/eltex-apb/apb.properties.

/etc/eltex-apb/ehcache.xml
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://www.ehcache.org/ehcache.xsd" updateCheck="false" monitoring="autodetect"
         dynamicConfig="true">

    <!--cacheManagerPeerProviderFactory
            class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
            properties="peerDiscovery=manual,rmiUrls=//192.168.26.179:40001/users"/-->

    <!--cacheManagerPeerListenerFactory
            class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
            properties="hostName=192.168.26.205, port=40001, socketTimeoutMillis=2000"/-->

    <defaultCache
            maxEntriesLocalHeap="10000"
            eternal="false"
            timeToLiveSeconds="8600"
            timeToIdleSeconds="120"
            maxEntriesLocalDisk="10000000"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
        <pinning store="inCache" />
        <persistence strategy="localTempSwap"/>
    </defaultCache>

    <cache name="users"
           maxBytesLocalHeap="1G"
           eternal="false"
           timeToLiveSeconds="43200"
           memoryStoreEvictionPolicy="LRU">
        <pinning store="inCache" />
        <persistence strategy="none"/>

        <searchable keys="true" values="false" allowDynamicIndexing="false">
            <searchAttribute name="mobilityDomainBean" class="org.eltex.softwlc.apb.cache.MobilityDomainAttributeExtractor"/>
            <searchAttribute name="account" class="org.eltex.softwlc.apb.cache.AccountAttributeExtractor"/>
        </searchable>

        <!--cacheEventListenerFactory
                class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true,
                                                            replicateUpdatesViaCopy=false, replicateRemovals=true "/-->
    </cache>

    <cache name="hosts" maxBytesLocalHeap="128M" eternal="true">
        <persistence strategy="none"/>
    </cache>

</ehcache>
  • Количество оперативной памяти, выделяемое для хранения таблицы авторизованных пользователей настраивается параметром "maxBytesLocalHeap" в разделе:
    <cache name="users"
           maxBytesLocalHeap="200M"
           eternal="false"
           timeToLiveSeconds="43200"
           memoryStoreEvictionPolicy="LRU">
           . . .
    </cache>
  • Количество оперативной памяти, выделяемое для хранения таблицы с белыми списками настраивается параметром "maxBytesLocalHeap" в разделе:
    <cache name="hosts" maxBytesLocalHeap="128M" eternal="true">
        <persistence strategy="none"/>
    </cache>


/etc/eltex-apb/hosts.json

Cодержит набор списков белых адресов. В данном конфигурационном файле выполняется настройка белых списков (списки IP-адресов, на который можно перейти до авторизации на портале). При необходимости название и расположение файла может быть изменено в /etc/eltex-apb/apb.properties. По умолчанию данный список является пустым.

Пример заполнения файла:

[
  {
    "mobility-domain-list": [
      {
        "mobility-domain": "nsk.ru",
        "radius-domain": "root",
        "ssid": "Eltex-Local"
      }
    ],
    "permitted-ip-list": [
      "eltex.nsk.ru",
      "eltex.org"
    ]
  },
  {
    "permitted-ip-list": [
        "esia-portal1.test.gosuslugi.ru",
        "esia.gosuslugi.ru",
    ]
  }
]

  • Белый список, общий для всех подключенных точек задается в формате:
  [{
    "permitted-ip-list": [
        "esia-portal1.test.gosuslugi.ru",
        "esia.gosuslugi.ru",
    ]
  }]


  • Белый список, который назначается на точки с определенным SSID и доменом, записывается в следующем формате:
  [{
    "mobility-domain-list": [
      {
        "mobility-domain": "nsk.ru",
        "radius-domain": "root",
        "ssid": "Eltex-Local"
      }
    ],
    "permitted-ip-list": [
      "eltex.nsk.ru",
      "eltex.org"
    ]
  }]

Запись в приведенном выше конфигурационном файле говорит о том, что если на сервис поступит информация о пользователе, чьим mobility-domain является nsk.ru, radius-domain является root, а ssid – Eltex-Local, то данному пользователю до авторизации на портале помимо адресов из общего белого списка, будут доступны адреса eltex.nsk.ru и eltex.org. Другими словами, адреса, находящиеся в «permitted-ip-list», будут доступны пользователю, в случае полного совпадения всех ключей, описанных в рамках одного «mobility-domain-list».

Если параметры пользователя удовлетворяют критериям нескольких правил, ему будут разрешены для доступа IP-адреса из всех таких правил.

В параметр "mobility-domain" вносится значение параметра "ap-location" точки доступа, который находится в разделе сетевых настроек.

/etc/eltex-apb/log4j2.xml

Содержит настройки логирования.

/etc/eltex-apb/log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF" monitorInterval="10">
    <Properties>
        <Property name="rootLevel">${env:LOG_LEVEL:-INFO}</Property>

        <Property name="baseDir">/var/log/eltex-apb</Property>
        <Property name="maxFileSize">20 MB</Property>
        <Property name="accumulatedFileSize">100 MB</Property>
        <Property name="lastModified">4d</Property>
        <Property name="maxCount">7</Property>
        <Property name="logPattern">%d{ISO8601} [%t] %-5p %logger{1} %C{1}.%M(line:%L). %m%n"</Property>
        <Property name="dateSuffix">%d{yyyyMMdd}</Property>

        <Property name="gelfLevel">${env:GELF_LEVEL:-OFF}</Property>
        <Property name="gelfHost">${env:GELF_HOST:-udp:lab3-test.eltex.loc}</Property>
        <Property name="gelfPort">${env:GELF_PORT:-12201}</Property>
    </Properties>

    <Appenders>
        <Console name="STDERR" target="System.err">
            <PatternLayout pattern="${logPattern}"/>
        </Console>

        <RollingFile name="RollingFile"
                     filename="${baseDir}/apb.log"
                     filepattern="${baseDir}/log/apb-${dateSuffix}-%i.log.gz">
            <PatternLayout pattern="${logPattern}"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="${maxFileSize}"/>
                <OnStartupTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy max="${maxCount}">
                <Delete basePath="${baseDir}" maxDepth="1">
                    <IfFileName glob="*/apb-*.log.gz">
                        <IfAny>
                            <IfAccumulatedFileSize exceeds="${accumulatedFileSize}"/>
                            <IfLastModified age="${lastModified}"/>
                        </IfAny>
                    </IfFileName>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>

        <RollingFile name="CacheAppender"
                     filename="${baseDir}/apb-cache.log"
                     filepattern="${baseDir}/log/apb-cache-${dateSuffix}-%i.log.gz">
            <PatternLayout pattern="${logPattern}"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="${maxFileSize}"/>
                <OnStartupTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy max="${maxCount}">
                <Delete basePath="${baseDir}" maxDepth="1">
                    <IfFileName glob="*/apb-cache-*.log">
                        <IfAny>
                            <IfAccumulatedFileSize exceeds="${accumulatedFileSize}"/>
                            <IfLastModified age="${lastModified}"/>
                        </IfAny>
                    </IfFileName>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>

        <Gelf name="Gelf" host="${gelfHost}" port="${gelfPort}" version="1.1" facility="eltex-apb"
              extractStackTrace="true" originHost="%host{fqdn}" maximumMessageSize="8192">
            <Field name="thread" pattern="%t"/>
            <Field name="level" pattern="%level"/>
            <Field name="severity" pattern="%-5level"/>
            <Field name="logger" pattern="%logger{1}"/>
            <Field name="location" pattern="%C{1}.%M(line:%L)"/>
        </Gelf>
    </Appenders>

    <Loggers>
        <Root level="${rootLevel}">
            <AppenderRef ref="RollingFile"/>
            <AppenderRef ref="STDERR" level="OFF"/>
            <AppenderRef ref="Gelf" level="${gelfLevel}"/>
        </Root>

        <Logger name="org.springframework"  level="ERROR"/>
        <Logger name="org.apache"           level="ERROR"/>
        <Logger name="org.quartz"           level="ERROR"/>
        <Logger name="io.netty"             level="ERROR"/>
        <Logger name="io.grpc"              level="ERROR"/>

        <Logger name="net.sf.ehcache" additivity="false">
            <AppenderRef ref="CacheAppender"    level="DEBUG"/>
            <AppenderRef ref="RollingFile"      level="ERROR"/>
        </Logger>

    </Loggers>
</Configuration>
  • Автоматическое перечитывание конфигурации логгера:
<Configuration status="OFF" monitorInterval="10">
  • Уровень логирования:
<Property name="rootLevel">${env:LOG_LEVEL:-INFO}</Property>
  • Базовая директория хранения логов:
<Property name="baseDir">/var/log/eltex-apb</Property>
  • Максимально допустимый размер файла (при его превышении создается новый файл. а старый архивируется):
<Property name="maxFileSize">20 MB</Property>
  • Суммарный размер логов (текущий файл + архивные). При его превышении наиболее старые файлы будут удаляться:
<Property name="accumulatedFileSize">100 MB</Property>
  • Срок хранения логов, файлы модифицированные раннее этого срока будут удаляться:
<Property name="lastModified">4d</Property>
  • Максимальное количество архивных файлов, при его превышении наиболее старые файлы будут перезаписываться:
<Property name="maxCount">7</Property>
  • Блок настройки перенаправления логов в Graylog (уровень логирования, адрес, порт):
<Property name="gelfLevel">${env:GELF_LEVEL:-OFF}</Property>
<Property name="gelfHost">${env:GELF_HOST:-udp:lab3-test.eltex.loc}</Property>
<Property name="gelfPort">${env:GELF_PORT:-12201}</Property>

Настройка подключения точек доступа к сервису APB


Подключение к сервису APB на точке доступа можно настроить через GUI EMS.

Для настройки роуминга пользователей при портальной авторизации необходимо перейти в раздел КонфигурацияCaptive Portal.Global, указать адрес Roaming Service URL в формате: "<IP-aдрес_apb>:8090". IP-aдрес APB должен быть доступным из сети управления точками доступа.

Также настройте «Roaming no action timeout» (время, через которое ТД удалит устаревшие/неактивные записи о клиентах в роуминге). Параметр «Roaming no action timeout» должен быть не меньше максимальной длительности тарифного плана.

Затем во вкладке «Виртуальные точки доступа» необходимо открыть настраиваемый SSID и в блоке настроек Captive Portal указать «User Mobility Domain» (должен быть одинаковым для всех точек доступа, которые будут участвовать в роуминге).

  • Нет меток