IPoE_ru.txt (устарел)

Ниже приведено содержимое файла IPoE_ru.txt

На данный момент поддерживаются L2 и L3 способы связи с клиентами. Старт сессии по DHCP Discover и неклассифицированному пакету. Для реализации старта сессии по неклассифицированному пакету и использования общего интерфейса разработан вспомогательный модуль ядра. Модуль ядра для каждой сессии (кроме vlan-per-user) создаёт виртуальный интерфейс, аналог ifb.

Этот интерфейс используется для шейпера и задания белого IP (NAT).

Функциональное отличие L2 от L3, заключается в том что в случае L2 входящий пакет будет проверяться на совпадение mac адреса установленного при старте сессии, а исходящие пакеты будут отправляться прямиком на этот mac адрес, без дополнительных запросов ARP, что обеспечивает защиту от подмены IP/mac адресов. В случае L3 исходящий пакет будет маршрутизироваться согласно установленным правилам маршрутизации.

Общий обзор конфигурационного файла

[ipoe]

    verbose=n
    Если n больше нуля то будут генерироваться более подробные логи.

    username=ifname|lua:имя_функции
    Эта опция определяет как будет определяться имя пользователя.
    Если username=ifname, то именем пользователя будет имя интерфейса
    с которого пришел запрос.
    Если username==lua:имя_функции, то имя пользователя должна будет
    сформировать функция имя_функции (подробнее описано ниже). По
    умолчанию для DHCP сессий username=ifname, для сессий "по
    неклассифицированному пакету" - IP адрес клиента.

    password=username|empty|пароль
    Определяет как будет формироваться пароль.
        Если password=username - то пароль будет соотвествовать username.
    password=empty - пароль будет пустой.
    password=пароль - пароль, соотвествеено, задаётся строкой пароль.

    lua-file=имя_файла
    Указывает имя файла с lua скриптом, который используется для
    написания вспомогательных функций.

    lease-time=n
    Эта опция указывает время аренды (в секундах) которое будет
    отправлено DHCP клиентам.

    max-lease-time=n
    Указывает время по истечении которого сессия будет прервана, если
    от DHCP клиента не было запрос на продление аренды.

    unit-cache=n
    Так-же как и для ppp эта опция используется для уменьшения
    негативного эффекта от низкой скорости создания и удаления
    интерфейсов (актуально только для сессий которые используют
    вспомогательный модуль ядра).
    Смысл в том что после завершения сессии интерфейс не удаляется а
    помещается в кэш, так что новые сессии могут его использовать повторно.

    l4-redirect-table=n
    Задаёт номер таблицы для L4-redirect (подробнее рассмотрено ниже).

    l4-redirect-ipset=наименование
    Задаёт наименование ipset списка для L4-redirect (подробнее рассмотрено ниже).

    agent-remote-id=идентификатор
    В случае если accel-ppp работает в качестве релея, то в DHCP запросы
    будет вставляться опция 82 с указанным agent-remote-id и agent-circuit-id
    с именем интерфейса с которого пришел запрос.

    shared=0|1

    mode=L2|L3

    start=dhcpv4|up

    ifcfg=0|1

    relay=адрес

    giaddr=адрес

    proxy-arp=0|1
    Эти параметры задают значения по умолчанию для по-интерфейсного конфига (см. ниже).

    interface=[re:]ifname[,shared=0|1][,mode=L2|L3][,start=dhcpv4|up][,ifcfg=0|1][,range=сеть/маска][,relay=адрес][,giaddr=адрес]
    Эта опция указывает какие интерфейсы использовать для связи с клиентами
    (для ожидания DHCP и неклассифицированных пакетов). Можно указывать
    несколько этих опций.

    Если перед ifname стоит префикс re:, то ifname интерпретируется как
    регулярное выражение, таким образом одной опцией можно указать множество
    интерфейсов.

    shared=0|1 - указывает доступно ли через этот интерфейс несколько
                 клиентов, либо может быть только один (в случае
                 vlan-per-user).

    mode=L2|L3 - указывает вид связи, L2 - клиенты находятся в одной сети
                 что и интерфейс, L3 - клиенты находятся за маршрутизатором.

    start=dhcpv4|up - указывает каким образом запускать сессию, dhcpv4 - по
                      DHCP Discover, up - по неклассифицированному пакету.

    ifcfg=0|1 - указывает должен ли accel-ppp управлять назначением ип
                адресов и маршрутов на интерфейсе, либо он сконфигурирован
                внешне (подробнее описано ниже).

    range=сеть/маска - указывает локальный пул адресов для DHCP клиентов в
                       случае если accel-ppp выдаёт адреса, первый адрес
                       сети будет считаться адресом маршрутизатора (более
                       подробно описано ниже).

    relay=адрес - указывает адрес DHCP сервера на который нужно перенаправлять
                  запросы. Так-же необходимо указать giaddr

    giaddr=адрес - указывает свой адрес релей агента (Relay Agent IP Address).
                   Если ifcfg=1 то этот адрес будет добавлен на интерфейс при
                   старте. Так-же при старте должен существовать маршрут
                   giaddr<-->relay

    proxy-arp=0-2 - указывает должен ли accel-ppp отвечать на arp запросы.
                    Подробнее описано ниже

    local-net=сеть/маска
    Указывает список сетей пакеты которых будут считаться неклассифицированными.
    Можно указывать несколько таких опций.

    attr-dhcp-client-ip=атрибут
    Указывает в каком радиус атрибуте передаётся ип адрес клиента (актуально
    только для DHCP).

    attr-dhcp-router-ip=атрибут
    Указывает в каком радиус атрибуте передаётся ип адрес маршрутизатора
    (актуально только для DHCP).

    attr-dhcp-mask=атрибут
    Указывает в каком радиус атрибуте передаётся маска сети (актуально
    только для DHCP).

    attr-l4-redirect=атрибут
    Указывает в каком радиус атрибуте передаётся информация об необходимости
    добавить правило для L4-redirect (подробнее описано ниже).

    proto=номер
    Задаёт номер протокола с которым будут добавляться маршруты (по
    умлочанию 3 - boot).

    offer-delay=задежка[,задержка:кол-во[,задежка:кол-во[,...]]]
    Задаёт задержку или задержки DHCPOFFER в зависимости от количества
    активных сессий (в милисекундах).
    Последняя задержка в списке может иметь значение -1, что означает не
    принимать новых соединений.
    Список должен быть отсортирован в порядке возрастания количества сессий.

    vlan-mon=[re:]ifname[,список_вланов]
    Эта опция запускает монитор вланов на указаном интерфейсе (работает
    при поддержки модуля в ядре ipoe)

    список_вланов - указывает список допустимых вланов в форме
                    vlan-mon=eth1,5,7,9,100-200

    В случае появления пакета на интерфейсе в указанных вланах accel-ppp
    будет создавать вланы в форме eth1.XXX и применять к ним настройки
    из опции interface c подходящим именем интерфейса

    После окончания сессии или по таймаутут (если сессия не была запущена)
    accel-ppp будет удалять созданные вланы.

