En el mundo de las redes siempre se habla de interfaces tun/tap de forma indistinta, hasta ahora, yo tambien lo hacia, pero llega un momento de la vida donde uno tiene que madurar y ver de que narices va esto
Vamos al meollo. En networking, las interfaces TUN y TAP son interfaces virtuales que se crean y se gestionan en espacio de kernel. Mencionar que como estas interfaces son virtuales se gestionan directamente vía softaware, no como las interfaces reales que se gestionan con unos drivers diferentes, ad-hoc de la interfaz. Los drivers TUN/TAP se crearon en los 2000 como una unión de los avances de los drivers desarrollados en las comunidades de Solaris, Linux, BSD. Actualmente los drivers solo tienen mantenimiento por los kernels de linux y FreeBSD.
Ambos tipos de interfaces se utilizan para tunelado, pero no pueden ser utilizadas a la vez dado que trabajan en niveles distintos. Las TUN, de network TUNnel, emula la capa de red y puede llegar hacer FW de paquetes. En cambio las interfaces TAP, trabajan en capa 2, y emulan un equipo en capa 2.
TUN
se puede llegar a utilizar para routing.TAP
se puede llegara utilizar para crear un bridge.Los paquetes son enviados por el sistema operativo a través de una interfaz TUN/TAP, y serán recibidos por algun programa de espacio de usuario, el cual, está enganchado directamente en la interfaz. Cualquier programa de espacio de usuario podrá pasar paquetes por las interfaces, y las interfaces virtuales se lo pasarán al stack de red pro defecto, emulando la recepción de los paquetes inyectados desde espacio de usuario.
Para la creación de estas interfaces lo podemos hacer por ioctl
tunctl
. Puede que en nuestra distribución no lo tengamos instalado, por lo que habrá que instalarlo. Para instalarlo, podemos hacer un:sudo apt install -y uml-utilities
Este paquete se trata del User-mode Linux (utility programs).
Para crear una un interfaz podemos hacer lo siguiente:
tunctl -t tun
Para eliminarla:
tunctl -d tun
Cosa graciosa, podefecto estas interfaces tienen un owner… no tengo muy claro por que. He buscado información al respecto pero no he encontrado nada. Además he hecho pruebas de funcionamiento con las interfaces cambiando de ususario y no se hace nada. Si se quiere especificar un user para la interfaz se puede hacer de la siguiente manera, si no, tomará el id del user que ejecute el comando.
tunctl -t tun -u user
Para crear interfaces TAP tenemos dos opciones, que el principio del nombre empiece por tapX
o especificar explicitamente el siguiente parametro. Para eliminarlas es igual.
tunctl -p -t intf
El parametro -p
ya no va. Jajajajaja vaya risa. Por que? por que crea las interfaces del mismo tipo… modo tap
todo. Absurdo.
Sorpresa al terminar de escribir estas notas, hay un comando para trabajar con tun-tap desde iproute2:
https://baturin.org/docs/iproute2/#ip-tuntap
Tocate los pies… realmente los mundos tun-tap están muy entre mezclados dado que hemos probado a poner a una TAP una IP y si se puede… Es dificil diferenciarlas cual es el uso de cada cual. Para ver si es de un tipo u otro, tenemos que ejecutar un:
ethtool -i intf
Y fijarnos en el cambio de bus-info
, ahí nos dirá de que tipo es. Dejo pruebas:
tunctl
, https://command-not-found.com/tunctl