¿Cómo hacer que las interfaces táctiles sean persistentes después del reinicio?

24

Algunas tareas requieren tener interfaces de tap configuradas + asignar propiedad . Entonces, lo estoy haciendo manualmente:

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

o usando

ip tuntap add dev tap0 mode tap user <username>

¿Cómo puedo hacer que la configuración de las interfaces táctiles sea permanente después de reiniciar sin agregar estos comandos a un script de shell y agregar al inicio?

Lo que tengo en mente es hacerlo a través de / etc / network / interfaces como el siguiente:

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

Pero por alguna razón, no funciona.

¿Algunas ideas?

AJN
fuente

Respuestas:

20

No puedo ver, por mi vida, por qué esta pregunta debería ser rechazada. Es claro, correcto, tiene una respuesta bien definida. Lo he votado.

Está utilizando utilidades obsoletas como tunctl, debería usar ip en su lugar. La stanza correcta para / etc / network / interfaces es:

    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

Su error fue usar estática en lugar de manual . La razón es que, dado que está intentando proporcionar a la interfaz virtual una dirección en la misma subred que su interfaz principal (wlan0 / eth0), cuando intenta agregar automáticamente una ruta local,

    ip route add 192.168.1.0/24 dev tap1

encuentra que tal ruta ya existe y se queja. Si usa manual en lugar de estático, puede eliminar esta ruta, que por supuesto es inútil.

Además, debe agregar una ruta

     ip route add 192.168.1.121/32 dev tap1

para informar a su núcleo que hay una excepción a la ruta

     ip route add 192.168.1.0/24 dev eth0/wlan0 

Eso es todo.

MariusMatutiae
fuente
Algo no funciona para mí aquí en ubuntu 17.10: mi tun0 no se creó; el estado de la red de servicio dice que la interfaz tun0no existe. Aquí está el archivo de interfaces si a alguien le importa echar un vistazo: gist.github.com/velis74/ab75a46893eaed8bd08b8c6292b2737a
velis
@velis Su nueva interfaz se llama tap0 , no tun0 , por eso no se encuentra. Tenga en cuenta que las interfaces tun y tap son fundamentalmente diferentes, en.wikipedia.org/wiki/TUN/TAP , ¿cuál desea crear?
MariusMatutiae
Sí, se llama tap0. Esta respuesta se trata de crear un dispositivo táctil, no uno tun. No veo cómo esto puede ser la causa de mi fracaso. El comando pre-up add device se ejecuta perfectamente desde la línea de comandos.
velis
Resulta que solo me faltaba una auto tap0estrofa. Gist actualizado en consecuencia.
velis
0

Es posible que deba seguir algunos pasos más:

  1. Agregar una nueva tabla de enrutamiento Edite / etc / iproute2 / rt_tables para agregar una nueva tabla de enrutamiento. Llámelo tabla de enrutamiento "rt2" y establezca sus preferencias en 1:
    55     local
    254     main
    253     default
    0       unspec
    1       rt2
  1. Como se explicó en la respuesta anterior, cree una interfaz táctil, pero luego debe configurar las nuevas tablas de enrutamiento y establecer las reglas de enrutamiento. Añadir a / 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

Para probarlo:

ip route list table rt2
ip rule show
Ethan Ghoreishi
fuente