Poradíte mi debuggovat jeden podivný problém ohledně MAC adresy a DHCP handshake?? Je to docela zapeklité, protože se to děje NÁHODNĚ (50% : funkční, 50% nefunkční)
Používám RPI jako router a mám na něm změněnou MAC adresu. Veškerá konfigurace je v skriptu, který je primitivně "spuštěn" sudo /home/me/startuj.sh v /etc/rc.local . (Samozřejmě moduly jako dnsmasq,stubby, mají svoje konfiguráky , ale třeba i takový wpa_supplicant jde spustit onelinerem s argumentem -c <(wpa_passhrase ssid heslo) -i w1 )
První řádek skriptu je ip link set down w1; ip link set w1 address XX-YY-----XX; ip link set up ew1h1, pak tam je sysctl, iptables -A, dnsmasq &, stubby &, suplicant & (s těmi & přeháním, většina toho má nějaký parametr aby to běželo jako daemon)
PROBLÉM: V 50% případech po spuštění WPA_SUPPLICANTU odchozí komunikace DHCP obsahuje FIELD Client-Ethernet-Address což je políčko v "aplikační" vrstvě DHCP starou MAC (před změnou pomocí ip link set addr).
A to dokonce i po manuální kill wpa_supplicant a dalším spuštění wpa_supplicant & tcpdum -enti w1 -vvv
Samozřejmě MAC adresa paketů je vždy správná (to je ale adresa na linkové vrstvě), kvůli této neshodě mi DHCP SERVER NEODPOVÍ
Kde se bere ale ta náhodnost, že někdy se stihne někde kdesi schovaná proměnná obsahující MAC adresu, která se vstříkne do Client-Address a jindy tam zůstane viset stará (a je následně nekonzistence, že ip a už hlásí novou)?
Vařím z vody, ale soudím, že to nebude něco "systémového", protože MAC adresa paketů vždycky sedí správně, ale problém je ta hodnota uvnitř dhcp paketu a to musí obsluhovat nějaká služba DHCP.
Otázka 2: jak ručně vynutit, aby client-eth-addr byla aktuální, rovná mac adrese?
Otázka 3: je vůbec možné pole Client-eth-addr vypustit ? Nebo to je principiální nutnost, protože MAC adresu by mohl změnit router, když bude po cestě v rozlehlejší síti, ? A i tak, jde vypustit , čímž by se implikovalo, že se má použít mac adresa z paketu? (ale asi je to nebezpečné řešení)
Rozumím, by to bylo nejlepší mít nakonfigurované v deseti souborech ve stylu systemd, na ideálně vlastní unity, ale tohle byl prostě takové nejjednodušší zprovoznění (v podstatě ne deklarativně, ale konstruktivně-procedurálně: přijdu k počítači kde nic neběží a rozběhám router přímočaře na zelené louce, že do něj zadám příkazy. Ta samá posloupnost příkazů pak je obsahem toho startovacího skriptu ).