답변:
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도 내 경험에서 매우 버그가 있습니다.
브리지와 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를 지정할 수 있다고 생각합니다. 나는 그것을 시도한 적이 없다.
만들려고 tap
장치 또는 필요한 MAC 주소와 IP를 다른 가상 이더넷 장치를 다음 eth0를 하나 개의 다리로 연결합니다.