Posterior a consultar con expertos en la materia, programadores de diversas áreas y profesores hemos dado con la solución a la cuestión y la plasmamos en esta publicación.
Solución:
En cuanto a los dispositivos TUN y TAP: no basta con hacer la comprobación anterior.
La razón es que puede haber casos en los que creamos un dispositivo TUN y (por error) lo llamamos tap10; o cree un dispositivo TAP y asígnele el nombre tun10. Entonces, ¿cómo puedo saber si es un dispositivo tun o un dispositivo tap, ya que ambos tendrán entradas “tun_flags”?
La respuesta es correr ethtool -i tunOrTapDeviceName
.
- En el caso de un dispositivo TAP obtendremos: “bus-info: tap”.
- En el caso de un dispositivo TUN obtendremos: “bus-info: tun”.
Ejemplo
$ ethtool -i tapfffb93e9-6a
driver: tun
version: 1.6
firmware-version:
bus-info: tap
supports-statistics: no
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
No creo que haya una manera fácil de distinguirlos. hurgando en /sys/class/net
Encontré las siguientes distinciones:
- Los dispositivos físicos tienen un
/sys/class/net/eth0/device
enlace simbólico - Los puentes tienen un
/sys/class/net/br0/bridge
directorio - Los dispositivos TUN y TAP tienen un
/sys/class/net/tap0/tun_flags
expediente - Los puentes y las interfaces loopback tienen
00:00:00:00:00:00
en/sys/class/net/lo/address
Puedes usar los más o menos indocumentados -d
opción a ip(8)
que le indica el tipo de ciertos dispositivos, incluidos tun, tap & veth:
p.ej
$ ip -d a
[regular devices]
6: virbr0-nic: mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 52:54:00:c8:12:ec brd ff:ff:ff:ff:ff:ff promiscuity 0
tun
…Nota tun
en la última línea.
También puedes usar -d
con ip l
.