De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Ricardo Jurczyk Pinheiro
Data de Publicação: 08 de November de 2008
É sabido por muitos que os chipsets southbridge da NVidia tem um probleminha irritante: Quando em uso com o módulo forcedeth, ele recebe o endereço MAC (físico) errado. Logo, se você usa DHCP, é provável que faça que nem eu, que seta o endereço IP das suas máquinas com base no endereço físico. E o que acontece? A máquina não recebe o IP certo. O curioso é que nem todos tem esse problema: Meu desktop tem uma Abit NF8-V (chipset NForce), mas o endereço MAC passado é o certo. Mas em outras placas, não.
Algumas soluções na Internet (http://tinyurl.com/64gtg6 e http://tinyurl.com/5lccut) apontam para fixar o MAC address com uma regra no udev. Funciona muito bem, mas complica quando você usa várias máquinas, e tem que fazer isso "na mão". Eu tenho 52 máquinas com dual-boot ("Janelas" e Linux), sendo que a maioria delas tem esse problema. Fazer isso em cada uma seria uma tarefa inviável. Pensei em montar um script com uma grande tabela, para setar o MAC em cada uma, mas qual seria o identificador único de cada hardware que eu usaria, e que não fosse o endereço físico?
Pensei um pouco, fui futucar... E vi essa saída do dmesg:
(...) [ 28.296465] forcedeth 0000:00:07.0: invalid Mac address detected: 9b:ee:b4:ea:0f:00 (...)
Olhei e vi que nessas placas (Gigabyte GA-M61VME-82, chipset Nforce 6100), o endereço MAC é passado ao contrário para o Linux. Note abaixo como é:
Endereço MAC certo: 00:0f:ea:b4:ee:9b Endereço MAC errado: 9b:ee:b4:ea:0f:00
Logo, podemos fazer uma acochambração no /etc/rc.local: Pego o endereço MAC ao contrário no dmesg, inverto-o e seto via ifconfig (que permite que eu faça MAC spoofing, hehehe). Depois é só rodar o dhclient novamente, e IP certo. Abaixo vai a minha solução, orgulhosamente implementada em três linhas :-)
ifconfig eth0 down hw ether 00:00:00:00:00:01 ifconfig eth0 up hw ether $(dmesg | grep Invalid | cut -f5- -d":" | tr ':' ' ' | sed 1q | sed 's/^/§ /;:a;s/\(.*\)§ \+\([^ ]\+\)/\2 \1§/;ta;s/§//' | tr ' ' ':' | cut -f1-6 -d':') dhclient eth0
O que ele faz:
1ª linha: Desliga a controladora Ethernet padrão, e seta o MAC address com um endereço zerado.
2ª linha: A "mágica": Ele filtra a saída do dmesg, pega a linha onde o endereço MAC está trocado, remove os dois-pontos ":" como separadores, e usa um comando com o sed para inverter a ordem das palavras. Depois coloca os dois-pontos, e remove o último caracter. Esse endereço MAC certo, ele seta para essa máquina.
3ª linha: Pega o novo IP, baseado nesse MAC address.
Enquanto o chipset não é arrumado, ou o módulo não é mexido... Essa solução está servindo muito bem, por isso estou passando para a Dicas-L, pois pode ser útil para alguém.
Ricardo Jurczyk Pinheiro - Linux user #82838 - http://estudiodaintrospeccao.blogspot.com
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários