Czy mogę utworzyć wirtualny interfejs Ethernet o nazwie eth0?

24

Korzystam z Arch opartego na jądrze Linux 3.10.5-1. System wykorzystuje nowe faktyczne konwencje nazewnictwa interfejsów Ethernet enp * s * i wlp * itd. Jest to jednak problem, ponieważ moja instytucja edukacyjna korzysta z programu o nazwie Maple 17 . System licencjonowania Maple jest zależny od istnienia interfejsu o nazwie eth0, ponieważ musi pobrać jego adres MAC, aby zweryfikować licencję. To złe rozwiązanie, ale muszę to obejść.

Oznacza to, że będę potrzebować interfejsu eth0 z dowolnym adresem MAC (ponieważ mogę pobrać nowy plik licencji dla nowego adresu MAC), który niekoniecznie musi działać. W rzeczywistości powinien być cały czas wyłączony. Sądzę, że istnieje kilka sposobów rozwiązania tego problemu, ale nie znalazłem nic na temat żadnego z pomysłów.

  • Tworzenie adaptera bez łączności
  • Tworzenie aliasu dla enp3s0 o nazwie eth0
  • Zmiana nazwy enp3s0 lub interfejsu pętli zwrotnej.

To, co udało mi się znaleźć, dotyczyło tylko zmiany do nowszych konwencji i starszych wersji udev. W każdym razie działali tylko na RHEL i SuSe. Próbowałem jednak bez powodzenia. (persistent-net-names.rules i net-name-slot.rules, oba spowodowały, że mój rzeczywisty interfejs przestał działać i mój interfejs wlan zniknął)

Steen Schütt
źródło

Odpowiedzi:

28

Pewnie. Możesz stworzyć tapurządzenie dość łatwo za pomocą tunctl(z uml-utilities, przynajmniej na Debianie):

# tunctl -t eth0
Set 'eth0' persistent and owned by uid 0
# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr a6:9b:fe:d8:d9:5e  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Lub z ip:

# ip tuntap add dev eth0 mode tap
# ip link ls dev eth0
7: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 500
    link/ether 0e:55:9b:6f:57:6c brd ff:ff:ff:ff:ff:ff

Prawdopodobnie powinieneś wybrać drugą metodę, tak jak ippreferowane narzędzie sieciowe w Linuksie i prawdopodobnie już ją masz.

Oba z nich tworzą urządzenie z kranem z - jak sądzę - losowym lokalnym MAC-em, możesz ustawić MAC na stałą wartość w dowolny normalny sposób.

derobert
źródło
1
Tak jest! Dokładnie rozwiązanie, na które liczyłem, dziękuję bardzo :) Działa jak sen.
Steen Schütt,
1
Mam problem. Podczas próby zmiany MAC za pomocą ip link set dev eth0 address 01:23:45:67:89:ab(gdy adapter jest oczywiście wyłączony), mówi RTNETLINK answers: Cannot assign requested address. Próbowałem również zainstalować Macchanger, ale zwraca podobny błąd. Wszystko próbowałem jako root.
Steen Schütt,
3
@TimeSheep To nie jest prawidłowy adres MAC. W szczególności jest to adres multiemisji. Spróbuj 00: 23: 45: 67: 89: ab. To zadziała. Ale 02: 23: 45: 67: 89: ab byłoby lepsze. Patrz np en.wikipedia.org/wiki/MAC_address#Address_details
derobert
Ach, dzięki. Zupełnie zapomniałem, że istnieją wymagania, aby te rzeczy działały. Po prostu wezmę następny, który losowo generuje, i użyję go. Czy istnieje sposób, aby utrzymać urządzenie przy ponownym uruchomieniu, zamiast odtwarzać je ponownie i ustawiać adres z powrotem przy rozruchu za pomocą skryptu?
Steen Schütt,
@TimeSheep Nie bardzo. Jest to interfejs wirtualny, nie istnieje nigdzie poza umysłem jądra ... więc po ponownym uruchomieniu komputer zniknął.
derobert
4

Możesz także ustawić reguły udev, aby nadać kartom sieciowym żądane nazwy:

https://wiki.archlinux.org/index.php/Network_Configuration#Change_device_name

Oczywiście NIE powinieneś mówić udev, aby nazywał je eth0, eth1 itd. Co robi Maple, jeśli masz tylko kartę Wi-Fi?

rainbowgoblin
źródło
Nie wiem o Maple, ale widziałem inne oprogramowanie „chronione przed kopiowaniem”, które sprawdza twój MAC i patrzy tylko na interfejsy sieciowe o nazwie eth0i eth1. Jeśli twoje wezwanie jest wlan0zbyt złe (chyba że wiesz, jak zmienić nazwę lub utworzyć wirtualny interfejs).
Gilles 'SO - przestań być zły'
Jeśli masz tylko kartę Wi-Fi, myślę, że nie będziesz miał szczęścia. Rozmawiałem o tym z przedstawicielem, ale wydaje się, że to nie oni piszą system licencjonowania. Powiedziałem im, że konwencje nazewnictwa najprawdopodobniej się zmieniają i że powinni zająć się łataniem całości, aby uzyskać lepsze wsparcie. you are correct in your suspicions of the cause of the problem with the activation, particularly the issue with the Ethernet adapter name. Unfortunately, it is a limitation of the licensing software that it has to look for an "eth0" in order to find the Host ID of the system
Steen Schütt,
Czy jest szansa, że ​​możesz użyć reguł udev, aby tymczasowo zmienić nazwę swojej karty sieciowej na eth0, a następnie usunąć tę regułę i uruchomić ponownie po aktywacji? Właściwie to nie wiem, czy zawsze naprawdę, naprawdę źle jest zmienić nazwę karty ethX, czy tylko czasami.
rainbowgoblin
@rainbowgoblin Nie, sprawdza na serwerze za każdym razem, gdy jest uruchamiany, więc po prostu znowu zacznie mi dawać błąd „Nie mogę uzyskać identyfikatora hosta”. Tak czy inaczej rozwiązanie derobert było idealne i nawet nie wydaje się, że to takie obejście.
Steen Schütt,
2

Patrzę na bardzo podobny problem z komputerem bez przewodowej karty sieciowej. To rozwiązanie wygląda dobrze: http://jms.id.au/wiki/FakeEth0

Zasadniczo chodzi o to, aby utworzyć / zmodyfikować kilka plików w celu utworzenia interfejsu fikcyjnego:

W /etc/modules-load.d/dummy.confdodatku:

# load dummy interface module
dummy

W /etc/udev/rules.d/70-persistent-net.rulesdodatku:

SUBSYSTEM=="net", KERNEL=="dummy0", NAME="eth0"

Następnie /etc/network/interfacesdodaj:

iface eth0 inet static
    hwaddress DE:AD:BE:EF:CA:FE

W modprobe dummytym momencie powinieneś być w stanie zrobić i sprawdzić, czy interfejs został poprawnie skonfigurowany. Może nie ustawić adresu mac, jeśli użyjesz modprobe zamiast restartu; w takim przypadku czy ip link ustaw dev eth0 adres de: ad: be: ef: ca: fe.

alex.forencich
źródło
-1

Najprostsze rozwiązanie - choć działa to tylko w systemach z jedną kartą Ethernet:

ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules

Arch Linux używa „przewidywalnego nazewnictwa”. To wyłącza to.

Nick ODell
źródło
Próbowałem już tego, to wszystko popsuło i moje adaptery zniknęły.
Steen Schütt,