OVPNファイルをUbuntuのNetworkManagerにすばやくインポートするスクリプトの作成

OVPNファイルをUbuntuのNetworkManagerにすばやくインポートするスクリプトの作成

ovpnファイルをNetworkManagerにすばやくインポートし、NetworkManagerが使用する最終的なconfファイルに私のログインの詳細を追加したいと思います。

基本的にこれを入れてください

client
dev tun
proto udp
remote italy.privateinternetaccess.com 1197
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-CBC
auth SHA256
tls-client
remote-cert-tls server
auth-user-pass
comp-lzo
verb 1
reneg-sec 0
crl-verify crl.rsa.4096.pem
ca ca.rsa.4096.crt
disable-occ

これを入力してください

[connection]
id=Singapore
uuid=<unique id gen by uuidgen>
type=vpn
permissions=
secondaries=

[vpn]
connection-type=password
auth=SHA256
password-flags=0
remote=sg.privateinternetaccess.com:1197
cipher=AES-256-CBC
comp-lzo=yes
reneg-seconds=0
username=<username>
remote-cert-tls=server
ca=ca.rsa.4096.crt
dev=tun
service-type=org.freedesktop.NetworkManager.openvpn

[vpn-secrets]
password=<password>

[ipv4]
dns-search=
method=auto

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto

通常、NetworkManagerは提供されたOVPNファイルをインポートすると出力します。

[connection]                                                                                                                                                                                                     
id=Ireland
uuid=174fa5b0-0b49-40bc-a301-756acd341c12
type=vpn
permissions=
secondaries=

[vpn]
connection-type=password
auth=SHA256
password-flags=1
remote=ireland.privateinternetaccess.com:1197
cipher=AES-256-CBC
comp-lzo=yes
reneg-seconds=0
remote-cert-tls=server
ca=ca.rsa.4096.crt
dev=tun
service-type=org.freedesktop.NetworkManager.openvpn

[ipv4]
dns-search=
method=auto

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto

usernamesedを使用してパスワードフラグをすばやく変更できますが、部分を追加する方法がわかりません[vpn-secrets]

どんな助けでも大変感謝します。

答え1

新しいPIA OpenVPN設定ファイルには、OpenVPN接続の開始を妨げる可能性があるいくつかのバグが含まれています。

これらはすべて間違いです。

...
cipher aes-256-cbc
auth sha-256
...

修正は比較的簡単です。すべて大文字に変更するだけです。すべての構成ファイルに対してsedを使用すると、これをすばやく実行できます。

sed -i 's/aes-256-cbc/AES-256-CBC/g' *.ovpn

sed -i 's/sha256/SHA256/g' *.ovpn

NetworkManagerを使用してファイルをすばやくインポートするには、このコマンドを使用します。

for i in *.ovpn; do nmcli connection import file "$i" type openvpn; done

NetworkManager設定ファイルにユーザー名とパスワードを追加するには、次の手順に従います。

まずスクリプトを作成します。

#!/bin/bash

# Changes password-flags from 1 to 0
sed -i 's/password-flags=1/password-flags=0/g' $1

# Adds in a username entry after reneg-seconds
sed -i '/reneg-seconds=0/a username=<insert username here>' $1

# Adds in a section [vpn-secrets] for passwords after line 21
sed -i '21 a [vpn-secrets]' $1

# Adds in password into the config file after [vpn-secrets]
sed -i '/\[vpn-secrets]/a password=<insert password here>' $1

# Adds in a new line after password=    
sed -i '/password=/a\\' $1

/etc/NetworkManager/system-connectionsNetworkManagerが設定ファイルを保存する場所に移動します。

すべての設定ファイルでスクリプトをすばやく繰り返すには、このコマンドを実行します。

for i in "*"; do <script location> "$i"; done

答え2

これは、ProtonVPN構成に適したGhostinzshellスクリプトの修正版です。彼はVPN秘密を追加するために固定回線21を使用したことがわかりました。以下に既知のテキスト(サービスタイプ)を追加しました。

#!/bin/bash

# Changes password-flags from 1 to 0
sed -i 's/password-flags=1/password-flags=0/g' $1

# Adds in a username entry after reneg-seconds
sed -i '/reneg-seconds=0/a username=USERNAME_HERE' $1

# Adds in password into the config file after [vpn-secrets]
sed -i '/service-type=/a\
\
[vpn-secrets]' $1
sed -i '/\[vpn-secrets]/a password=PASSWORD_HERE' $1

答え3

sed正式にサポートされているAPIのみを使用してこれを実行するスクリプトを作成しました(修正は不要)。

#! /bin/sh

read -sp 'Username: ' username
echo
read -sp 'Password: ' password

for path in "$@"
do
    name=$(basename "$path" ".ovpn")

    sudo nmcli --terse connection delete id "$name" > /dev/null
    sudo nmcli --terse connection import type openvpn file "$path" > /dev/null

    sudo nmcli connection modify "$name" vpn.persistent true
    sudo nmcli connection modify "$name" vpn.user-name "$username"
    sudo nmcli connection modify "$name" +vpn.data "password-flags = 0, username = $username"
    sudo nmcli connection modify "$name" +vpn.secrets "password=$password"
done

echo

スクリプトが呼び出されると仮定すると、import-openvpn次のように使用できます。

$ import-openvpn *.ovpn
Username:
Password:

これにより、既存のVPN接続が削除され、指定されたユーザー名とパスワードを使用してリセットされます。

関連情報