"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
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.