====== 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 на рабочих интерфейсах