billing:nas_access_server:accelipoe_ipoe_ru

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 будет удалять созданные вланы. 

Описано в IPoE_dhcp_lua_ru.txt

Предположим, что клиенты находятся на интерфейсах 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.

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

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

[ipoe]
    username=ifname

В этом случае в качестве имени пользователя будет использован 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
  • Последнее изменение: 7 лет назад
  • alexd