es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Interfaz TUN creada desde C no se muestra en la salida de ifconfig.

He escrito la siguiente función que se supone que crea una interfaz TUN llamada “my_tun” en Linux:

int tun_open()
{
  int fd;
  if ((fd = open("/dev/net/tun", O_RDWR)) == -1) {
    return -1;
  }

  struct ifreq ifr;
  strncpy(ifr.ifr_name, "my_tun", IFNAMSIZ);
  ifr.ifr_flags = IFF_TUN | IFF_NO_PI;

  if (ioctl(fd, TUNSETIFF, &ifr) == -1) {
    return -1;
  }

  return fd;
}

Lo estoy probando ejecutándolo dentro de un contenedor de Docker de Ubuntu iniciado con --cap-add NET_ADMIN. Dentro de este contenedor de Docker, primero ejecuto:

mkdir /dev/net
mknod /dev/net/tun c 10 200

Y luego ejecuto mi función. Sin embargo, esta última no falla, pero luego ifconfig no muestra una interfaz TUN, solo una interfaz Ethernet y una de bucle local. ¿Qué estoy haciendo mal?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que has creado exitosamente la interfaz TUN utilizando la función tun_open, pero necesitas activar la interfaz utilizando el comando ifconfig o ip antes de que pueda ser vista en la salida de ifconfig.

    Intenta ejecutar el siguiente comando después de ejecutar tu función:

    ifconfig my_tun up
    

    Esto debería activar la interfaz y hacerla visible en la salida de ifconfig.

    Además, asegúrate de que tu contenedor de Docker tenga conectividad de red y que estés ejecutando el comando ifconfig dentro del contenedor y no en la máquina host.

Comments are closed.