배포판이 패키지를 지우고 메뉴에서 항목이 사라져도, 다음 재부팅 후 터널은 여전히 올라옵니다. 상용 VPN 클라이언트는 패키지 관리자가 추적하지 않은 조각을 남기므로, 깨끗한 제거가 깨끗한 기계와 같지는 않습니다. 그 조각 중 네 가지, 즉 유닛, 연결 프로필, 권한 있는 도우미, 공급업체 저장소가 거의 모든 유령 연결을 설명합니다. 무엇이든 지우기 전에 네 가지를 모두 읽고, 그다음 각각을 그것을 소유한 구성 요소를 통해 제거하십시오.

제거 프로그램이 결코 기록하지 않은 것

패키지 관리자는 자기가 적어 둔 파일만 제거하고 그 밖의 것은 건드리지 않습니다. 클라이언트가 실행 중에 만든 연결 프로필, 설치 후 활성화된 유닛, 상승된 권한으로 실행되면서 스스로 등록한 도우미에 대한 기록은 없습니다. 각각은 다른 하위 시스템에 속하며, 각각은 패키지보다 한 번 이상의 재부팅을 더 살아남을 수 있습니다. 그 틈이 바로 터널을 만든 소프트웨어는 사라졌는데 터널은 건강할 수 있는 이유입니다.

남은 것에는 systemd, NetworkManager, 저장소 구성, 또는 사용자별 자동 시작 항목 같은 주인이 항상 있습니다. 주인을 먼저 찾는 것이 정리를 반쯤 구성된 기계로 만들지 않는 방법입니다. 파일을 직접 지우는 것은 주인이 다시 생성하기 전까지만 통하며, 그래서 아래 명령은 조회로 시작합니다.

네 명의 주인, 먼저 읽기만

삭제가 아니라 조회로 시작하고, 돌아온 정확한 이름을 적어 두십시오. 공급업체는 종종 메타 패키지 옆에 버전이 붙은 페이로드를 함께 보내므로, 한 제품이 두 이름으로 나타날 수 있습니다. 두 목록에 모두 나오는 이름은 주인이 둘인 단일 제품이며 둘 다 제거해야 합니다. 첫 번째 묶음은 패키지와 유닛을 다루며, 대부분의 잔여물이 거기서 보입니다.

dpkg -l | grep -i acmevpn
systemctl list-unit-files | grep -i acmevpn
systemctl list-units --type=service --state=running | grep -i acmevpn

두 번째 묶음은 정리 후 가장 자주 살아남는 두 구성 요소, 즉 연결 프로필과 공급업체 저장소를 다룹니다. 중복 이름이 흔하고 삭제 명령은 식별자를 기대하므로 이름이 아니라 UUID 열을 읽으십시오. 저장소 줄은 죽은 공급업체 호스트가 몇 달 뒤 무관한 설치를 깨뜨릴 수 있어 오늘 제거하지 않더라도 읽을 가치가 있습니다. 어느 목록도 아무것도 바꾸지 않으며, 그것이 이들을 먼저 실행하는 이유입니다.

nmcli -f NAME,UUID,TYPE connection show
nmcli connection show --active
grep -ril acmevpn /etc/apt/sources.list.d/ /etc/apt/sources.list

정리 후에도 살아 있는 프로세스는 활성 유닛이거나 다른 프로그램의 자식입니다. 더 이상 존재하지 않는 서비스를 탓하기 전에 프로세스 표와 그 부모 사슬을 읽으십시오. 사용자별 자동 시작 항목도 같은 점검이 필요하며, 그것들은 새 로그인 셸에서만 나타나고 root 세션에서는 나타나지 않습니다.

서로 바꿀 수 없는 세 가지 동사

중지는 현재 실행을 끝내고, 비활성화는 부팅 시 링크를 제거하며, 마스킹은 유닛을 /dev/null로 향하게 합니다. 세 번째만이 소켓, 타이머, 의존성을 통한 활성화도 막으므로 셋 중 가장 강합니다. 기계를 어떻게 할지 아직 결정하는 동안에는 순서가 중요합니다. 그 결정을 내리는 동안에는 다음 부팅에서 조용히 시작되는 대신 크게 실패하기 때문에 마스킹이 올바른 상태입니다.

다시 설치하기 전에 마스킹을 해제하지 않으면, 새 패키지가 아무도 적어 두지 않은 이유로 고장 난 것처럼 보입니다. 같은 주의가 패키징 차이에도 적용되는데, 한 빌드는 중지할 수 있는 유닛을 제공하지만 다른 빌드는 서비스를 전혀 남기지 않습니다. 정리 경로가 둘 사이에서 다르므로 동사를 고르기 전에 어느 패키징인지 확인하십시오.

와일드카드로 잘못된 프로필을 지웁니다

적어 둔 UUID로 프로필을 삭제하고, 절대 와일드카드로 지우지 마십시오. keyfile 디렉터리에는 기계의 모든 Wi-Fi 및 Ethernet 프로필도 들어 있으므로, 넓은 일치는 아직 필요한 것까지 제거합니다. 손으로 지운 keyfile은 그것을 소유한 정책이 다시 만들 수 있어, 삭제가 효과 없어 보이게 합니다.

nmcli connection delete uuid <uuid>

그 프로필이 아직 가진 유일한 사본이라면 로컬 삭제는 서버에서 아무것도 취소하지 않으므로 먼저 게이트웨이와 ID를 내보내십시오. 저장소도 같은 규칙이어서, 공급업체 파일 하나와 그 키링을 제거한 뒤 패키지 목록을 새로 고치고 정말 원했던 설치를 다시 시도하십시오. 오래된 타사 항목을 남겨 두면 오래된 의존성이 고정되거나 아예 응답하지 않을 수 있습니다. 두 제거 모두 작고, 어느 쪽이든 보관한 사본에서 되돌릴 수 있습니다.

재부팅 후에도 계속 실행되는 것

승리를 선언하기 전에 재부팅하고, 그다음 애플리케이션이 아니라 흔적을 찾으십시오. 이전 클라이언트가 남긴 터널 인터페이스, 오래된 분할 경로, 링크별 DNS는 각각 자기 명령이 필요합니다. 셋 모두 모든 패키지를 성공적으로 제거한 정리 후에도 살아남을 수 있습니다.

ip link
ip route
resolvectl status

자동 시작 항목은 새 로그인 셸에서만 작동하므로 그 셸도 여십시오. 그다음, 뒤에 서비스가 없는데도 터널이 돌아오는 이유인 인터페이스 상태 변경 시 연결을 올리는 스크립트를 /etc/NetworkManager/dispatcher.d/에서 찾으십시오. 아직 무언가가 밖으로 연결한다면 증상이 멈출 때까지 파일을 지우는 대신 그 프로세스를 부모까지 추적하십시오. 기계를 정리하는 일과 계정을 취소하는 일은 여전히 별개의 작업이며, 재부팅이 조용해 보일 때 끝나는 것은 둘 중 하나뿐입니다.

관련 글