múltiples direcciones MAC en una interfaz de red física (Linux)


20

Pregunta simple: ¿Cómo puedo configurar varias direcciones MAC en una interfaz de red física (Linux)?

¿Por qué? Mi ISP está revisando ip <-> mac en GW y me gustaría enrutar el tráfico a través de mi "linuxbox" y luego reenviarlo con una IP de origen diferente.

Sin verificar ip <-> mac, usaré eth0, eth0: 0, pero en esta situación necesito una dirección MAC única para cada IP.

Respuestas:


28

Puede usar macvlan para crear múltiples interfaces virtuales con diferentes direcciones MAC.

ip link add link eth0 address 00:11:11:11:11:11 eth0.1 type macvlan
ip link add link eth0 address 00:22:22:22:22:22 eth0.2 type macvlan

En teoría, eso debería ser todo lo que necesita, aunque en algún momento algo se rompió en el núcleo y haría que usara un MAC para todo. No estoy seguro de cuál es el estado de eso; Ojalá esté arreglado.

De lo contrario, podría usar arptables para reescribir las direcciones MAC en la salida basada en la interfaz de salida o en la entrada basada en la IP de destino:

arptables -A OUT -o eth0.1 --arhln 06 -j mangle --mangle-hw-s 00:11:11:11:11:11
arptables -A OUT -o eth0.2 --arhln 06 -j mangle --mangle-hw-s 00:22:22:22:22:22
arptables -A IN -d 192.168.1.1 --arhln 06 -j mangle --mangle-hw-d 00:11:11:11:11:11
arptables -A IN -d 192.168.1.2 --arhln 06 -j mangle --mangle-hw-d 00:22:22:22:22:22

Desafortunadamente, arptables también es bastante defectuoso en mi experiencia.


1
Perdón por necropost, pero con respecto a la parte "en algún momento algo se rompió en el kernel y haría que usara una parte de MAC para todo", puede que no sea un error: tuve que configurar el kernel sintonizable "net.ipv4.conf .all.arp_ignore "a 1 para que esto funcione correctamente. También se pueden necesitar otros sintonizables ARP; Para más explicaciones, lea esto y esto .
MoonSweep

4

La razón por la cual su puente y su interfaz TAP comparten la misma dirección MAC, es porque el puente no tiene un MAC, hasta que está vinculado a una interfaz. Si crea un puente con BRCTL y realiza un "show brctl", encontrará que el puente tiene puertos vacíos (sin interfaz vinculada) Al vincular TAP0 a br0, naturalmente, se mostrará como el mismo MAC. Creé un puente de prueba, para ilustrar.

# brctl addbr testbr0

[root @ stooge, etc.] # brctl show testbr0
nombre de puente id de puente interfaces habilitadas para STP
testbr0 8000.000000000000 no

Creé tres TAPS de prueba. La salida de "brctl showmacs testbr0".

[root @ stooge, etc.] # brctl showmacs testbr0
puerto no mac addr es local? temporizador de envejecimiento
  1 86: 51: b6: 95: 0e: b6 sí 0.00
  2 86: 58: 63: c6: d4: e7 sí 0.00
  3 8a: a7: fa: 17: c5: 12 sí 0.00

Como puede ver, cada puerto de puente tiene una dirección MAC única, y el puente debe mostrar su MAC, como la primera interfaz enlazada. Si conecta una interfaz de red física, el puente Ethernet heredará su dirección MAC y moverá todas las interfaces virtuales hacia abajo. Ejemplo de unión eth0, al puente de prueba.

[root @ stooge, etc.] # brctl showmacs testbr0
puerto no mac addr es local? temporizador de envejecimiento
  4 AA: BB: CC: DD: EE: FF sí 0.00
  1 86: 51: b6: 95: 0e: b6 sí 0.00
  2 86: 58: 63: c6: d4: e7 sí 0.00
  3 8a: a7: fa: 17: c5: 12 sí 0.00

Usando "brctl show" nuevamente;

[root @ stooge, etc.] # show brctl
nombre de puente id de puente interfaces habilitadas para STP
testbr0 8000.00aabbccddee no eth0
                                                        tap00
                                                        tap01
                                                        tap02 

las interfaces TAP han bajado una, aunque eth0, todavía está en el PUERTO 4. Todavía tiene direcciones MAC únicas. Si el puente Ethernet está vinculado a una interfaz de ruta de origen, no tiene opción de usar una dirección IP o DHCP. Por lo que vale, si conecta una interfaz de ruta de origen, mostrará una dirección MAC "no local". Esta es la dirección MAC del enrutador del siguiente salto. Sé que en RedHat, hay una opción para especificar una IP de origen, usando IFCONFIG. Mi primera opción sería consultar la referencia del comando IP, ya que creo que puede especificar una IP de origen. Nunca lo he intentado


3

Intente crear tapdispositivos o cualquier otro dispositivo virtual de Ethernet con las direcciones MAC e IP necesarias y luego conéctelos en un puente con eth0.


Ya lo intenté y no funciona. Si uso br0 (eth0, tap0, tap1). Tengo que configurar IP en br0 para que la red funcione. Sin IP (ifconfig br0 0.0.0.0 up) la red no funciona. Entonces, cuando configuro IP en br0 y tap0. (desde win-pc) Puedo hacer ping a ambas IP pero después de arp -a cada una de ellas tiene el mismo MAC.
toronja

0

Parece que podría usar vconfig para crear múltiples direcciones vlan en el mismo ethernet físico, cada una con diferentes direcciones mac.


El tráfico de todas las IP debe estar sin etiquetar
gelraen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.