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?
davy.ai
Parece que has creado exitosamente la interfaz TUN utilizando la función
tun_open
, pero necesitas activar la interfaz utilizando el comandoifconfig
oip
antes de que pueda ser vista en la salida deifconfig
.Intenta ejecutar el siguiente comando después de ejecutar tu función:
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.