"Sprzętowa" zmiana adresu MAC interfejsu LAN
Ostatnia zmiana: 2013-11-26 18:43

La Fonera oparta jest o tzw. system Atheros WiSOC czyli całość w jednym układzie. Jednym ze znanych problemów jest zmiana adresu MAC - problematyczna do wykonania programowo, gdyż w większości przypadków mimo pozorów po prostu nie działa, np. nie można później uzyskać adresu IP przez DHCP. Niniejszy dokument opisuje możliwość "sprzętowej" zmiany adresu MAC poprzez zmianę pliku konfiguracyjnego sprzętu.

Do poniższych opisów wykorzystaną urządzenie La Fonera w wersji FON2100A/B/C (wersja pierwotna), której RedBoot nie posiada polecenia set. Jako firmware wykorzystano OpenWrt w wersji trunk (z dnia 2008-10-03). Założono, że OpenWrt jest już zainstalowane i działa poprawnie.

UWAGA: Zmiana jest potencjalnie niebezpieczna - jakakolwiek nieostrożność może zakończyć się uszkodzeniem sprzętu. Robisz wszystko na własną odpowiedzialność.

W podobny sposób można zmienić adres MAC innych urządzeń opartych o SoC Atheros, np. D-Link DIR-300.

Ideologia

Jednym z obszarów w pamięci flash jest tzw. boardconfig, czyli obszar zawierający dane konfiguracyjne, m.im adresy MAC. Zmiana będzie poległa na odczycie tego obszaru, zmianę interesujących danych i ponowne zapisanie. Proste? Wręcz banalne.

Odczyt danych

Logujemy się do rutera. Po wydaniu polecenia dmesg powinna pojawić się m.in. informacja o podziale pamięci flash:


    Creating 6 MTD partitions on "spiflash":
    0x00000000-0x00030000 : "RedBoot"
    0x00030000-0x00730000 : "rootfs"
    mtd: partition "rootfs" set to be root filesystem
    mtd: partition "rootfs_data" created automatically, ofs=130000, len=600000 
    0x00130000-0x00730000 : "rootfs_data"
    0x00730000-0x007e0000 : "vmlinux.bin.l7"
    0x007e0000-0x007ef000 : "FIS directory"
    0x007ef000-0x007f0000 : "RedBoot config"
    0x007f0000-0x00800000 : "boardconfig"

Ostatnia partycja to właśnie poszukiwany boardconfig. Odczyt polega na odczytaniu odpowiedniego urządzenia mtd z /dev. Po wykonaniu


    # ls /dev/mtd*

powinna pojawić się lista partycji pamięci flash, oznaczonych mtd0, mtd1 itd. Interesuje nas ostatnia, w tym przypadku było mtd6. Należy więc odczytać jej zawartość poleceniem


    # cat /dev/mtd6 > /tmp/plik.bin

Plik ma wielkość 64KB.

Modyfikacja

Po wylogowaniu się z rutera należy przy pomocy scp (linux) lub winscp (windows) przenieść utworzony wcześniej plik do komputera. W przypadku linuksa będzie
to polecenie


    # scp root@192.168.1.1:/tmp/plik.bin .

Następnie przy pomocy dowolnego edytora hexadecymalnego (hex edytor, mc, hexedit - google do szukania) należy odnaleźć stary mac adres i zamienić go na nowy. W tym przypadku adres MAC WLAN zaczynał się pod offsetem 0x60 a pod offsetem 0x66 był adres mac LAN. Zmieniamy ten drugi na wymagany i zapisujemy zmiany.

Zapis danych

Plik należy znów wrzucić do rutera przez winscp lub przy pomocy linuksa


    # scp plik.bin root@192.168.1.1:/tmp

oraz zapisać znów do obszaru boardconfig, czyli


    # cd /tmp
    # mtd -r write plik.bin mtd6 

Po zapisaniu ruter powinien się zrestartować i ponownie podnieść interfejs już z nowym adresem MAC.

Zakończenie

Należy uważać żeby zapisać dane we właściwą partycje. Niewłaściwy zapis (w szczególności w RedBoot) może całkowicie unieruchomić urządzenie.