Cron은 완벽하게 건강한 VPN을 열 분마다 재시작하고, 같은 작업은 죽은 VPN을 일주일 내내 실행해 둡니다. 두 실패 모두 «작동 중»을 하나의 사실로 다루기 때문에 생기지만, 실제로는 적어도 네 가지입니다. 장치는 관리적으로 활성화되고 경로도 올바르고 암호화도 완전한데도 유용한 것을 아무것도 나르지 않을 수 있습니다. 먼저 관측을 분리하면 검사는 거의 저절로 작성됩니다.

링크 플래그는 경로가 아니라 장치를 설명합니다

모두가 복사하는 검사는 전부 영인 하드웨어 주소를 찾습니다. 그 속임수는 일부 드라이버에서 진짜 인터페이스와 자리 표시자를 구분하지만, tun 장치에는 애초에 보고할 MAC이 없으므로 나머지에서는 아무것도 증명하지 못합니다. ip -brief link show tun0 대신 플래그를 보여 줍니다: UP 는 관리자가 장치를 활성화했음을 뜻하고, LOWER_UP 는 드라이버가 링크를 사용 가능하다고 본다는 뜻입니다. 함께 읽으면 장치가 존재하고 관리적으로 내려가지 않았다는 것을 알 수 있습니다. 둘 다 패킷이 갈 곳이 있다는 것은 말해 주지 않습니다.

OpenVPN 경로가 설치되기 전에 자신의 tun 장치를 만들므로, 아무것도 경로 지정되지 않았는데도 플래그는 완벽해 보일 수 있습니다. 이것을 전제 조건으로 취급하고, 절대 답으로 삼지 마십시오.

패킷이 어디로 갈지 물으십시오

경로 조회는 플래그가 답할 수 없는 질문에 답합니다. ip route get 10.8.0.1 from 10.8.0.2 인터페이스, 출발지 주소, 커널이 사용할 표를 알려 주며, 분할 터널을 바로 그 대상과 대조해 확인해야 합니다. 출발지 주소가 없으면 다른 것을 묻는 셈이고, 정책 라우팅에서는 출발지마다 답이 달라질 수 있습니다. 이것이 가장 저렴하고 정직한 시험이며, 트래픽이 사용할 것과 같은 규칙에 묻기 때문입니다.

WireGuard의 경우 핸드셰이크를 더하십시오. wg show 피어마다 마지막 핸드셰이크의 타임스탬프를 출력하며, 더 이상 진행되지 않는 타임스탬프는 인터페이스 플래그가 무엇을 말하든 피어가 사라졌다는 뜻입니다. 최근 핸드셰이크가 없는 구성된 인터페이스는 직접 만든 모니터링에서 가장 흔한 거짓 양성 중 하나입니다.

220번 표가 들려주는 IPsec 이야기

strongSwan은 경로 설치가 활성화되어 있으면 협상된 선택자의 경로를 220번 표에 넣습니다. ip route list table 220 따라서 협상된 것과 경로가 지정된 것을 구분합니다: 불러온 연결 옆에 빈 표가 있다면 IKE와 CHILD SA는 올라왔지만 그쪽으로 어떤 트래픽도 향하지 않는다는 뜻입니다. 확인하십시오 ip xfrm state 도 함께 말입니다(설치된 보안 연관과 그 끝점을 나열하기 때문입니다).

트랩 정책은 주의해야 할 사례입니다. 경로를 지정하는 대신 흥미로운 트래픽을 기다리므로, 무언가 터널을 깨울 때까지 표는 비어 있습니다.

관리자 상태와 데몬 상태는 서로 다른 목록입니다

NetworkManager는 자신이 소유한 연결만 나열합니다. nmcli -t -f NAME,TYPE connection show --active 직접 wg-quick 또는 OpenVPN 데몬이 시작한 터널에는 아무것도 돌려주지 않습니다.

이 구분은 스크립트가 두 관리자 중 어느 쪽에 물어야 할지 결정할 때 중요합니다. 이 호스트에서 실제로 터널을 소유한 쪽을 고르고 다른 쪽의 침묵은 무시하십시오. 둘 다 있다면 어느 쪽이 권위 있는지 정하고 두 번째를 비활성화하십시오: 하나의 인터페이스에서 경로를 다시 쓰는 두 관리자는 아무도 재현할 수 없는 장애를 만들기 때문입니다. 빠진 항목은 터널이 아니라 관리자에 대한 정보입니다.

다음 단계를 그것이 필요로 하는 검사에 연결하십시오

UDP에는 핸드셰이크가 없고 nc -u 가 패킷이 떠나는 순간 성공하므로, UDP 포트 조사는 준비 상태에 대해 아무것도 증명하지 못합니다. 다음 단계가 실제로 소비하는 것을 조사하십시오: 전달된 포트로의 TCP 연결, 터널 안의 호스트로 보내는 요청, 거기서만 해석되는 이름. 기다림은 타임아웃과 시도 횟수로 제한하고, 다하면 크게 실패하십시오.

클라이언트가 훅을 제공하면 훅이 폴링을 이깁니다. OpenVPN의 --up 와 --down 스크립트는 인터페이스 상태가 바뀐 뒤에 실행되므로 경쟁이 완전히 사라지지만, 데몬이 유지한 권한으로 실행됩니다. OpenVPN이 user 와 group 을 통해 비특권 계정으로 내려갔다면 훅은 그 계정으로 실행됩니다. 그러면 시스템 서비스를 다시 시작하려면 바로 그 명령을 허용하는 sudo가 필요합니다. 재시도를 cron 루프가 아니라 서비스 관리자에게 맡기십시오: 시작 한도가 있는 제한된 재시작 정책은 고장 난 터널을 드러내지만, 무제한 루프는 그것을 끝없이 숨깁니다.

관련 글