トンネルインターフェイス(tun)を開いたままにするプロセスを見つける方法は?

トンネルインターフェイス(tun)を開いたままにするプロセスを見つける方法は?

tunコマンドを使用してインターフェースを作成し、ip tuntap add mode tunコマンドを使用して管理の開始を強制すると、ip link set dev tun1 upインターフェース自体は常に「物理的に」停止します。

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:~# 

そのインターフェイスに接続されているアプリケーションがないため、これは意味があります。しかし、tun0私のシステムには「物理的に」起動されたシステムもあります。

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:~# 

tun0このインターフェイスにどのプロセスが接続されているかを調べる方法はありますか?私ps -ef | grep tun0も運がなかったlsof | grep tun0

答え1

カーネルはこの情報を公開していないようです。したがって、カーネルのデバッグなしではこれを知ることはできないようです。あなたができる最善の方法は、次のように開いているすべてのプロセスまたはデバイスを一覧tun表示tapすることです。

lsof /dev/net/tun

tunこれにより、範囲が狭くなりますが、システムに複数のアクティブなインターフェイスがある場合、どのプロセスがどのトンネルを管理しているかがわかりません。

tunプロセスがインターフェイスを作成しようとすると、使用したいインターフェイスが開きます/dev/net/tuntun次に、カーネルに新しいtunインタフェース名(たとえばtun0tun1などtun2)を動的に割り当てるか、選択した名前を設定します。これはioctlコードを使用して呼び出すことによって行われますTUNSETIFF。したがって、通話を追跡しない限り、どの名前が割り当てられたかを知る方法はありませんioctl

答え2

Linuxカーネルは今/proc/$PID/fdinfo/$FD

# grep ^iff: /proc/*/fdinfo/*
/proc/31219/fdinfo/5:iff:       tun0
/proc/31235/fdinfo/5:iff:       tun1
/proc/31252/fdinfo/5:iff:       tun2
/proc/31267/fdinfo/5:iff:       tun3

Debian 5.8.10 を使用してテストされました。

答え3

/proc ファイルシステムがある場合は、次のコマンドシーケンスを使用できます。

find /proc/ -name tun0 | cut -d\/ -f3 | uniq | xargs -IPID lsof -p PID

関連情報