Comment rendre les interfaces tap persistantes après le redémarrage?

24

Certaines tâches nécessitent la configuration d' interfaces tactiles + l'attribution de la propriété . Donc, je le fais manuellement:

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

ou en utilisant

ip tuntap add dev tap0 mode tap user <username>

Comment puis-je rendre la configuration des interfaces tap persistante après les redémarrages sans ajouter ces commandes à un script shell et ajouter au démarrage

Ce que j'ai en tête, c'est de le faire via / etc / network / interfaces comme ceci:

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

Mais pour une raison quelconque, cela ne fonctionne pas.

Des idées?

AJN
la source

Réponses:

20

Je ne vois pas, pour ma vie, pourquoi cette question devrait être rejetée. C'est clair, correct, il a une réponse bien définie. Je l'ai voté.

Vous utilisez des utilitaires obsolètes comme tunctl, vous devez utiliser ip à la place. La strophe correcte pour / etc / network / interfaces est:

    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

Votre erreur a été d'utiliser du statique au lieu du manuel . La raison en est que, puisque vous essayez de donner à l'interface virtuelle une adresse dans le même sous-réseau que votre interfae principale (wlan0 / eth0), lorsqu'elle essaie automatiquement d'ajouter une route locale,

    ip route add 192.168.1.0/24 dev tap1

il constate qu'une telle route existe déjà et il se plaint. Si vous utilisez manuel au lieu de statique, vous êtes autorisé à supprimer cet itinéraire, ce qui est bien sûr inutile.

Vous devez également ajouter un itinéraire

     ip route add 192.168.1.121/32 dev tap1

pour informer votre noyau qu'il y a une exception à l'itinéraire

     ip route add 192.168.1.0/24 dev eth0/wlan0 

C'est tout.

MariusMatutiae
la source
Quelque chose ne fonctionne pas pour moi ici sur ubuntu 17.10: mon tun0 n'est pas créé - l'état du réseau de service indique que l'interface tun0n'existe pas. Voici le fichier d'interfaces si quelqu'un veut
velis
@velis Votre nouvelle interface s'appelle tap0 , pas tun0 , c'est pourquoi elle n'est pas trouvée. Veuillez noter que les interfaces tun et tap sont fondamentalement différentes, en.wikipedia.org/wiki/TUN/TAP , laquelle souhaitez-vous créer?
MariusMatutiae
Oui, cela s'appelle tap0. Cette réponse consiste à créer un appareil de prise, pas un appareil de tun. Je ne vois pas comment cela peut être la cause de mon échec. La commande pre-up add device s'exécute parfaitement à partir de la ligne de commande.
velis
Il s'avère que je ne manquais qu'une auto tap0strophe. Gist mis à jour en conséquence.
velis
0

Il y a quelques étapes supplémentaires que vous pourriez avoir à faire:

  1. Ajouter une nouvelle table de routage Modifiez / etc / iproute2 / rt_tables pour ajouter une nouvelle table de routage. Appelez-la table de routage "rt2" et définissez ses préférences sur 1:
    55     local
    254     main
    253     default
    0       unspec
    1       rt2
  1. Comme expliqué dans la réponse précédente, créez une interface tactile, mais vous devez ensuite configurer les nouvelles tables de routage et définir des règles de routage. Ajoutez à / etc / network / interfaces:
   #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

Pour le tester:

ip route list table rt2
ip rule show
Ethan Ghoreishi
la source