OpenVPN sur ChromeOS

ChromeOS suporte OpenVPN de base, mais l'interface pour la configuration est ..... pour le moins sommaire. Peu de chance que vous y trouviez les paramètres que vous devez entrer. Il existe par contre pleins d'autres options supportées, elles n'apparaissent simplement pas dans l'interface. Pour contourner ça, il faut créer un fichier de configuration ONC qui décrit la configuration de votre VPN, puis l'importer sur le système.

ONC est un format JSON permettant de décrire les paramètres réseau (profile WiFi, VPN etc...)

La documentation du format ONC est disponible ici

À priori, ChromeOS ne supporte pas OpenVPN en mode bridge (pas depuis l'interface, ni dans les fichiers ONC)

Pour configurer OpenVPN, on va donc créer le fichier ONC correspondant:

{ "Type":"UnencryptedConfiguration", "NetworkConfigurations":[ { "GUID":"{___GUIDGEN___}", "Name":"VPN", "Type":"VPN", "VPN":{ "Type":"OpenVPN", "Host":"sas.domain.tld", "OpenVPN":{ "ClientCertRef":"{__GUIDP12___}", "ClientCertType":"Ref", "CompLZO":"true", "NsCertType":"server", "Port":1194, "Proto":"udp", "ServerCARef":"{___GUIDCA___}", "Verb":"3", "TlsAuthContent":"___TAKEY___" } } } ], "Certificates":[ { "GUID":"{___GUIDCA___}", "Type":"Authority", "X509":"___CACRT___" }, { "GUID":"{___GUIDP12___}", "Type":"Client", "PKCS12":"___P12___" } ] }

Il ne reste plus qu'à adapter les valeurs. Pour ça, il vous faut:

L'autorité de certificat (cacert.pem)

Le certificat client au format PKCS12 (client.p12)

La clé partagée takey.pem

le modèle de configuration openvpn.onc (ajustez la valeur du serveur sas.domain.tld)

sed -i -e "s/___GUIDCA___/$(cat /proc/sys/kernel/random/uuid)/g" \ -e "s/___GUIDP12___/$(cat /proc/sys/kernel/random/uuid)/g" \ -e "s/___GUIDGEN___/$(cat /proc/sys/kernel/random/uuid)/g" \ -e "s/___TAKEY___/$(cat takey.pem)/g" \ -e "s/___CACRT___/$(cat cacert.pem)/g" \ -e "s/___P12___/$(cat client.p12 | base64)/g" openvpn.onc

Il ne reste plus qu'à aller sur chrome://net-internals puis dans le menu Chrome et importez le fichier ONC