답변:
다음 AppleScript를 사용하여 응용 프로그램으로 저장 한 다음 에이전트 (도크 아이콘 없음)로 설정할 수 있습니다.
이 스크립트는 VPN 연결이 없을 때 설정합니다. 따라서 연결이 끊어진 직후에도 다시 연결해야합니다. VPN 연결을 확인하기 위해 간격을 변경할 수 있습니다. 스크립트에서 120 초입니다.
on idle
tell application "System Events"
tell current location of network preferences
set myConnection to the service "VPN University"
if myConnection is not null then
if current configuration of myConnection is not connected then
connect myConnection
end if
end if
end tell
return 120
end tell
end idle
제공된 답변을 약간 변경했습니다. 무언가 가치가 있다면 땅에 들어갈 가치가 있기 때문입니다. VPN이 끊어지면 다시 연결하고 싶지만 의도적으로 VPN 연결이 끊어지면 다시 연결하지 않았습니다. 내가 생각해 낸 해결책은 효과적이고 우아하지 않았습니다.
먼저 pppd 시작 및 종료에 후크를 추가하여 원하는 VPN 상태를 추적했습니다. 이러한 파일은 루트가 소유해야하며 세계 읽기 / 실행 권한 ( sudo chmod 755 /etc/ppp/ip-*
) 이 있어야합니다 .
/ etc / ppp / ip-up :
#!/bin/sh
echo true > /var/run/reconnect_vpn
chmod 644 /var/run/reconnect_vpn
/ etc / ppp / ip-down : OS X 10.9.5 이하
#!/bin/sh
tail /var/log/ppp.log | grep '\[DISCONNECT\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi
/ etc / ppp / ip-down : OS X 10.10 이상
#!/bin/sh
tail /var/log/ppp.log | grep '\[TERMINATE\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi
그런 다음 위의 AppleScript를 수정하여 '/ var / run / reconnect_vpn'상태 변수를 확인하여 VPN을 다시 가져올 지 여부를 확인할 수있었습니다.
on idle
tell application "System Events"
tell current location of network preferences
set myConnection to the service "VPN"
set startOnLogin to true
local doReconnect
try
set doReconnect to (do shell script "cat /var/run/reconnect_vpn")
on error errMsg
set doReconnect to startOnLogin
end try
if myConnection is not null and doReconnect then
if current configuration of myConnection is not connected then
connect myConnection
end if
end if
end tell
return 120
end tell
end idle
이전과 마찬가지로 회선 set myConnection to the service "VPN"
을 VPN이 호출 된 것으로 변경하십시오 . 또한 시작시 'reconnect_vpn'파일이 없으므로 파일을 찾을 수 없을 때 기본값으로 사용할 부울 (startOnLogin)을 추가했습니다. 나는 즉시 시작하고 싶지만, 그렇지 않으면 false로 변경하십시오.
나는 당신이 VPN 행동에 대해 특별한 사람이라면 당신도 해결책을 찾을 때까지 혼란을 좋아하는 사람이기 때문에이 답변에는 청중이 없습니다. 그러나 경우에 따라 여기 있습니다. 누군가에게 도움이되기를 바랍니다.
VPN 자동 연결 (Mac App Store 링크) 이라고하는 앱이 있습니다. $ 0.99입니다.
시작되면 메뉴 표시 줄에 나타납니다. VPN을 "켜기"위해 사용하면 OS X의 네트워크 환경 설정 분할 창에서 설정 한 VPN 연결 프로파일을 모니터링하고 항상 연결 상태를 유지합니다. VPN Auto-Connect의 메뉴 표시 줄 아이콘은 정의한 모든 VPN 연결 목록을 제공하며 항상 연결할 연결을 선택할 수 있습니다.
내가 사용했던 rjarvis2010 의 솔루션을 하지만 난 그게 꽤 행복하지 않았다.
연결하려는 VPN 서비스가 다양하므로 연결된 VPN을 자동으로 다시 연결하는 스크립트를 원했습니다.
on idle
tell application "System Events"
tell location "Uni" of network preferences
-- keep checking for VPN name until a VPN is connected
set empty to true
repeat until empty is false
try
-- set variable "myVPN" to the name of the service that is connected and is a VPN
set myVPN to get name of first service whose (kind is greater than 11 and kind is less than 17) and connected of current configuration is true
set empty to false
on error
set empty to true
delay 15
end try
end repeat
-- doReconnect is a file that reads from the ppp.log and contains "true" by default, "false" if the vpn service was manually disconnected recently
local doReconnect
set doReconnect to (do shell script "cat /var/run/reconnect_vpn")
repeat while doReconnect contains "true"
set ConfProp to get current configuration of service myVPN
if connected of ConfProp is false then
delay 1
set doReconnect to (do shell script "cat /var/run/reconnect_vpn")
if doReconnect contains "true" then
try
connect service myVPN
on error errorMessage
end try
else
exit repeat
end if
end if
delay 5
end repeat
end tell
end tell
return 1
end idle
그것이 당신을 위해 작동하게하려면, 당신은 교체해야합니다
Uni
위치 이름이 무엇이든완료되면 응용 프로그램으로 저장하고 로그인 항목에 저장하면 좋습니다.
에 설명 된대로 또한,이 중요합니다, 당신은 PPP 후크를 설정해야 rjarvis2010 의 ' 솔루션
또한 여러 VPN을 동시에 연결하려고 시도하지 않는 것이 좋습니다. 이 스크립트를 중지하려면 반복 루프가 외부 입력을 수신 할 수 없으므로 활동 모니터를 통해 강제로 종료해야 할 수도 있습니다.
VPN 연결을 유지하기 위해 다른 접근 방식을 사용하고 있습니다. 여기에는 launchd
사용자가 로그인하지 않아도 VPN 연결을 유지할 수 있는 매우 간단한 데몬이 실행됩니다 (절전 모드에서 다시 시작할 때 VPN 연결 끊기 팝업을 피함).
launchd
터미널에서 plist 파일을 만듭니다 .
sudo nano /Library/LaunchDaemons/my.vpn.connector.plist
다음 내용을 입력하십시오.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<dict>
<key>NetworkState</key>
<true/>
</dict>
<key>Label</key>
<string>my.vpn.connector</string>
<key>ProgramArguments</key>
<array>
<string>bash</string>
<string>-c</string>
<string>(test $(networksetup -showpppoestatus MyVPN) = 'disconnected' && ping -o my.vpn.server.url && networksetup -connectpppoeservice MyVPN) ; sleep 10</string>
</array>
</dict>
</plist>
다음 명령을 사용하여 데몬을 시작하고 테스트 할 수 있습니다.
launchctl load /Library/LaunchDaemons/my.vpn.connector.plist
이 방법으로 모든 사용자에 대해 데몬을 실행하고 인터넷 연결이 가능한 경우에만 연결을 시도했습니다. 또한 인터넷 연결이 다시 시작되면 VPN이 자동으로 다시 연결됩니다…
편집하다:
사용자가 로그인하기 전에 (서버에 유용함) VPN 연결이 자동으로 이루어 지므로이 방법이 가장 강력합니다.
요세미티 업데이트 (OSX 10.10)
<key>KeepAlive</key>
<dict>
<key>NetworkState</key>
<true/>
</dict>
요세미티에서 감가 상각됩니다. 대신 다음을 사용할 수 있습니다
<key>KeepAlive</key>
<true/>
또한
networksetup -connectpppoeservice MyVPN
더 이상 요세미티에서 작동하지 않습니다. 대신 이것을 사용할 수 있습니다
scutil --nc start MyVPN
scutil --nc list
네트워크 설정을 통해 볼 수 있고 연결 가능한 VPN 연결이 표시되지 않습니다.
여기에 로그인 후크를 사용하는 몇 가지 답변이 있음을 알았습니다.이 버전은 Launch Agent 및 Launch Daemons를 위해 최신 버전의 OS X에서 더 이상 사용되지 않습니다.
스크립트를 작성하고 에이전트를 시작했습니다. 에이전트는 30 초마다 셸 스크립트를 호출하고 VPN 네트워크에서 고정 된 IP 주소를 핑 (Ping)하려고합니다. 해당 IP를 Ping 할 수없는 경우 VPN 연결을 활성화합니다.
Apple Script App을 통해이 작업을 수행 한 경우 앱 아이콘은 항상 도크에 있습니다. 백그라운드에서 자동으로 실행하는 것을 선호합니다.
아래 프로젝트를 복제하고 추가 정보의 지시를 따르십시오. 최종 결과는 시작 라이브러리 plist 파일을 / Library / LaunchAgents /에 배치하고 쉘 스크립트를 / Library / Application Support / melonsmasher /에 배치하는 설치 프로그램 패키지입니다.
VPN 연결 이름과 VPN 네트워크에있는 IP 주소로 쉘 스크립트 (auto-vpn)를 편집하십시오. plist 파일 (com.melonsmasher.autovpn.plist)에서 실행 간격을 변경할 수 있습니다.
AppleScript의 장점은 거의 모든 작업을 수행 할 수 있다는 점이며 무료입니다. 단점은 일반적으로 응답 속도가 일정하지 않고 (고정 시간 간격으로 폴링) 기본 MAC OS X 앱만 가질 수있는 기능이 없다는 것입니다. 새롭고 새로운 VPN 자동 재 연결 앱은 앱 스토어의 "VPN Monitor"이며, VPN 연결이 끊어지면 즉시 재 연결하고, 선호하는 서비스가 다운 된 경우 다른 VPN 서비스에 다시 연결할 수 있습니다. 가동 중지 시간을 추적하고 최소 시스템 리소스를 사용하여 백그라운드에서 상태 표시 줄 응용 프로그램으로 실행됩니다. VPN 모니터
Can’t get «class svce» "MyVPN" of «class locc» of «class netp» of application "System Events".
System Events got an error: Can’t get service "MyVPN" of current location of network preferences. (-1728)