?

Log in

No account? Create an account

Previous Entry | Next Entry

OpenWRT @ D-Link DIR-320

7 месяцев назад я купил забавную железкуDIR-320, забавную тем, что на ней, как и на каждом первом SOHO-роутере, бегает linux и, более того, под которую несложно состряпать свою прошивку.

Увы, полгода назад ситуация с поддержкой DIR-320 ванильным ядром была довольно грустна: если хотелось сохранить работоспособного wi-fi, то требовалось ставить ядро 2.4, в котором довольно плохо поддерживался USB. Это «довольно плохо» выражалось в том, что в произвольные моменты времени подключенная через USB флэшка или винт «отваливались» и более в систему не возвращались без классического паса руками «выключить и снова включить».

В ядре 2.6 же в драйвере b43 на тот момент не было поддержки LP_PHY для чипа BCM4318, точнее, работа над ним только начиналась и реализация была помечена как BROKEN. Но и в настоящий момент поддержка железа тоже далека от идеала, на странице драйвера b43 отмечено, что режим точки доступа на чипах 4318 не поддерживается из-за больших потерь пакетов при высоких скоростях. Действительно, при попытке завести точку доступа на всех 54 мегабитах 802.11g клиент к точке даже не мог подключиться из-за потерь пакетов, но если ограничить аппетиты 11 мегабитами 802.11b, то связь хоть и достаточно паршиво, но работает — для серфинга хватает.

Другое занятное развлечение — упихать максимально возможный набор утилит в 3.5 мегабайта флэшки. У меня уместились:

  • busybox, включая wget, crond, telnetd, syslogd, dhcp-клиент и dhcp-сервер
  • dropbear — ssh-сервер для управления роутером, т.к. telnet используется только для первоначальной конфигурации
  • madplay и драйвера для usb-звуковухи, которые в сопряжении с wget дают возможность играть разнообразные mp3-потоки, включая Радио «Воруй-Убивай»
  • transmission и web-интерфейс к нему — легковесная качалка/раздавалка торрентов
  • hostapd для работы wi-fi в режиме точки доступа
  • openntpd для поддержания точного времени на маршрутизаторе — наличие точного времени очень полезно при чтении логов
  • unfsd + portmap — NFS-сервер
  • pppd с поддержкой PPPoE
  • nvram + mtd для обновления прошивки без неудобных манипуляций с начальным загрузчиком

Для более плотного утрамбовывания я выкинул httpd из busybox, заменил dnsmasq на связку из udhcpd (для DHCP-сервера) и скриптов для iptables, которые позволяют отдавать статические настройки DNS через DHCP, чем выйграл порядка 80 килобайт. Также я заменил «ядрёный» NFS-сервер на unfs3, тут выйгрыш составил более 200 кб. При сборке transmission я использовал статические версии openssl, curl и libevent, что дало еще порядка полумегабайта места. Конечно, в openwrt включён скрипт mklibs.py, оптимизирующий динамические версии библиотек, удаляя из них не используемый приложениями код, но в случае с transmission он по какой-то причине работал некорректно, приводя к segfault при запуске демона. Судя по информации, полученной скупыми отладочными утилитами, mklibs.py вырезает много лишнего из libnsl.so и librt.so. Статическая линковка же является более отработанной технологией и в случае, если библиотека используется только одним приложением, даёт даже более хорошие результаты чем использование mklibs.py, но, увы, uclibc и libm остаются не оптимизированными. Вероятно, размер прошивки можно уменьшить еще на ≈100 кб., совместив эти два метода.

Конечно, целый набор ложек дёгтя тоже имеет место. Памяти на маршрутизаторе всего 32 мегабайта и одновременный старт NFS-сервера и torrent-клиента приводят к неимоверным тормозам всего кроме самой маршрутизации, доводя LA до ≈5. Поэтому стоит написать какие-то скрипты, переключающие «режимы работы» роутера. Более того, эти скрипты вполне можно запускать с помощью ssh, web-браузера или кнопки на торце роутера. Другой неприятностью является далеко не идеальная работа wi-fi, но для нужд интернет-радио и просмотра фильма с NFS-сервера стабильности хватает. Третья — uClibc не поддерживает fallocate и, соответственно, быстрое выделение нефрагментированного участка диска на разделе с ext4, а eglibc без плясок с бубном не собирается. Других проблем я пока не обнаружил.

Если кому-то интересны мои конфиги — их можно взять по адресу http://darkk.net.ru/home/openwrt

Метки:

Comments

darkk
2 сент, 2014 07:52 (UTC)
Re: nf_conntrack: table full, dropping packet.
1. посмотреть, кто съел все соединения по данным /proc/net/ip_conntrack — возможно, достаточно будет ликвидации какого-нибудь флудера
2. если в conntrack много старых соединений, которые при этом уже точно не активны (например, клиенты регулярно отваливаются от сети, не закрывая соединения), то понизить время хранения записи в таблице через net.netfilter.nf_conntrack_tcp_timeout_established
2. если памяти достаточно, то повысить число хранимых соединений через net.nf_conntrack_max
Алексей Зангиев
2 сент, 2014 09:53 (UTC)
Re: nf_conntrack: table full, dropping packet.
Я не знаю, как на dir 320 можно выйти по дирректории, и так же не знаю как прописывать команды.
darkk
2 сент, 2014 10:32 (UTC)
Re: nf_conntrack: table full, dropping packet.
Я не знаю, как вам в этом случае помочь: я не знаю, какие интерфейсы вам доступны для редактирования конфигурации ядра и какими из них вы умеете пользоваться.

Я бы предложил изучить какой-нибудь вводный документ про администрирование linux-серверов прежде чем править заводские настройки маршрутизатора.
http://tldp.org/LDP/lame/LAME/linux-admin-made-easy/
http://www.tldp.org/LDP/sag/html/index.html
https://www.linode.com/docs/tools-reference/linux-system-administration-basics

Profile

darkk
Leonid Evdokimov
Website

Комментарии

  • 2 сент 2014, 10:32
    Я не знаю, как вам в этом случае помочь: я не знаю, какие интерфейсы вам доступны для редактирования конфигурации ядра и какими из них вы умеете пользоваться.

    Я бы предложил изучить какой-нибудь…
  • 2 сент 2014, 09:53
    Я не знаю, как на dir 320 можно выйти по дирректории, и так же не знаю как прописывать команды.
  • 2 сент 2014, 07:52
    1. посмотреть, кто съел все соединения по данным /proc/net/ip_conntrack — возможно, достаточно будет ликвидации какого-нибудь флудера
    2. если в conntrack много старых соединений, которые при этом уже…
  • 2 сент 2014, 03:08
    Приветствую. Скажи, как решить проблему если nf_conntrack сообщает что table full, dropping packet.
    Версия прошивки:
    1.2.94
    Время сборки:
    Fri May 13 14:44:42 MSD 2011
  • 21 июл 2014, 11:17
    Лучшее, что могу вам предложить – прислать мне на почту config.xml, а я вам обратно пришлю пароль.

    С установкой python на windows я точно ничем не помогу.
Разработано LiveJournal.com
Designed by Tiffany Chow