Использование LUA для формирования имени пользователя на основе DHCP пакета

Описано в IPoE_dhcp_lua_ru.txt

Варианты использования

L2-connected, старт по DHCP Discover, общий интерфейс

Предположим, что клиенты находятся на интерфейсах vlan2, vlan3, vlan4. Перед запуском accel-ppp эти интерфейсы должны быть подняты. Далее возможны два варианта: интерфейсы конфигурируются вручную (ifcfg=0), либо это делает accel-ppp (ifcfg=1) Если делегировать эту функцию accel-ppp, то он при старте сессии будет добавлять на интерфейс адрес siaddr с маской 32 и маршрут yiaddr src siaddr.

1. локальные адреса раздаёт локальный пул

[ipoe]
    mode=L2
    shared=1
    start=dhcpv4
    ifcfg=0 или 1 (см. выше)
    interface=vlan2,range=192.168.1.0/24
    interface=vlan3,range=192.168.2.0/24
    interface=vlan4,range=192.168.3.0/24
    lua-file=/etc/accel-ppp.lua
    username=lua:username

Так-же следует отметить что в качестве адреса сервера (роутера) будет выбран первый адрес из пула, т.е. 192.168.1.1 для vlan2, 192.168.2.1 для vlan3 и 192.168.3.1 для vlan4.

Клиентам будет отправлена маска /24.

2. адреса выдаёт радиус

[ipoe]
    mode=L2
    shared=1
    start=dhcpv4
    ifcfg=0 или 1 (см. выше)
    interface=re:^vlan[2-4]$
    attr-dhcp-cleint-ip=DHCP-Client-IP-Address
    attr-dhcp-router-ip=DHCP-Router-IP-Address
    attr-dhcp-mask=DHCP-Mask
    lua-file=/etc/accel-ppp.lua
    username=lua:username

Т.к. эти атрибуты нестандартные их нужно добавить в словарь радиус атрибутов, например так:

ATTRIBUTE DHCP-Client-IP-Address 240 ipaddr ATTRIBUTE DHCP-Router-IP-Address 241 ipaddr ATTRIBUTE DHCP-Mask 242 integer

3. информацию для клиента выдаёт внешний DHCP сервер

[ipoe]
    mode=L2
    shared=1
    start=dhcpv4
    ifcfg=0 или 1 (см. выше)
    relay=172.16.7.8
    agent-remote-id=accel-ppp
    interface=vlan2,giaddr=192.168.1.1
    interface=vlan3,giaddr=192.168.2.1
    interface=vlan4,giaddr=192.168.3.1
    lua-file=/etc/accel-ppp.lua
    username=lua:username

Для каждой сессии будут создаваться псевдоинтерфейсы типа vlan2.ipoe0,vlan2.ipoe1 и т.д.

Если радиус (или локальный пул) выдаст внешний ип, то он будет назначен на этот псевдоинтерфейс и с помощью него будет осуществляться NAT.

