Описание
Используйте API chrome.vpnProvider
для реализации VPN-клиента.
Разрешения
vpnProvider
Доступность
Концепции и использование
Типичное использование chrome.vpnProvider
выглядит следующим образом:
Создайте конфигурации VPN, вызвав
createConfig()
. Конфигурация VPN — это постоянная запись, отображаемая пользователю в пользовательском интерфейсе ChromeOS. Пользователь может выбрать конфигурацию VPN из списка и подключиться к ней или отключиться от нее.Добавьте прослушиватели к событиям
onPlatformMessage
,onPacketReceived
иonConfigRemoved
.Когда пользователь подключается к конфигурации VPN,
onPlatformMessage
будет получен с сообщением"connected"
. Период между сообщениями"connected"
и"disconnected"
называется «сеансом VPN». В этот период времени считается, что расширение, которое получает сообщение, владеет сеансом VPN.Инициируйте подключение к VPN-серверу и запустите VPN-клиент.
Установите параметры соединения, вызвав
setParameters()
.Уведомите состояние соединения как
"connected"
вызвавnotifyConnectionStateChanged()
.Когда предыдущие шаги выполнены без ошибок, создается виртуальный туннель к сетевому стеку ChromeOS. IP-пакеты можно отправлять через туннель с помощью метода
sendPacket()
, а любые пакеты, исходящие от устройства ChromeOS, будут получены с помощью обработчика событийonPacketReceived
.Когда пользователь отключается от конфигурации VPN,
onPlatformMessage
будет запущен с сообщением"disconnected"
.Если конфигурация VPN больше не нужна, ее можно удалить, вызвав метод
destroyConfig()
.
Типы
Parameters
Характеристики
- адрес
нить
IP-адрес VPN-интерфейса в нотации CIDR. IPv4 в настоящее время является единственным поддерживаемым режимом.
- широковещательный адрес
строка необязательна
Широковещательный адрес для VPN-интерфейса. (по умолчанию: определяется на основе IP-адреса и маски)
- DNSсерверы
нить[]
Список IP-адресов DNS-серверов.
- доменПоиск
строка[] необязательно
Список поисковых доменов. (по умолчанию: без домена поиска)
- список исключений
нить[]
Исключить сетевой трафик из туннеля в список IP-блоков в нотации CIDR. Это можно использовать для обхода трафика, входящего и исходящего от VPN-сервера. Если пункту назначения соответствует множество правил, побеждает правило с самым длинным совпадающим префиксом. Записи, соответствующие одному и тому же блоку CIDR, считаются дубликатами. Такие дубликаты в сопоставленном списке (exclusionList + includeList) удаляются, а точная повторяющаяся запись, которая будет удалена, не определена.
- список включений
нить[]
Включите сетевой трафик в список IP-блоков в нотации CIDR туннеля. Этот параметр можно использовать для настройки разделенного туннеля. По умолчанию трафик в туннель не направляется. Добавление записи «0.0.0.0/0» в этот список приводит к перенаправлению всего пользовательского трафика в туннель. Если пункту назначения соответствует множество правил, побеждает правило с самым длинным совпадающим префиксом. Записи, соответствующие одному и тому же блоку CIDR, считаются дубликатами. Такие дубликаты в сопоставленном списке (exclusionList + includeList) удаляются, а точная повторяющаяся запись, которая будет удалена, не определена.
- мту
строка необязательна
Настройка MTU для VPN-интерфейса. (по умолчанию: 1500 байт)
- повторно подключиться
строка необязательна
Хром 51+Независимо от того, реализует ли расширение VPN автоматическое повторное подключение.
Если это правда, то сообщения платформы
linkDown
,linkUp
,linkChanged
,suspend
иresume
будут использоваться для сигнализации соответствующих событий. Если значение равно false, система принудительно отключит VPN при изменении топологии сети, и пользователю придется повторно подключиться вручную. (по умолчанию: ложь)Это свойство является новым в Chrome 51; в более ранних версиях он создаст исключение. try/catch можно использовать для условного включения этой функции в зависимости от поддержки браузера.
PlatformMessage
Перечисление используется платформой для уведомления клиента о состоянии VPN-сеанса.
Перечисление
"связанный" "отключен" "ошибка" "ссылкавниз" "ссылкавверх" "ссылкаИзменена" "приостановить" "резюме"
Указывает, что конфигурация VPN подключена.
Указывает, что конфигурация VPN отключена.
Указывает, что в VPN-соединении произошла ошибка, например тайм-аут. Описание ошибки передается в качестве аргумента ошибки в onPlatformMessage.
Указывает, что физическое сетевое соединение по умолчанию не работает.
Указывает, что физическое сетевое соединение по умолчанию восстановлено.
Указывает, что физическое сетевое соединение по умолчанию изменилось, например, Wi-Fi->мобильное.
Указывает, что ОС готовится к приостановке, поэтому VPN должна разорвать соединение. Расширение не гарантированно получит это событие до приостановки.
Указывает, что работа ОС возобновилась, и пользователь снова вошел в систему, поэтому VPN следует попытаться повторно подключиться.
UIEvent
Перечисление используется платформой для указания события, вызвавшего onUIEvent
.
Перечисление
"показатьДобавитьДиалог" "шоуконфигурироватьдиалог"
Запрашивает, чтобы VPN-клиент показывал пользователю диалоговое окно добавления конфигурации.
Запрашивает, чтобы VPN-клиент показывал пользователю диалоговое окно настроек конфигурации.
VpnConnectionState
Перечисление используется VPN-клиентом для информирования платформы о ее текущем состоянии. Это помогает предоставлять пользователю содержательные сообщения.
Перечисление
"связанный" "отказ"
Указывает, что VPN-соединение прошло успешно.
Указывает, что VPN-соединение не удалось.
Методы
createConfig()
chrome.vpnProvider.createConfig(
name: string,
callback?: function,
)
Создает новую конфигурацию VPN, которая сохраняется в течение нескольких сеансов входа пользователя.
Параметры
- имя
нить
Имя конфигурации VPN.
- перезвонить
функция необязательна
Параметр
callback
выглядит так:(id: string) => void
- идентификатор
нить
Уникальный идентификатор созданной конфигурации или
undefined
в случае сбоя.
Возврат
Обещание<строка>
Хром 96+Промисы поддерживаются в Манифесте V3 и более поздних версиях, но обратные вызовы предусмотрены для обратной совместимости. Вы не можете использовать оба при одном вызове функции. Промис разрешается с тем же типом, который передается в обратный вызов.
destroyConfig()
chrome.vpnProvider.destroyConfig(
id: string,
callback?: function,
)
Уничтожает конфигурацию VPN, созданную расширением.
Параметры
- идентификатор
нить
Идентификатор конфигурации VPN, которую необходимо уничтожить.
- перезвонить
функция необязательна
Параметр
callback
выглядит так:() => void
Возврат
Обещание<void>
Хром 96+Промисы поддерживаются в Манифесте V3 и более поздних версиях, но обратные вызовы предусмотрены для обратной совместимости. Вы не можете использовать оба при одном вызове функции. Промис разрешается с тем же типом, который передается в обратный вызов.
notifyConnectionStateChanged()
chrome.vpnProvider.notifyConnectionStateChanged(
state: VpnConnectionState,
callback?: function,
)
Уведомляет платформу о состоянии VPN-сеанса. Это удастся только в том случае, если сеанс VPN принадлежит расширению.
Параметры
- состояние
Состояние VPN-сеанса VPN-клиента.
- перезвонить
функция необязательна
Параметр
callback
выглядит так:() => void
Возврат
Обещание<void>
Хром 96+Промисы поддерживаются в Манифесте V3 и более поздних версиях, но обратные вызовы предусмотрены для обратной совместимости. Вы не можете использовать оба при одном вызове функции. Промис разрешается с тем же типом, который передается в обратный вызов.
sendPacket()
chrome.vpnProvider.sendPacket(
data: ArrayBuffer,
callback?: function,
)
Отправляет IP-пакет через туннель, созданный для сеанса VPN. Это удастся только в том случае, если сеанс VPN принадлежит расширению.
Параметры
- данные
МассивБуфер
IP-пакет, который будет отправлен на платформу.
- перезвонить
функция необязательна
Параметр
callback
выглядит так:() => void
Возврат
Обещание<void>
Хром 96+Промисы поддерживаются в Манифесте V3 и более поздних версиях, но обратные вызовы предусмотрены для обратной совместимости. Вы не можете использовать оба при одном вызове функции. Промис разрешается с тем же типом, который передается в обратный вызов.
setParameters()
chrome.vpnProvider.setParameters(
parameters: Parameters,
callback?: function,
)
Устанавливает параметры VPN-сеанса. Его следует вызывать сразу после получения от платформы сообщения "connected"
. Это удастся только в том случае, если сеанс VPN принадлежит расширению.
Параметры
- параметры
Параметры VPN-сессии.
- перезвонить
функция необязательна
Параметр
callback
выглядит так:() => void
Возврат
Обещание<void>
Хром 96+Промисы поддерживаются в Манифесте V3 и более поздних версиях, но обратные вызовы предусмотрены для обратной совместимости. Вы не можете использовать оба при одном вызове функции. Промис разрешается с тем же типом, который передается в обратный вызов.
События
onConfigCreated
chrome.vpnProvider.onConfigCreated.addListener(
callback: function,
)
Срабатывает, когда платформа создает конфигурацию для расширения.
Параметры
- перезвонить
функция
Параметр
callback
выглядит так:(id: string, name: string, data: object) => void
- идентификатор
нить
- имя
нить
- данные
объект
onConfigRemoved
chrome.vpnProvider.onConfigRemoved.addListener(
callback: function,
)
Срабатывает, когда конфигурация, созданная расширением, удаляется платформой.
Параметры
- перезвонить
функция
Параметр
callback
выглядит так:(id: string) => void
- идентификатор
нить
onPacketReceived
chrome.vpnProvider.onPacketReceived.addListener(
callback: function,
)
Срабатывает при получении IP-пакета через туннель VPN-сеанса, принадлежащего расширению.
Параметры
- перезвонить
функция
Параметр
callback
выглядит так:(data: ArrayBuffer) => void
- данные
МассивБуфер
onPlatformMessage
chrome.vpnProvider.onPlatformMessage.addListener(
callback: function,
)
Срабатывает при получении сообщения от платформы для конфигурации VPN, принадлежащей расширению.
Параметры
- перезвонить
функция
Параметр
callback
выглядит так:(id: string, message: PlatformMessage, error: string) => void
- идентификатор
нить
- сообщение
- ошибка
нить
onUIEvent
chrome.vpnProvider.onUIEvent.addListener(
callback: function,
)
Запускается при возникновении события пользовательского интерфейса для расширения. События пользовательского интерфейса — это сигналы платформы, которые указывают приложению, что пользователю необходимо показать диалоговое окно пользовательского интерфейса.