Wie kann man Tap-Interfaces nach dem Neustart persistent machen?

24

Für einige Aufgaben müssen Tap-Interfaces konfiguriert und der Eigentümer zugewiesen werden . Also mache ich es manuell:

sudo tuntap -u <username>
sudo ifconfig tap0 up
sudo ip a a 192.168.1.1/24 dev tap0

oder mit

ip tuntap add dev tap0 mode tap user <username>

Wie kann ich die Konfiguration von Tap-Interfaces nach einem Neustart dauerhaft machen, ohne diese Befehle einem Shell-Skript hinzuzufügen und beim Start hinzuzufügen?

Was ich vorhabe, ist es über / etc / network / interfaces wie folgt zu tun :

iface tap1 inet static
address 192.168.1.121
netmask 255.255.255.0
pre-up /usr/sbin/tunctl -u ajn -t tap1

Aber aus irgendeinem Grund funktioniert es nicht.

Irgendwelche Ideen?

AJN
quelle

Antworten:

20

Ich kann für mein ganzes Leben nicht verstehen, warum diese Frage herabgestimmt werden sollte. Es ist klar, richtig, es hat eine klar definierte Antwort. Ich habe es positiv bewertet.

Wenn Sie veraltete Dienstprogramme wie tunctl verwenden, sollten Sie stattdessen ip verwenden. Die richtige Zeilengruppe für / etc / network / interfaces lautet:

    iface tap1 inet manual 
    pre-up ip tuntap add tap1 mode tap user root
    pre-up ip addr add 192.168.1.121/24 dev tap1
    up ip link set dev tap1 up
    post-up ip route del 192.168.1.0/24 dev tap1 
    post-up ip route add 192.168.1.121/32 dev tap1
    post-down ip link del dev tap1

Ihr Fehler bestand darin, statisch statt manuell zu verwenden . Der Grund dafür ist, dass Sie versuchen, der virtuellen Schnittstelle eine Adresse im selben Subnetz wie Ihrer Hauptschnittstelle (wlan0 / eth0) zuzuweisen, wenn diese automatisch versucht, eine lokale Route hinzuzufügen.

    ip route add 192.168.1.0/24 dev tap1

es stellt fest, dass eine solche Route bereits existiert, und es beschwert sich. Wenn Sie manuell statt statisch verwenden, können Sie diese Route löschen, was natürlich unbrauchbar ist.

Außerdem sollten Sie eine Route hinzufügen

     ip route add 192.168.1.121/32 dev tap1

um deinen Kernel darüber zu informieren, dass es eine Ausnahme von der Route gibt

     ip route add 192.168.1.0/24 dev eth0/wlan0 

Das ist alles.

MariusMatutiae
quelle
Unter Ubuntu 17.10 funktioniert hier etwas nicht: Mein tun0 wurde nicht erstellt. Der Status des Servicenetzwerks besagt, dass die Schnittstelle tun0nicht vorhanden ist. Hier ist die Interface-Datei, falls jemand einen Blick darauf werfen
möchte
@velis Dein neues Interface heißt tap0 , nicht tun0 , deshalb wird es nicht gefunden. Bitte beachten Sie, dass sich die Tun- und Tap- Schnittstellen grundlegend unterscheiden. En.wikipedia.org/wiki/TUN/TAP. Welche möchten Sie erstellen?
MariusMatutiae
Ja, es heißt tap0. In dieser Antwort geht es darum, ein Abgriffsgerät zu erstellen, kein TUN-Gerät. Ich verstehe nicht, wie dies die Ursache für mein Versagen sein kann. Der Befehl zum Hinzufügen eines Geräts vor dem Start wird perfekt über die Befehlszeile ausgeführt.
Velis
Es stellte sich heraus, dass mir nur eine auto tap0Strophe fehlte . Gist entsprechend aktualisiert.
Velis
0

Möglicherweise müssen Sie noch einige weitere Schritte ausführen:

  1. Hinzufügen einer neuen Routingtabelle Bearbeiten Sie / etc / iproute2 / rt_tables, um eine neue Routingtabelle hinzuzufügen. Nennen Sie es Routing-Tabelle "RT2" und setzen Sie seine Einstellungen auf 1:
    55     local
    254     main
    253     default
    0       unspec
    1       rt2
  1. Erstellen Sie, wie in der vorherigen Antwort erläutert, eine Tap-Schnittstelle. Anschließend müssen Sie die neuen Routing-Tabellen konfigurieren und Routing-Regeln festlegen. Fügen Sie zu / etc / network / interfaces hinzu:
   #create a tap interface and make it persistent
    iface tap1 inet manual 
    pre-up ip tuntap add tap1 mode tap user root
    pre-up ip addr add 192.168.1.121/24 dev tap1
    up ip link set dev tap1 up
    post-up ip route del 192.168.1.0/24 dev tap1 
    post-up ip route add 192.168.1.121/32 dev tap1
    post-down ip link del dev tap1

    #configure the new routing table so that network 192.168.1.0 can be reached through the tap1 interface
    post-up ip route add 192.168.1.0/24 dev tap1 src 192.168.1.121 table rt2

    #set the default gateway to be 192.168.1.10
    post-up ip route add default via 192.168.1.10 dev tap1 table rt2

    #set rules so that traffic from and to 192.168.1.121 use the rt2 routing table 
    post-up ip rule add from 192.168.1.121/24 table rt2
    post-up ip rule add to 192.168.1.121/24 table rt2
sudo ifup tap1

Um es zu testen:

ip route list table rt2
ip rule show
Ethan Ghoreishi
quelle