Попробовал решить проблему самостоятельно.
Изменений в модуле ipt_MASQUERADE между ядром 2.6.8.1 и 2.6.10, где ошибка уже исправлена, оказалось не так уж много
http://tinyurl.com/cg4qf98Поскольку доступные исходники оказались только от прошивки 1.51, исправлять пришлось её. Патч наложился с одним легко устраняемым конфликтом в функции инициализации, сборка прошла без проблем.
На этом можно было бы остановиться и залить получившийся образ в модем, но между 1.51 и 1.58 достаточно много важных изменений, которые хотелось сохранить, поэтому дальше я решил внести это изменение в 1.58, заменив там модуль ipt_MASQUERADE.ko на самодельный. Это было не очень просто, так как потребовалось распотрошить образ на части, модифицировать образ файловой системы и собрать всё назад. По-хорошему, так делать, конечно, нельзя, и вместо одного модуля нужно было менять ядро целиком со всеми остальными модулями тоже, но мне хотелось внести как можно меньше своих изменений.
Получившаяся прошивка уже несколько дней работает стабильно и правильно сбрасывает состояние conntrack для UDP при смене внешнего адреса, подвисаний OpenVPN с её использованием не наблюдалось.
В связи с этим у меня есть две просьбы к сотрудникам D-Link:
- выложить исходники прошивки версии 1.58 для DSL-2500U/BRU/D;
- рассмотреть возможность применения указанного выше патча в будущих прошивках для устройств.