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