¿Cómo funciona una interfaz TUN / TAP?

TUN / TAP proporciona recepción y transmisión de paquetes para programas espaciales de usuario.

Se puede ver como un simple dispositivo punto a punto o Ethernet, que,

en lugar de recibir paquetes de medios físicos, los recibe de

programa de espacio de usuario y en lugar de enviar paquetes a través de medios físicos

los escribe en el programa de espacio de usuario.

Para usar el controlador, un programa debe abrir / dev / net / tun y emitir un

ioctl () correspondiente para registrar un dispositivo de red con el kernel. Una red

el dispositivo aparecerá como tunXX o tapXX, según las opciones elegidas. Cuando

el programa cierra el descriptor de archivo, el dispositivo de red y todo

las rutas correspondientes desaparecerán.

Dependiendo del tipo de dispositivo elegido, el programa de espacio de usuario tiene que leer / escribir

Paquetes IP (con tun) o marcos de ethernet (con tap). ¿Cuál está siendo usado?

depende de las banderas dadas con ioctl ().

El paquete del controlador Universal TUN / TAP contiene dos ejemplos simples

sobre cómo usar dispositivos tun y tap. Ambos programas funcionan como un puente entre

Dos interfaces de red.

br_select.c: puente basado en la llamada al sistema seleccionado.

br_sigio.c: puente basado en señal asíncrona io y SIGIO.

Sin embargo, el mejor ejemplo es VTun Virtual Tunnels a través de redes TCP / IP :))

Las interfaces de túnel / Tap son interfaces de red virtuales. Por todas las razones prácticas, son las mismas que cualquier otra interfaz. la aplicación puede escuchar, leer y escribir en esa interfaz tun / tap, asignar una dirección IP, hacer tcpdump, etc., pero no hay NIC / Link subyacente, sino la propia pila de Linux. Si la interfaz de tap está conectada a un puente de linux, entonces el puente recibirá y enviará paquetes desde la interfaz tun / tap. Una aplicación ampliamente utilizada es adjuntar una VM a una interfaz de tap; Esta interfaz táctil se puede conectar a un puente como OVS y puede proporcionar conectividad a la VM.

VETH es otra construcción de red virtual, en la que hay dos aplicaciones conectadas una a la otra mediante una interfaz de red virtual.

Encuentro los siguientes dos tutoriales, que explican en detalle las interfaces tap / tun / veth:

Tutorial de interfaz Tun / Tap (más de perspectiva de programación)

Conmutación de Linux: espacios de nombres interconectados (más de hacerlo a través del shell y también una buena imagen para una comprensión rápida)

TUN / TAP se puede usar para crear una interfaz de red virtual en la que ambos extremos del túnel están en el espacio del usuario. Las aplicaciones de espacio de usuario se registran en el kernel para la interfaz TUN y registran puntos de entrada para recibir y enviar paquetes. Este es un mecanismo de comunicación muy útil para los núcleos AMP. Consulte la página en kernel.org para obtener más detalles sobre cómo Linux implementa la interfaz TUN / TAP.

Cuando crea e inicializa un dispositivo TAP en Linux, obtendrá un FD a través del cual puede enviar / recibir cualquier paquete L2 entrante para ese dispositivo TAP.

Por ejemplo, si alguien envía una solicitud ARP en la red donde reside el dispositivo TAP, obtendrá ese paquete L2 a través de ese FD.