하나의 물리적 네트워크 인터페이스에 여러 개의 MAC 주소 (Linux)


20

간단한 질문 : 하나의 물리적 네트워크 인터페이스 (Linux)에 여러 MAC 주소를 설정하려면 어떻게해야합니까?

왜? 내 ISP가 GW에서 ip <-> mac을 확인하고 있으며 "linuxbox"를 통해 트래픽을 라우팅하고 다른 소스 IP로 전달하는 것을 좋아합니다.

ip <-> mac을 확인하지 않고 eth0, eth0 : 0을 사용하지만이 상황에서는 모든 IP에 고유 한 MAC 주소가 필요합니다.

답변:


28

macvlan을 사용하여 다른 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

이론적으로는 당신이 필요로하는 모든 것이지만, 어떤 시점에서 커널에서 무언가가 깨져서 모든 것에 하나의 MAC을 사용하게 할 것입니다. 그 상태가 무엇인지 잘 모르겠습니다. 잘만되면 그것은 고쳐졌다.

그렇지 않은 경우 arptables를 사용하여 송신 인터페이스를 기반으로하는 출력 또는 대상 IP를 기반으로하는 입력에서 MAC 주소를 다시 쓸 수 있습니다.

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

불행히도 arptables도 내 경험에서 매우 버그가 있습니다.


1
necropost에 죄송하지만 "어떤 시점에서 커널에서 문제가 발생하여 모든 것에 대해 하나의 MAC을 사용하게됩니다"부분에 대해서는 버그가 아닐 수 있습니다. 커널 조정 가능 "net.ipv4.conf를 설정해야했습니다. .all.arp_ignore "를 1로 설정하면 올바르게 작동합니다. 다른 ARP 튜너 블도 필요할 수 있습니다. 자세한 설명은 this and this을 읽으십시오 .
MoonSweep

4

브리지와 TAP 인터페이스가 동일한 MAC 주소를 공유하는 이유는 브리지에 인터페이스가 연결될 때까지 브리지에 MAC이 없기 때문입니다. BRCTL을 사용하여 브리지를 만들고 "brctl show"를 수행하면 브리지에 빈 포트가있는 것을 알 수 있습니다 (인터페이스에 바인딩 된 인터페이스 없음). TAP0을 br0에 바인딩하면 당연히 동일한 MAC로 표시됩니다. 설명하기 위해 테스트 브리지를 만들었습니다.

# brctl addbr testbr0

[root @ stooge 등] # brctl show testbr0
브릿지 이름 브릿지 ID STP 사용 가능 인터페이스
testbr0 8000.000000000000 아니오

세 가지 테스트 TAPS를 만들었습니다. "brctl showmacs testbr0"의 출력

[root @ stooge 등] # brctl showmacs testbr0
포트 아니 맥 가산기가 로컬입니까? 노화 타이머
  1 86 : 51 : b6 : 95 : 0e : b6 예 0.00
  2 86 : 58 : 63 : c6 ​​: d4 : e7 예 0.00
  3 8a : a7 : fa : 17 : c5 : 12 예 0.00

보다시피, 각 브리지 포트에는 고유 한 MAC 주소가 있으며 브리지는 첫 번째 인터페이스 바운드로 MAC을 표시해야합니다. 실제 네트워크 인터페이스를 브리지하면 이더넷 브리지는 MAC 주소를 상속하고 모든 가상 인터페이스를 아래로 이동합니다. 테스트 브릿지에 eth0을 바인딩하는 예제.

[root @ stooge 등] # brctl showmacs testbr0
포트 아니 맥 가산기가 로컬입니까? 노화 타이머
  AA : BB : CC : DD : EE : FF 예 0.00
  1 86 : 51 : b6 : 95 : 0e : b6 예 0.00
  2 86 : 58 : 63 : c6 ​​: d4 : e7 예 0.00
  3 8a : a7 : fa : 17 : c5 : 12 예 0.00

"brctl show"를 다시 사용;

[root @ stooge 등] # brctl 쇼
브릿지 이름 브릿지 ID STP 사용 가능 인터페이스
testbr0 8000.00aabbccddee no eth0
                                                        tap00
                                                        tap01
                                                        tap02 

TAP 인터페이스는 eth0이더라도 여전히 포트 4에 있습니다. 여전히 고유 한 MAC 주소가 있습니다. 이더넷 브리지가 소스 라우팅 인터페이스에 바인딩 된 경우 IP 주소 또는 DHCP를 사용할 수 없습니다. 소스 라우팅 인터페이스를 연결하면 "로컬이 아닌"MAC 주소가 표시됩니다. 이것은 다음 홉 라우터 MAC 주소입니다. RedHat에는 IFCONFIG를 사용하여 소스 IP를 지정하는 옵션이 있습니다. 첫 번째 옵션은 IP 명령 참조를 참조하는 것입니다. 소스 IP를 지정할 수 있다고 생각합니다. 나는 그것을 시도한 적이 없다.


3

만들려고 tap장치 또는 필요한 MAC 주소와 IP를 다른 가상 이더넷 장치를 다음 eth0를 하나 개의 다리로 연결합니다.


이미 시도했지만 작동하지 않습니다. br0 (eth0, tap0, tap1)을 사용하면 네트워킹이 작동하려면 br0에 IP를 설정해야합니다. IP가 없으면 (ifconfig br0 0.0.0.0 up) 네트워크가 작동하지 않습니다. br0에 IP를 설정하고 0을 탭하면 (win-pc에서) 두 IP를 모두 핑 (ping) 할 수 있지만 arp -a 후에 각각의 MAC이 동일합니다.
grapefruyt

0

vconfig 를 사용하여 동일한 물리적 이더넷에서 각각 다른 Mac 주소를 가진 여러 VLAN 주소를 만들 수있는 것처럼 보입니다 .


모든 IP의 트래픽은 태그가 지정되지 않아야합니다
gelraen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.