![터널 인터페이스(tun)를 열어두는 프로세스를 찾는 방법은 무엇입니까?](https://linux55.com/image/63881/%ED%84%B0%EB%84%90%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4(tun)%EB%A5%BC%20%EC%97%B4%EC%96%B4%EB%91%90%EB%8A%94%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%A5%BC%20%EC%B0%BE%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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/tun
. tun
그런 다음 커널이 새 tun
인터페이스 이름(예 tun0
: tun1
등 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
데비안 5.8.10을 사용하여 테스트되었습니다.
답변3
/proc 파일 시스템이 있는 경우 다음 명령 순서를 사용할 수 있습니다.
find /proc/ -name tun0 | cut -d\/ -f3 | uniq | xargs -IPID lsof -p PID