Содержание
-
- Настройка
- Типичные конфигурации
- Шейпер
Ссылки
Контакты
- contact@accel-ppp.org
- accel-ppp-users@lists.sourceforge.net
На данный момент поддерживаются L2 и L3 способы связи с клиентами. Старт сессии по DHCP Discover и неклассифицированному пакету.
Для реализации старта сессии по неклассифицированному пакету и использования общего интерфейса разработан вспомогательный модуль ядра.
Модуль ядра для каждой сессии (кроме vlan-per-user) создаёт виртуальный интерфейс, аналог ifb.
Этот интерфейс используется для шейпера и задания белого ип (нат).
Функциональное отличие L2 от L3, заключается в том что в случае L2 входящий пакет будет проверяться на совпадение mac адреса установленного при старте сессии, а исходящие пакеты будут отправляться прямиком на этот mac адрес, без дополнительных запросов ARP, что обеспечивает защиту от подмены IP/mac адресов. В случае L3 исходящий пакет будет маршрутизироваться согласно установленным правилам маршрутизации.
terminate <селектор сессии> hard
debug: libnetlink: RTNETLINK answers: Invalid argument
Описано тут
Предположим, что клиенты находятся на интерфейсах 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-client-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 может осуществляться тремя способами,выбирать способ следует исходя из конфигурации:
1. через Framed-Pool (либо выдачу адреса из сети для которой будет осуществляться перенаправление)
Для этого нужно в конфигурации указать специальный пул адресов, например:
[ip-pool] 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.
Не работает если в конфигурации указан ifcg=1
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 242 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 секунд, после чего будет осуществлена повторная попытка авторизации.
P.S. Для добавления ip адресов в таблицу l4-redirect-table=N (где N - номер таблицы) требуется настроить IPoE proto(для способов 2 и 3):
proto=n
Specifies number of protocol to be used for inserted routes.
Добавить значения в
/etc/iproute2/rt_protos и /etc/iproute2/rt_rables
Для типа [ipoe] proto=100
echo "100 accel/ipoe" >> /etc/iproute2/rt_protos echo "100 accel/ipoe" >> /etc/iproute2/rt_tables
proxy-arp работает следующим образом:
1. при получении запроса accel-ppp проверяет пришел ли запрос от авторизованного ип или нет
2. если запрос пришел от неавторизованного ип, то accel-ppp не отвечает
3. если от авторизованного, то проверяется наличие сессии запрашиваемого ип на интерфейсе с которого пришел запрос
4. если сессия найдена (т.е. запрашиваемый клиент находится на том-же интерфейсе и он ответит сам), то accel-ppp не отвечает
5. иначе accel-ppp отвечает мак адресом интерфейса
для корректной работы proxy-arp необходимо отлючить ядерный proxy-arp на рабочих интерфейсах
Поднимать MTU необходимо, только на qinq интерфейсе(bond и входящие в него eth).Так как используется лишний тег. На саб интерфейсах с одной меткой можно не поднимать, т.к. поле vlan id и так во фрейме есть и за счет тега не растет.
При количествах сессий более 700 и при режиме DHCP v4 необходимо тюнить sysctl, а именно расширять таблицу ARP, т.к. новые ядра не пишут ругань в dmesg и происходит аномалия при параметрах по умолчанию.
net.ipv4.neigh.default.gc_thresh1 = 4096
net.ipv4.neigh.default.gc_thresh2 = 8192
net.ipv4.neigh.default.gc_thresh3 = 12288
net.ipv6.neigh.default.gc_thresh1 = 4096
net.ipv6.neigh.default.gc_thresh2 = 8192
net.ipv6.neigh.default.gc_thresh3 = 12288