nordvpn, 데몬에 닿을 수 없다고 말할 때: 소켓, 그룹, 아니면 unit?
터널은 멀쩡할 수 있습니다. CLI가 nordvpnd로 가는 소켓을 잃었을 뿐입니다. 명령에서 unit으로, 그다음 소켓 권한으로 나아가며 첫 실패에서 멈추세요.
nordvpn을 실행했더니 데몬에 닿을 수 없다는 메시지가 나오는 것은 대개 이미 늦은 시점에 도착하는 좁은 불평이며, 그 메시지는 터널이 작동하는지에 대해 아무것도 말하지 않습니다. CLI는 앞단일 뿐이고 유닉스 소켓을 통해 백그라운드 프로세스와 이야기하므로, 메시지는 그 대화가 일어나지 않았다는 뜻입니다. 명령에서 바깥으로 나아가며 처음으로 거짓으로 드러나는 지점에서 멈추세요.
오류가 나타나는 곳에서 시작하세요
여기에는 두 프로세스가 얽혀 있고, 그것을 혼동하는 것이 이 일을 미스터리하게 만듭니다. 데몬이 터널을 소유하고 /run/nordvpn/ 아래의 소켓에서 수신합니다. 입력한 명령은 인터페이스를 직접 건드리는 대신 그 소켓에 연결합니다.
소켓이 없거나 연결을 거부하면 CLI는 물어볼 상대가 없으므로 같은 불평의 사용자 데몬 또는 시스템 데몬 변형을 보고합니다. 그 변형 중 하나는 경로를 직접 지목하며, 그것이 전체 대화에서 가장 유용한 문장입니다.
무엇보다 먼저 unit을 확인하세요
서비스 관리자에게 데몬이 실행 중인지 물어보고, 아니라면 한 단계로 시작하고 활성화하세요:
systemctl status nordvpnd
sudo systemctl enable --now nordvpnd
nordvpn version
unit이 있는데 비활성이라면, enable --now은 그것을 시작하고 다음 부팅까지 함께 준비합니다. unit이 없다면 그 패키지는 짐작하는 것이 아니며, 설치된 이름이 메모의 이름보다 중요합니다. 이는 그 레이블로 한 번도 설치된 적 없는 서비스를 활성화하느라 이십 분을 쓰기 전까지는 사소한 구분처럼 들립니다. 있는 것을 읽고, 그것에 따라 행동하세요.
unit 파일을 나열하면 한 명령으로 정리되며, 설치에 대해 무엇이든 결론 내리기 전에 해 둘 가치가 있습니다:
systemctl list-unit-files 'nordvpn*'
service --status-all
릴리스들은 이 서비스를 하나 이상의 unit 이름으로 배포해 왔으므로, nordvpn 대신 nordvpnd을 쓰는 빌드는 바로 옆에서 건강한 서비스가 돌고 있는데도 이 오류의 완벽한 사본을 만들어 냅니다.
소켓과 그 그룹이 접근을 결정합니다
데몬이 돌고 있어도 권한 때문에 연결이 거부될 수 있습니다. 설치 프로그램이 nordvpn 그룹을 만들고 소켓은 그에 맞게 소유되므로, 그 그룹 밖의 사용자는 서비스가 완전히 건강한데도 거부됩니다.
sudo usermod -aG nordvpn "$USER"
newgrp nordvpn
그룹 구성원 자격은 세션이 시작될 때 읽히므로, 변경을 가한 터미널에서는 작동하지 않는 것처럼 보입니다. 실행 중인 세션이 새 그룹을 보려면 새 로그인 셸이나 newgrp이 필요합니다. 명령을 방금 실행한 셸이 아니라 새 셸에서 시험하세요. 그렇지 않으면 아직 적용되지 않았을 뿐인데 수정이 실패했다고 결론 내리게 됩니다.
소켓 자체의 소유가 그 점검의 나머지 절반입니다. 소켓의 그룹과 CLI를 실행하는 셸이 보고하는 그룹을 비교하면, 권한 문제는 재설치 대신 한 단계로 답이 나옵니다:
ls -l /run/nordvpn
id
살아 있는 프로세스는 올바른 소켓의 증거가 아닙니다. 다른 관리자가 시작한 데몬이나 다른 이름의 소켓을 묶은 오래된 패키지도 똑같이 보고합니다. 디렉터리 목록은 그런 경우를 한 줄로 구분해 주므로 재설치보다 낫습니다.
오래된 패키징의 사용자별 프로세스
일부 패키징은 로그인한 사용자 컨텍스트에서 두 번째 프로세스를 실행하며, 데스크톱 통합은 그것을 찾기를 기대합니다. 시스템 init 스크립트가 그 계정으로 내려가지 않고 실행하면, CLI는 어떤 세션도 소유하지 않은 데몬을 찾습니다.
systemd가 아닌 init에서는 문서화된 배치가 역할을 나눕니다: 시스템 서비스는 한 이름으로 돌고, 사용자 쪽 프로세스는 대상 계정 아래에서 chpst -u <user>으로 돕니다. 다른 쪽을 전제하는 시작 스크립트를 추가하기 전에, 설치가 실제로 어느 배치를 쓰는지 확인하세요.
끝났는지 아는 방법
흔한 계기는 업그레이드인데, 새 바이너리가 옛것이 남기지 않은 서비스 상태를 기대하기 때문입니다. 중지, 재활성화, 시작을 그 순서로 하면 정리됩니다:
sudo systemctl stop nordvpnd
sudo systemctl enable --now nordvpnd
sudo systemctl start nordvpnd
nordvpn version
그 마지막 명령이 인수 시험입니다. 버전이 출력된다면 소켓이 응답하는 것이며, 그러면 남은 결함은 모두 로그인, 요금제, 연결 영역으로 옮겨져 이 글의 범위를 벗어납니다. 응답한다면 여기서 읽기를 멈추고 대신 계정을 살펴보세요.
소켓이 여전히 없다면, 왜 종료되었는지 unit 저널을 읽고, 다음으로 /run/nordvpn이 존재하고 서비스 계정이 그곳에 쓸 수 있는지 확인하세요. 올라왔다가 곧바로 죽는 프로세스는 그 저널에 이유를 남기며, 한 줄을 읽는 편이 재설치를 수행하는 것보다 빠릅니다.