Так-же если радиус выдаст параметры для шейпера, то он будет сконфигурирован на этом псевдоинтерфейсе.

L2-connected, старт по DHCP Discover, vlan-per-user

Возможны два варианта: ip-unnumbered, либо обычный локальный ип + NAT. Варианты конфигурации аналогичны предыдущим, за исключением того что нужно заменить shared=0. В случае ip-unnumbered вспомогательный модуль ядра не требуется, клиенту локальный IP выдавать не нужно, нужно выдать только белый IP. Так-же в случае ip-unnumbered можно использовать имя интерфейса в качестве имени пользователя:

[ipoe]
    username=ifname

L2/L3-connected, старт по неклассифицированному пакету

В этом случае в качестве имени пользователя будет использован IP адрес отправителя пакета. Адреса которые будут считаться неклассифицированными указываеются в local-net.

[ipoe]
    mode=L2 или L3
    shared=1
    start=up
    interface=re:^vlan[2-4]$
    local-net=192.168.0.0/24
    local-net=192.168.1.0/24

Гибридная конфигурация

Предусмотрена возможность установки для каждого интерфейса индивидуальных параметров.

Например, требуется на интерфейсе vlan2 использовать L2, запуск по DHCP Discover, локальный пул адресов, на vlan3 - L2, запуск по DHCP, запросы релееить на внешний сервер, на vlan4 - L3, запуск по неклассифицированному пакету:

[ipoe]
    mode=L2
    shared=1
    start=dhcpv4
    ifcfg=0 или 1 (см. выше)
    lua-file=/etc/accel-ppp.lua
    username=lua:username
    interface=vlan2,range=192.168.1.0/24
    interface=vlan3,relay=172.16.7.8,giaddr=192.168.2.1
    interface=vlan4,mode=L3,start=up

L4-redirect

L4-redirect может осуществляться тремя способами:

1. через Framed-Pool (либо выдачу адреса из сети для которой будет осуществляться перенаправление)

Для этого нужно в конфиге указать специальный пул адресов, например:

[ippool]
172.16.16.253/23,name=l4-redirect

Задать для этой сети правило

ip rule add from 172.16.16.253/24 table l4-redirect
ip route add default via л4_сервер table l4-redirect

либо

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination л4_сервер

Таким образом для клиентов которым нужно организовать перенаправление радиус должен прислать атрибут Framed-Pool=l4-redirect, либо Framed-IP-Address с адресом из этой сети.

Так-же, в случае DHCP, имеет смысл установить небольшое время жизни сессии с помощью атрибута Session-Timeout=300 чтобы обеспечить переавторизацию.

Если DHCP не используется, то адрес можно изменить с помощью CoA.

2. с помощью специального радиус атрибута

В этом случае если в кофиге указана l4-redirect-table для клиентов будут создаваться правила

ip rule add from адрес_клиента table таблица

если в конфиге указано l4-redirect-ipset, то адреса клиентов будут добавляться в указаный ipset список.

Для этого нужно в конфиге указать атрибут через который будет приходить информация, а так-же номер таблицы или наименование ipset списка, например:

[ipoe]
    attr-l4-redirect=L4-Redirect
    l4-redirect-table=100

либо

    l4-redirect-ipset=l4-redirect

Т.к. этот атрибут нестандартный его нужно добавить в словарь радиус атрибутов, например так:

ATTRIBUTE L4-Redirect              243 integer

Атрибут может быть integer или string. Для integer любое значение больше нуля считается что нужно включить l4-redirect, 0 - выключить.

Для string любая строка начинающаяся на 0, либо пустая строка - выключить, иначе включить.

3. Access-Reject от радиуса

Что-бы включить этот режим нужно указать l4-redirect-on-reject= кол-во секунд

[ipoe]
    l4-redirect-on-reject=300
    l4-redirect-table=100

либо

    l4-redirect-ipset=l4-redirect

В этом случае если радиус ответит запретом будет создано правило

    ip rule add from адрес_клиента table 100

либо адрес будет добавлен в ipset список и удалено по истечению 300 секунд, после чего будет осуществлена повторная попытка авторизации.

PROXY ARP

proxy-arp работает следующим образом:

1. при получении запроса accel-ppp проверяет пришел ли запрос от авторизованного ип или нет

2. если запрос пришел от неавторизованного ип, то accel-ppp не отвечает

3. если от авторизованного, то проверяется наличие сессии запрашиваемого ип на интерфейсе с которого пришел запрос

4. если сессия найдена (т.е. запрашиваемый клиент находится на том-же интерфейсе и он ответит сам), то accel-ppp не отвечает

5. иначе accel-ppp отвечает мак адресом интерфейса для корректной работы proxy-arp необходимо отлючить ядерный proxy-arp на рабочих интерфейсах

billing/nas_access_server/accelipoe_ipoe_ru.txt · Последние изменения: 2017-05-13 23:17 — Александр Дудяк
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki