Заметка про “настройку почтовых уведомлений” появилась не просто так. Дело в том, что в данный момент я “работаю над новым кластером” (если что, то старый тут), ну и попутно пытаюсь фиксировать то, что вылупляется в процессе длительной настройки и/или разработки. Так что тут будут появляться путевые заметки, которые так или иначе связаны с текущими проектами, и да, они скорее для себя, хотя если кому-то пригодится — буду только рад.
В этот раз заметка про ну очень странный USB Ethernet адаптер, который пришлось довольно долго и мучительно приручать.
Всё началось с покупки, я повёлся на цену в 120 российских рублей на Aliexpress. USB Ethernet вообще вещь полезная в хозяйстве, особенно во времена сверхтонких ноутбуков, планшетов и прочей античеловечной хуйни.
“Жаба” — вещь полезная, поэтому адаптеров было заказано целых два. Как выяснилось позднее — не зря. Оба адаптера имели одинаковый MAC-адрес.
Для тех, кто вдруг не в курсе. MAC-адрес — это уникальный идентификатор, который присваевается сетевому устройству. В теории, двух одинаковых MAC-адресов быть не может. И да, два устройства в одной сети с одинаковым MAC работать не будут. Однако, китайским детям, работающим в подвале за миску риса, видимо похуй.
Вторая неприятность — заявленные 100 мегабит превратились в 6. То есть устройство не могло прокачать через себя больше, чем 6 мегабит.
Эта проблема меня волнует не особо сильно, так как:
- Этой скорости точно хватит для подключения и работы в консоли.
- Адаптер, несмотря на рисовое происхождение, работает на удивление стабильно — доказано двенадцатичасовым тестом через iperf с непрерывной нагрузкой.
Кстати, второе утверждение справедливо только для свежайших ядер Linux. Там оно правильно определяется и работает с помощью модуля dm9601. И как там оно в Windows — мне неведомо. Хотя продавец засунул в посылку и диск с драйверами. Не знаю, что там :).
Короче, надо бороться с дуплицированным адресом, остальное — мелочи.
Бороться будем через механизм udev путём написания правил.
Сразу стоит сделать одну важную оговорку — я стараюсь отключить “фичу” predicatable interface names. Она появилась (вроде в systemd ?), и в целом весьма полезная, однако вымораживает в некоторых случаях. Для её отключения нужно передать параметр ядру —
net.ifnames=0
. Возможно, нужно будет передать ещё иbiosdevname=0
, но это скорее всего не для одноплатников, а для “полноценных компьютеров”, где этот самый BIOS есть.
Итак, пусть у нас есть некий желаемый MAC-адрес и predictable interface names благополучно отключен.
Создаем новое правило udev:
1 | $ cat /etc/udev/rules.d/11-usb-dm9601.rules |
В этом правиле мы присваиваем имя usbnet0
нашему адаптеру и принудительно меняем ему MAC на xx:yy:zz:aa:bb:cc
.
В случае если pin не отключен, правило должно иметь такой вид:
1 | SUBSYSTEM=="net",KERNEL=="eth*",ATTRS{product}=="USB 2.0 10/100M Ethernet Adaptor",ATTRS{idProduct}=="9700",ATTRS{idVendor}=="0fe6", RUN+="/bin/ip link set dev %k address xx:yy:zz:aa:bb:cc" |
Это у меня лично вроде срабатывало, однако в зависимости от фаз луны адаптер либо получал имя enXXYYZZAABBCC, что таки соответствует “предсказуемым интерфейсам”, либо имел вид enСТАРЫЙМАКАДРЕС
. Для определенности я отключил pin к хуям и именовал интерфейсы вручную, что в моем случае было вполне допустимо.
Итак, хреновина к покупке рекомендуется. Несмотря на все недостатки — она довольно стабильна, хоть и не быстра, стоит дёшево и может спасти ситуацию в довольно неожиданный момент.