Como descobrir qual processo mantém a interface de túnel (tun) ativa?

6

Se eu criar uma interface tun com o comando ip tuntap add mode tun e forçá-la administrativamente com o comando ip link set dev tun1 up , a interface em si estará sempre "fisicamente" inativa:

root@A58:~# ip link show dev tun1
46: tun1: <NO-CARRIER,POINTOPOINT,MULTICAST,NOARP,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 500
    link/none 
root@A58:~# 

Isso faz sentido, pois não há aplicativos conectados a essa interface. No entanto, também tenho tun0 no meu sistema, o que é "fisicamente":

root@A58:~# ip link show dev tun0
45: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 100
    link/none 
root@A58:~# 

Existe uma maneira de descobrir qual processo está conectado a essa interface tun0 ? Eu não tive sorte com ps -ef | grep tun0 ou lsof | grep tun0 .

    
por Martin 27.04.2015 / 14:39

2 respostas

3

Não parece que o kernel expõe esta informação. Portanto, curto de depuração do kernel, eu não acho que você pode saber disso. O melhor que você pode fazer é listar todos os processos que têm tun ou tap dispositivos abertos assim:

lsof /dev/net/tun

Então, isso vai reduzi-lo, mas no caso em que há várias interfaces tun ativas no sistema, ele não informa qual processo está gerenciando qual túnel.

Quando um processo deseja criar uma interface tun , ele abre /dev/net/tun independentemente da interface tun que pretende usar. Em seguida, permite que o kernel atribua dinamicamente um novo nome de interface tun (como tun0 , tun1 , tun2 etc ...) ou defina um nome escolhido. Isso é feito com uma chamada ioctl com o código TUNSETIFF . Então, a menos que você consiga rastrear essa chamada de ioctl , não há realmente uma maneira de dizer qual nome foi atribuído.

    
por 04.05.2015 / 01:04
0

Se você tiver o sistema de arquivos / proc, você pode usar esta sequência de comandos:

find /proc/ -name tun0 | cut -d\/ -f3 | uniq | xargs -IPID lsof -p PID
    
por 04.05.2015 / 00:45