wiele adresów MAC na jednym fizycznym interfejsie sieciowym (linux)

20

Proste pytanie: jak mogę ustawić wiele adresów MAC na jednym fizycznym interfejsie sieciowym (Linux)?

Dlaczego? Mój ISP sprawdza ip <-> mac na GW i chciałbym kierować ruch przez mój „linuxbox”, a następnie przekazywać go innym źródłowym ip.

Bez sprawdzania ip <-> mac, użyję eth0, eth0: 0, ale w tej sytuacji potrzebuję unikalnego adresu MAC dla każdego adresu IP.

grapefruyt
źródło

Odpowiedzi:

28

Za pomocą macvlan można tworzyć wiele wirtualnych interfejsów z różnymi adresami 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

Teoretycznie powinno to być wszystko, czego potrzebujesz, ale w pewnym momencie coś pękło w jądrze i spowodowałoby, że używałby jednego MAC do wszystkiego. Nie jestem pewien, jaki jest tego status; mam nadzieję, że to naprawione.

Jeśli nie, możesz użyć arptables do przepisania adresów MAC na wyjściu w oparciu o interfejs wyjściowy lub na wejściu w oparciu o docelowy adres IP:

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

Niestety z mojego doświadczenia wynika również, że arptables jest dość wadliwy.

zjadacz
źródło
1
Przepraszam za nekropolię, ale jeśli chodzi o „w pewnym momencie coś się zepsuło w jądrze i spowodowałoby, że używałby jednego MAC do wszystkiego”, może to nie być błąd: musiałem ustawić tuning jądra ”net.ipv4.conf .all.arp_ignore "na 1, aby to działało poprawnie. Inne tunery ARP mogą być również potrzebne; aby uzyskać więcej wyjaśnień, przeczytaj to i to .
MoonSweep 15.07.16
4

Powodem, dla którego twój mostek i interfejs TAP współużytkują ten sam adres MAC, jest to, że most nie ma adresu MAC, dopóki nie zostanie powiązany z interfejsem. Jeśli utworzysz most za pomocą BRCTL i wykonasz „pokaz brctl”, zobaczysz, że most ma puste porty. (Bez powiązanego z nim interfejsu) W powiązaniu TAP0 z br0, oczywiście będzie on wyświetlany jako ten sam MAC. Zilustrowałem most testowy.

# brctl addbr testbr0

[root @ stooge itp.] # brctl show testbr0
nazwa mostu identyfikator mostu Interfejsy włączone STP
testbr0 8000.000000000000 nr

Stworzyłem trzy testowe TAPS. Dane wyjściowe z „brctl showmacs testbr0”.

[root @ stooge itp.] # brctl showmacs testbr0
port żaden adres MAC nie jest lokalny? licznik czasu starzenia
  1 86: 51: b6: 95: 0e: b6 tak 0,00
  2 86: 58: 63: c6: d4: e7 tak 0,00
  3 8a: a7: fa: 17: c5: 12 tak 0,00

Jak widać, każdy port mostu ma unikalny adres MAC, a most powinien pokazywać swój adres MAC, jako pierwszy związany interfejs. Jeśli przełączysz fizyczny interfejs sieciowy, most Ethernet odziedziczy jego adres MAC i przeniesie wszystkie interfejsy wirtualne w dół. Przykład wiązania eth0 z mostkiem testowym.

[root @ stooge itp.] # brctl showmacs testbr0
port żaden adres MAC nie jest lokalny? licznik czasu starzenia
  4 AA: BB: CC: DD: EE: FF tak 0,00
  1 86: 51: b6: 95: 0e: b6 tak 0,00
  2 86: 58: 63: c6: d4: e7 tak 0,00
  3 8a: a7: fa: 17: c5: 12 tak 0,00

Ponowne użycie „brctl show”;

[root @ stooge itp.] # brctl show
nazwa mostu identyfikator mostu Interfejsy włączone STP
testbr0 8000.00aabbccddee no eth0
                                                        tap00
                                                        tap01
                                                        tap02 

interfejsy TAP przesunęły się w dół o jeden, mimo że eth0 nadal znajduje się w PORT 4. Nadal masz unikalne adresy MAC. Jeśli most Ethernet jest powiązany z interfejsem trasy źródłowej, nie masz wyboru w korzystaniu z adresu IP lub DHCP. Za ile warto, jeśli przełączysz interfejs trasy źródłowej, pokażesz „nielokalny” adres MAC. To jest adres MAC routera następnego skoku. Wiem, że w RedHat istnieje możliwość podania źródłowego adresu IP za pomocą IFCONFIG. Moją pierwszą opcją byłoby sprawdzenie odniesienia do polecenia IP, ponieważ myślę, że możesz podać źródłowy adres IP. Nigdy tego nie próbowałem.

Lars Bailey
źródło
3

Spróbuj utworzyć tapurządzenia lub dowolne inne wirtualne urządzenia Ethernet z wymaganymi adresami MAC i IP, a następnie podłącz je do jednego mostu za pomocą eth0.

gelraen
źródło
Próbowałem już tego i to nie działa. Jeśli użyję br0 (eth0, tap0, tap1). Muszę ustawić IP na br0, aby sieć działała. Bez IP (ifconfig br0 0.0.0.0 w górę) sieć nie działa. Więc kiedy ustawię IP na br0 i dotknij 0. (z win-pc) Mogę pingować oba adresy IP, ale po arp -a każdy z nich ma taki sam MAC.
grapefruyt
0

Wygląda na to, że możesz użyć vconfig do utworzenia wielu adresów Vlan na tym samym fizycznym eterze, każdy z innym adresem mac.

Phil Hollenback
źródło
Ruch ze wszystkich adresów IP musi być nieoznaczony
gelraen