Перестал работать IPoE на ядрах, начиная с 4.4.0-143 (Ubuntu 16.04)
Posted: 04 Apr 2019, 09:10
Доброе время суток,
Используем Accel-PPP 1.11.1 (слегка пропатченный, но не в части IPoE) на Ubuntu 16.04. При очередном апгрейде ядра с 4.4.0-142 на 4.4.0-143 перестал работать IPoE. Откат на предыдущее ядро проблему решает.
Модуль IPoE под новые ядра собирается без ругани и грузится успешно. IPoE-подключения (L2, инициируемые по DHCP) поднимаются также успешно. Но трафик в них не идет совсем. Причина проблемы, по-видимому в следующем: сразу после получения DHCP-лизы клиент запрашивает по ARP mac-адрес гейтвея. Запрос приходит не на вновь созданный ipoe-интерфейс, а на интерфейс несущего ВЛАНа:
Это, по-видимому, правильно. На старых беспроблемных ядрах (до -142 включительно), запросы идут туда же. Разница в том, что на старых ядрах, в отличие от новых, сервер еще и отвечает на эти ARP-запросы:
Дальше на старом ядре трафик начинает идти уже через ipoe-интерфейс и все оканчивается благополучно. На новом ядре все зависает на вечном ARP-опросе.
Прописывание статической ARP-записи для гейтвея на клиенте проблему немедленно решает, трафик начинает идти. Включение proxy ARP на несущем ВЛАН-овом интерфейсе сервера проблему, наоборот, не решает.
Я догадываюсь, что проблема с новыми ядрами может быть как проблемой самого ядра (например при залатывании какой-то уязвимости сломали обработку ARP-запросов), так и проблемой взаимодействия модуля IPoE (или самого Accel-PPP) с ядром, т.к. механизм proxy ARP в Accel-PPP, насколько я понимаю, свой самобытный.
Хотелось бы помощи в этой проблеме.
Используем Accel-PPP 1.11.1 (слегка пропатченный, но не в части IPoE) на Ubuntu 16.04. При очередном апгрейде ядра с 4.4.0-142 на 4.4.0-143 перестал работать IPoE. Откат на предыдущее ядро проблему решает.
Модуль IPoE под новые ядра собирается без ругани и грузится успешно. IPoE-подключения (L2, инициируемые по DHCP) поднимаются также успешно. Но трафик в них не идет совсем. Причина проблемы, по-видимому в следующем: сразу после получения DHCP-лизы клиент запрашивает по ARP mac-адрес гейтвея. Запрос приходит не на вновь созданный ipoe-интерфейс, а на интерфейс несущего ВЛАНа:
Code: Select all
root@p16:/proc/sys/net/ipv4/conf/br1.1009# tcpdump -i br1.1009 -nnl
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br1.1009, link-type EN10MB (Ethernet), capture size 262144 bytes
11:38:21.388445 ARP, Request who-has 10.0.0.2 tell 10.128.5.24, length 46
11:38:22.391160 ARP, Request who-has 10.0.0.2 tell 10.128.5.24, length 46
11:38:23.388449 ARP, Request who-has 10.0.0.2 tell 10.128.5.24, length 46
11:38:24.388450 ARP, Request who-has 10.0.0.2 tell 10.128.5.24, length 46
11:38:25.390986 ARP, Request who-has 10.0.0.2 tell 10.128.5.24, length 46
11:38:26.388470 ARP, Request who-has 10.0.0.2 tell 10.128.5.24, length 46
Code: Select all
root@rugay:~# tcpdump -i br1.1009 -nnl arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br1.1009, link-type EN10MB (Ethernet), capture size 262144 bytes
11:53:31.014869 ARP, Request who-has 10.0.0.6 tell 10.128.5.24, length 46
11:53:31.014948 ARP, Reply 10.0.0.6 is-at ac:1f:6b:90:b4:97, length 28
Прописывание статической ARP-записи для гейтвея на клиенте проблему немедленно решает, трафик начинает идти. Включение proxy ARP на несущем ВЛАН-овом интерфейсе сервера проблему, наоборот, не решает.
Я догадываюсь, что проблема с новыми ядрами может быть как проблемой самого ядра (например при залатывании какой-то уязвимости сломали обработку ARP-запросов), так и проблемой взаимодействия модуля IPoE (или самого Accel-PPP) с ядром, т.к. механизм proxy ARP в Accel-PPP, насколько я понимаю, свой самобытный.
Хотелось бы помощи в этой проблеме.