대부분의 사람은 .ovpn 파일을 라우터 설정 페이지를 읽듯 읽습니다. 주소, 경로, 암호 목록. 코드를 실행하는 부분은 파일 아래쪽, 배관 작업처럼 보이는 지시문 옆에 있으며, 클라이언트가 이미 가진 권한으로 실행됩니다. 그 틈을 부주의하거나 악의적인 프로필이 이용하고, 그 틈이 유용한 DNS 도우미를 삼 주 뒤 지원 문제로 바꿉니다. 이벤트 지시문, 보안 수준, 파일 소유권이 무슨 일이 일어날 수 있는지를 정하고, 스크립트 내용이 실제로 무슨 일이 일어나는지를 정합니다. 연결하기 전에 네 가지를 모두 읽으십시오.

도우미를 실행하는 프로필은 설정 파일이 아니라 프로그램입니다

route와 dhcp-option 같은 지시문은 클라이언트가 세워야 할 상태를 설명하며, 클라이언트는 이를 데이터로 다룹니다. up 스크립트는 다릅니다. 클라이언트가 이를 프로세스로 띄우고 연결 세부 정보로 가득한 환경을 넘기므로, 작성자가 쓴 것은 무엇이든 당신 계정의 권한으로 실행됩니다. 사용자가 관리자인 노트북에서는 첨부 파일로 오거나 포럼 스레드에서 붙여 넣은 파일에게 넓은 문입니다. 구분은 문체의 문제가 아니라 설정과 코드의 차이입니다.

접어야 할 통설은 프로필이 트래픽을 우회시키는 일만 할 수 있다는 것입니다. ip route add를 실행하는 도우미와 원격 호스트를 향해 curl을 실행하는 도우미는 같은 메커니즘이며, 겉에서 본 프로필은 동일합니다. 파일의 겉모습으로는 어느 쪽인지 알 수 없으므로 검토는 스크립트 자체까지 닿아야 합니다.

무엇이 실제로 실행을 정하는가, 그리고 이를 가능하게 하는 줄의 모습

도우미를 좌우하는 것은 세 가지입니다. 이름을 붙이는 이벤트 지시문, 이를 허용하는 script-security 수준, 그리고 클라이언트 플랫폼 자체의 구현입니다. 프로필이 훅을 요청해도 아무 일도 일어나지 않을 수 있습니다, 모바일 클라이언트나 줄인 데스크톱 빌드가 그 이벤트를 아예 구현하지 않을 수 있기 때문입니다. 마찬가지로 기능에 필요한 것보다 많은 권한을 요청하는 프로필은 그 출처에 대해 무언가를 말해 줍니다. 권한 수준은 능력이지 승인이 아닙니다. 이를 가능하게 하는 줄은 이렇게 생겼고, 경로는 당신의 것을 대신합니다.

script-security 2
up /etc/openvpn/update-resolv-conf.sh
down /etc/openvpn/update-resolv-conf.sh

수준 0은 외부 프로그램을 거부하고, 기본값인 수준 1은 클라이언트에 내장된 실행 파일만 허용하므로 훅에는 2 이상이 필요합니다. 수준 3은 주로 옛 암호 전달을 위해 존재하며 피하는 편이 좋습니다. 훅과 함께 배포된 프로필은 지시문과 그 수준을 모두 필요로 하므로, 파일 아래쪽의 한 줄은 인증서 블록만큼 세심한 검토를 받을 자격이 있습니다. OpenVPN 설명서는 권한 수준을 나열하며, 그 문구는 프로필이 실제로 요구하는 것과 나란히 읽을 만합니다.

소유권, 경로, 그리고 도우미가 무엇을 먹는가

당신이 신뢰하지만 다른 계정이 다시 쓸 수 있는 스크립트를 가리키는 프로필은 믿을 만한 배열이 아닙니다. 어제의 검토는 오늘 무엇이 도는지 더 이상 설명하지 않기 때문입니다. 도우미의 소유자와 모드를 확인하고, 설정된 경로가 당신이 살펴본 파일로 이어지며 다른 무언가가 가릴 수 있는 이름으로 이어지지 않는지 확인하십시오. 인수와 환경도 같은 시선을 받아 마땅합니다. 클라이언트는 연결 세부 정보를 훅에 넘기고, 환경 전체를 기록하는 도우미는 지원 티켓에 자격 증명을 적고 있을 수 있습니다. 관련 없는 게시물에서 복사한 DNS 스크립트보다 운영자나 플랫폼이 문서화한 통합을 선호하십시오, 같은 파일을 두고 다투는 두 해석기 관리자는 고장 난 VPN처럼 보이는 실패를 낳습니다.

실패한 훅을 보고할 때는 어디에 붙이기 전에 환경을 가리십시오. 디버깅에 도움이 되는 덤프는 당신을 인증하는 토큰도 함께 담고 있을 수 있습니다.

정리 실패는 터널이 사라진 뒤에 나타납니다

up 도우미는 경로와 해석기 설정을 더하고, down 도우미가 그것을 다시 걷어내야 합니다. down 훅이 없거나, 조용히 실패하거나, 클라이언트가 죽어서 한 번도 실행되지 않으면 남은 것들이 세션보다 오래 살아남습니다. 그러면 트래픽은 아무도 계획하지 않은 길로 가고 이름은 제거되었어야 할 해석기를 통해 풀리며, 터널 자체는 건강해 보입니다. 그런 증상은 연결이 끊긴 뒤에 오기에 프로필이 아니라 네트워크가 비난받습니다.

해체를 별도의 단계로 시험하십시오. 터널을 올리고 경로와 해석기를 적은 뒤 내리고, 그다음 둘 다 사라졌는지 확인하십시오. 깨끗하게 연결하는 프로필도 상태를 남길 수 있고, 도우미의 종료 코드 영은 해석기가 당신이 생각하는 곳에 도착했다는 증거가 아닙니다.

도우미를 검토하고 출구를 남기기

스크립트를 처음부터 끝까지 읽으며 세 가지를 찾으십시오. 권한이 필요한 명령, 당신의 시스템에 없을 수 있는 하드코딩된 경로, 그리고 그것이 하는 모든 네트워크 호출. 그다음 어떻게 실패하는지 보십시오. 오류를 삼키는 도우미는 설정 실수를 수수께끼로 바꿉니다. 스크립트가 무엇을 하고 누가 바꿀 수 있는지 한 문장으로 말할 수 없다면, 그것을 켤 준비가 되지 않은 것입니다. 그 문장이 요구하는 것보다 많은 권한을 요청하는 프로필은 멈추라는 신호입니다.

마지막으로 작동한 프로필과 그것이 가리키던 도우미를 보호된 저장소에 두고 두 버전을 모두 기록하십시오, 그러면 되돌리기는 최악의 순간에 재구성하는 일이 아니라 복사가 됩니다. 도우미가 더 이상 필요로 하지 않는 배포판이나 클라이언트 버전을 위해서만 존재한다면, 오류가 멈출 때까지 권한을 높이는 대신 그 설정을 소유한 구성에서 은퇴시키십시오. 그것이 출구입니다: 움직이는 부품을 줄이는 것이지 권한을 늘리는 것이 아닙니다.

관련 글