백업 전에 VPN이 켜져 있어야 하는 스크립트는 흔히 openvpn을 직접 실행합니다. 그러면 Tunnelblick이 이미 관리하는 프로파일, DNS, 경로 처리를 포기하게 됩니다. 지원되는 경로는 Tunnelblick 자체의 AppleScript 인터페이스이며, 이름이 지정된 구성에 대한 connect, state, disconnect 요청을 받아들입니다. 이것을 사용하고 앱이 계속 주도하게 두십시오.

openvpn이 아니라 앱과 대화하십시오

OpenVPN 프로파일, 엔진 선택, 스크립트, DNS와 경로 통합은 Tunnelblick이 소유합니다. 별도의 openvpn 바이너리는 다른 실행 방식이지 같은 연결로 가는 지름길이 아닙니다.

앱의 스크립팅 인터페이스를 호출하면 그 소유 관계가 그대로 유지되고 모든 요청을 검토할 수 있습니다.

여기의 예제는 Tunnelblick이 Applications에 있고, 동작하는 구성의 이름이 HQ이며, 명령이 로그인한 Mac 사용자의 세션에서 실행된다고 가정합니다. 이름은 실제 구성 이름으로 바꾸십시오.

이름이 지정된 프로파일을 정확히 하나 시작하십시오

connect 요청은 구성을 지정합니다. 마지막으로 선택된 것에 연결하라는 요청이 아닙니다.

구성을 소유한 사용자 세션에서 실행하십시오:

osascript -e 'tell application "/Applications/Tunnelblick.app" to connect "HQ"'

평소의 로그인 확인 절차를 거치십시오. macOS가 호출한 앱에 Tunnelblick 제어를 허용할지 물을 수 있습니다. 승인하기 전에 어떤 앱이고 어떤 대상인지 확인하십시오. 그 대화상자를 자동으로 클릭해 넘기는 것은 대화상자의 목적을 무너뜨립니다.

connect 요청은 터널이 올라오기 전에 반환됩니다

Tunnelblick의 스크립팅 안내서는 분명합니다. connect는 연결이 끝나기 전에 반환됩니다. 종료 상태가 영이라는 것은 요청이 접수되었다는 뜻이며, 트래픽이 흐른다는 뜻이 아닙니다.

상태는 따로 읽으십시오:

osascript -e 'tell application "/Applications/Tunnelblick.app" to get state of first configuration where name = "HQ"'

CONNECTED는 연결 상태의 결과입니다. 작업에 필요한 사설 리소스에 도달할 수 있다는 것까지 증명하지는 않으므로, 종속 작업을 시작하기 전에 따로 확인하십시오.

스크립팅 인터페이스의 다른 제어는 더 넓은 작업을 다루며, 프로파일 하나만 바꿀 때는 필요하지 않습니다.

기한을 두고 기다린 뒤 실패하십시오

끝없이 폴링하면 스크립트가 밤새 매달려 다음 실행을 막습니다. 대기에 기한과 짧은 간격, 명시적인 실패 결과를 주십시오. CONNECTED가 아닌 모든 상태는 전환 상태를 포함해 준비되지 않은 것으로 취급하십시오. 마지막으로 본 상태를 기록하면 실패가 스스로를 설명합니다.

상한이 있는 반복문은 다음과 같습니다:

for i in $(seq 1 30); do
  state=$(osascript -e 'tell application "/Applications/Tunnelblick.app" to get state of first configuration where name = "HQ"')
  if [ "$state" = "CONNECTED" ]; then exit 0; fi
  sleep 1
done
echo "tunnel did not reach CONNECTED" >&2
exit 1

삼십 초는 예시일 뿐 보편적인 타임아웃이 아닙니다. 프로파일이 실제로 사용하는 인증 경로에서 기한을 정하고 워크플로 기록에 남기십시오.

상태를 확인하고 이름으로 연결을 끊으십시오

같은 프로파일을 멈추려면 같은 이름으로 disconnect를 호출하십시오. 요청은 좁게 유지되고 다른 구성은 건드리지 않습니다.

osascript -e 'tell application "/Applications/Tunnelblick.app" to disconnect "HQ"'

프로파일 이름과 제어 주체를 워크플로 기록에 함께 두고, 예상되는 인증과 완료 확인도 함께 적으십시오. 그 기록이 있어야 반년 뒤에도 명령을 검토할 수 있습니다.

컴퓨터 시작 시의 동작은 다른 모드입니다. Tunnelblick의 문서화된 시작 옵션과 그것이 기대하는 자격 증명 설정을 사용하십시오. 로그인한 데스크톱 세션에서 실행하는 명령과 기계와 함께 시작하는 서비스는 문맥을 공유하지 않습니다. 로그인 중에 동작하는 스크립트가 부팅 때도 동작한다고 가정하지 마십시오. 시작 경로는 같은 기한과 기록으로 따로 시험하십시오.

관련 글