Ошибки при соединении к OpenVPN-сети в Mac OS X/OS X/macOS через Tunnelblick
1. Ошибка выполнения скрипта "client.up.tunnelblick.sh" в Tunnelblick на Mac OS X/OS X/macOS1. Ошибка выполнения скрипта "client.up.tunnelblick.sh"
Ошибка возникает при соединении с OpenVPN-цепью. Особенностью ошибки является тот факт, что Tunnelblick успешно подключается к VPN-серверу, однако, скрипт, выполняющий роль коллбека после подключения, завершается с ошибкой. Журнал подключения при этом выглядит примерно следующим образом./Applications/Tunnelblick.app/Contents/Resources/client.up.tunnelblick.sh -9 -d -f -m -w -ptADGNWradsgnw utun0 1500 1555 10.110.0.3 255.255.255.0 init *Tunnelblick: ********************************************** *Tunnelblick: Start of output from client.up.tunnelblick.sh *Tunnelblick: Retrieved from OpenVPN: name server(s) 45.77.66.120 45.76.3.244 ], search domain(s) ] and SMB server(s) ] and using default domain name openvpn ] *Tunnelblick: WARNING: Ignoring ServerAddresses '45.77.66.120 45.76.3.244' because ServerAddresses was set manually and '-allowChangesToManuallySetNetworkSettings' was not specified *Tunnelblick: Setting search domains to 'openvpn' because the search domains were not set manually (or are allowed to be changed) and 'Prepend domain name to search domains' was not selected *Tunnelblick: Saved existing DNS servers from networksetup *Tunnelblick: Saved existing search domains from networksetup /Applications/Tunnelblick.app/Contents/Resources/client.up.tunnelblick.sh: line 317: 6565 Trace/BPT trap: 5 scutil > /dev/null <<-EOF open # Store our variables for the other scripts (leasewatch, down, etc.) to use d.init # The '#' in the next line does NOT start a comment; it indicates to scutil that a number follows it (as opposed to a string or an array) d.add PID # ${PPID} d.add Service ${PSID} d.add LeaseWatcherPlistPath "${LEASEWATCHER_PLIST_PATH}" d.add RemoveLeaseWatcherPlist "${REMOVE_LEASEWATCHER_PLIST}" d.add ScriptLogFile "${SCRIPT_LOG_FILE}" d.add MonitorNetwork "${ARG_MONITOR_NETWORK_CONFIGURATION}" d.add RestoreOnDNSReset "${ARG_RESTORE_ON_DNS_RESET}" d.add RestoreOnWINSReset "${ARG_RESTORE_ON_WINS_RESET}" d.add IgnoreOptionFlags "${ARG_IGNORE_OPTION_FLAGS}" d.add IsTapInterface "${ARG_TAP}" d.add FlushDNSCache "${ARG_FLUSH_DNS_CACHE}" d.add ResetPrimaryInterface "${ARG_RESET_PRIMARY_INTERFACE_ON_DISCONNECT}" d.add RouteGatewayIsDhcp "${bRouteGatewayIsDhcp}" d.add bAlsoUsingSetupKeys "${bAlsoUsingSetupKeys}" d.add TapDeviceHasBeenSetNone "false" d.add TunnelDevice "$dev" d.add RestoreIpv6Services "$ipv6_disabled_services_encoded" d.add NetworkSetupRestorednsserversInfo "$network_setup_restore_dns_info" d.add NetworkSetupRestoresearchdomainsInfo "$network_setup_restore_searchdomains_info" set State:/Network/OpenVPN # Back up the device's current DNS and SMB configurations, # Indicate 'no such key' by a dictionary with a single entry: "TunnelblickNoSuchKey : true" # If there isn't a key, "TunnelblickNoSuchKey : true" won't be removed. # If there is a key, "TunnelblickNoSuchKey : true" will be removed and the key's contents will be used d.init d.add TunnelblickNoSuchKey true get State:/Network/Service/${PSID}/DNS set State:/Network/OpenVPN/OldDNS d.init d.add TunnelblickNoSuchKey true get Setup:/Network/Service/${PSID}/DNS set State:/Network/OpenVPN/OldDNSSetup d.init d.add TunnelblickNoSuchKey true get State:/Network/Service/${PSID}/SMB set State:/Network/OpenVPN/OldSMB # Initialize the new DNS map via State: ${SKP_DNS}d.init ${SKP_DNS}${SKP_DNS_SA}d.add ServerAddresses * ${FIN_DNS_SA} ${SKP_DNS}${SKP_DNS_SD}d.add SearchDomains * ${FIN_DNS_SD} ${SKP_DNS}${SKP_DNS_DN}d.add DomainName ${FIN_DNS_DN} ${SKP_DNS}set State:/Network/Service/${PSID}/DNS # If necessary, initialize the new DNS map via Setup: also ${SKP_SETUP_DNS}${SKP_DNS}d.init ${SKP_SETUP_DNS}${SKP_DNS}${SKP_DNS_SA}d.add ServerAddresses * ${FIN_DNS_SA} ${SKP_SETUP_DNS}${SKP_DNS}${SKP_DNS_SD}d.add SearchDomains * ${FIN_DNS_SD} ${SKP_SETUP_DNS}${SKP_DNS}${SKP_DNS_DN}d.add DomainName ${FIN_DNS_DN} ${SKP_SETUP_DNS}${SKP_DNS}set Setup:/Network/Service/${PSID}/DNS # Initialize the SMB map ${SKP_SMB}d.init ${SKP_SMB}${SKP_SMB_NN}d.add NetBIOSName ${FIN_SMB_NN} ${SKP_SMB}${SKP_SMB_WG}d.add Workgroup ${FIN_SMB_WG} ${SKP_SMB}${SKP_SMB_WA}d.add WINSAddresses * ${FIN_SMB_WA} ${SKP_SMB}set State:/Network/Service/${PSID}/SMB quit EOF 2019-07-03 19:58:14.268776 MANAGEMENT: Client disconnected 2019-07-03 19:58:14.269380 WARNING: Failed running command (--up/--down): external program exited with error status: 133 2019-07-03 19:58:14.269401 Exiting due to fatal error 2019-07-03 19:58:16.079844 *Tunnelblick: No 'post-disconnect.sh' script to execute 2019-07-03 19:58:16.094710 *Tunnelblick: Expected disconnection occurred.Ошибка устраняется путем изменения кода скрипта client.up.tunnelblick.sh.
Все действия описанные ниже производятся только в терминале (консоли) Mac OS X/OS X/macOS через Tunnelblick.
Команды начинающиеся с приглашения # выполняются от root-пользователя, приглашение $ означает выполнение от обычного пользователя.
Открыв терминал (консоль) Mac OS X/OS X/macOS сперва следует зайти под root-пользователя, для этого необходимо ввести команду указанную ниже, а в ответ на запрос пароля ввести пароль пользователя (обычного пользователя).
$ sudo suЕсли приглашение консоли сменилось с $ на # значит смена пользователя на root завершилась успешно. Далее следует сделать резервную копию скрипта.
Абсолютный путь до скрипта client.up.tunnelblick.sh может быть отличен от рассмотренного в примере.
/Applications/Tunnelblick.app/Contents/Resources/client.up.tunnelblick.sh
# cp /Applications/Tunnelblick.app/Contents/Resources/client.up.tunnelblick.sh /Applications/Tunnelblick.app/Contents/Resources/client.up.tunnelblick.sh.backupЗатем можно безопасно изменить скрипт.
# echo '#!/bin/bash -e' > /Applications/Tunnelblick.app/Contents/Resources/client.up.tunnelblick.sh # echo 'exit 0' >> /Applications/Tunnelblick.app/Contents/Resources/client.up.tunnelblick.shВ конце следует проверить правильность выполнения команд. Результат команды cat должен иметь следующий вид.
# cat /Applications/Tunnelblick.app/Contents/Resources/client.up.tunnelblick.sh #!/bin/bash -e exit 0
Чтобы откатить изменения скрипта client.up.tunnelblick.sh достаточно под root-пользователем ввести следующую команду.
# cat /Applications/Tunnelblick.app/Contents/Resources/client.up.tunnelblick.sh.backup > /Applications/Tunnelblick.app/Contents/Resources/client.up.tunnelblick.sh