はじめに
2021年末にAndroid12 がリリースされました。
私のXperia 1 III SO-51B でも 2022年3月にソフトウェアの更新が来ましたので、早速アップデートしました。
すると、VPN設定画面の接続情報タイトルに「安全ではない」の警告文字が・・・
構わずにタップすると一見成功したようにも見えるのですが、すぐに「切断されました」と表示され、安定接続ができません。
LinuxサーバやPacketiX VPN Server側は何も変更していませんので、どうやらAndroid側の問題のようです。
追記(2023.06):AlmaLinux9ではデフォルトでSHA-1が無効化されているため、この記事でご紹介している内容に加え、OpenVPNクライアント用の設定ファイルの中で「auth SHA1」以外(SHA-2以上)に設定する必要があります。AlmaLinux9における暗号化ポリシーの変更についてはこちらの記事でご紹介しております。
SoftetherのHPを調べてみると、「2021/11/11 Android 12 で新しい L2TP/IPsec 接続が作成できない問題について」という記事が見つかりました。
私はスマホからのVPN接続に L2TP/IPsecを用いていますが、この記事によればAndroid12ではL2TP/IPsecによる接続設定が新規に追加作成できなくなってしまったようです。
ただ今回の事象では、接続設定を新規に追加しようというのではなく、既存の接続設定を用いて接続しようとしているだけです。それでも接続に失敗するのはどういうことでしょうか?
差し当たりSoftetherのHPに従い、OpenVPNクライアントを用いて安定接続ができるか試してみることにします。
PacketiX VPN Server の設定の見直し
PacketiX VPN Serverには OpenVPN互換サーバ機能が実装されているようですので、その機能が有効になっているかどうかを確認します。
今回は Windows版のサーバー管理マネージャを用いました。
仮想HUB管理画面の右下にある「OpenVPN / MS-SSTP 設定」をクリックします。
すると、次のような「OpenVPN / MS-SSTP VPN サーバー機能設定」が開きます。
「OpenVPN サーバー機能を有効にする」にチェックマークが入っていることを確認します。
UDPポートはデフォルトの1194から変更することも可能です。
「OK」をクリックし画面を閉じます。
デフォルトでOpenVPN互換サーバー機能はオンになっているのですね。
ルーターでポートを開放
外出先からOpenVPNサーバ機能に接続できるようにルーターの設定を変更します。
先程 PacketiX VPN Server の「OpenVPN / MS-SSTP VPN サーバー機能設定」の画面で確認(または変更)したUDPポートをサーバマシンに対してポートマッピングします。
スマホへの OpenVPNクライアントアプリのインストール
Android用のOpenVPNクライアントアプリは幾つか存在するようですが、私はSoftether の記事で紹介されていた「OpenVPN Connect」をそのまま使うことにしました。GooglePlayから「OpenVPN Connect」をダウンロードしインストールします。
OpenVPN の設定ファイル(*.ovpn)の作成
インストールした「OpenVPN Connect」を起動してみると、どうやら接続プロファイルを作成するためには、接続情報を記した何らかの設定用ファイルをインポートしなければいけばいようです。
設定ファイルの作成方法はいろいろありますが、今回はPacketiX VPN Server に搭載されている作成機能を用いて作成します。
再びPacketiX VPN Server管理マネージャから「OpenVPN / MS-SSTP 設定」を開きます。
「OpenVPN クライアント用のサンプル設定ファイルを作成」をクリックします。
すると、拡張子 .ovpn の設定ファイルを含んだZIPファイルが生成されますので、PCの任意の場所に保存します。
私の場合は拠点間接続を行っていませんので、今回は ZIPファイルの中身のうち「openvpn_remote_access_l3.ovpn」をベースに設定情報をカスタマイズします。
私が書き換えた内容は以下の通りです。
[PacketiX VPN Server登録ユーザーの認証方法に “パスワード認証” を採用している場合]
67行目付近(VPNサーバーの hostname / IP address、およびポート番号)を自分の環境に合わせ変更します。
remote ******.com 1194(自分のサーバーのDNS名)
[PacketiX VPN Server登録ユーザーの認証方法に “固有証明書認証” を採用している場合]
上記同様、67行目付近(VPNサーバーの hostname / IP address、およびポート番号)を自分の環境に合わせ変更します。
remote ******.com 1194(自分のサーバーのDNS名)
114行目付近(Authentication with credentials.)をコメントアウトします。
;auth-user-pass(行の先頭に「;」を挿入)
125行目付近(CA証明書)は、PacketiX VPN以外の場所で証明書を入手しているならそのCA証明書を貼り付け、もし後ほど説明するようにPacketiX VPNの自己証明書作成機能を用いるのであればデフォルトで記載されているものを利用します。
162行目付近以降(クライアント証明書情報)のコメントアウトを解除し、証明書情報を貼り付けます。
<cert>(行の先頭の「;」を削除)
—–BEGIN CERTIFICATE—–(行の先頭の「;」を削除)
ABCDEF123456・・・・・・(証明書ファイルの中身をコピーペースト)
—–END CERTIFICATE—–(行の先頭の「;」を削除)
</cert>(行の先頭の「;」を削除)
<key>(行の先頭の「;」を削除)
—–BEGIN PRIVATE KEY—–(行の先頭の「;」を削除)
GHIJKLM789123・・・・・・(秘密鍵ファイルの中身をコピーペースト)
—–END PRIVATE KEY—–(行の先頭の「;」を削除)
</key>(行の先頭の「;」を削除)
ついでに私の場合は自宅内のDNSが参照されるように、最終行にDNS設定を追記しておきます。
dhcp-option DNS <LAN内のDNSサーバアドレス>
書き換えが終わったら適当な名前(「***.ovpn」)を付けてPC内に保存します。
このファイルは後ほどスマホアプリ「OpenVPN Connect」で使用しますので、スマホ内ストレージの任意の場所に保管しておきます。
なお、クライアント証明書の証明書ファイル・秘密鍵ファイルですが、PacketiX VPN Server 管理マネージャ内でも作成することが出来ますので、参考にやり方を書いておきます。
<クライアント証明書の作成要領>
まず仮想HUBの管理画面を開きます。
「ユーザーの管理」をクリックします。
すると登録しているユーザー一覧が表示されます。
ユーザー一覧から固有証明書認証にしたいユーザーを選択し、「編集」をクリックします。
すると、ユーザーのプロパティ画面が開きます。
「証明書作成ツール」をクリックします。
すると「新しい証明書の作成」が開きます。
このまま「OK」をクリックします。
すると「証明書と秘密鍵の保存」が開きます。
「X509 証明書ファイル(.CER)と秘密鍵ファイル(.KEY)の組合せとして保存する」を選択し、「OK」をクリックします。
するとファイルの保存場所を求められますので、PCの任意の場所に保存します。
こうして作成された証明書ファイルと秘密鍵ファイルをテキストエディタで開き、先程の OpenVPN 設定ファイルにコピペします。
OpenVPN Connect から設定ファイル(*.ovpn)を読み込む
スマホにインストールした「OpenVPN Connect」を起動します。
すると「Import Profile」の画面が開きます。
右上の「FILE」をタップします。
ファイルがブラウズされますので、先程 PCからスマホに移動しておいたOpenVPN 設定ファイル(*.ovpn)を選択します。
パスワード認証であればユーザ名(および必要に応じてパスワード)を入力し、固有証明書認証であれば何もしないまま、CONNECTをタップすれば設定ファイルがインポートされ、接続プロファイルの作成が完了します。
最後に
以上でAndroid12でも無事にVPN接続できるようになりました。
接続後にすぐ途切れてしまうようなこともありません。
Android12の一時的な不具合なのか、それとも今後も続く仕様なのかは分かりませんが、接続できるようになって良かったです。
追記(2023.06):AlmaLinux9ではデフォルトでSHA-1が無効化されているため、この記事でご紹介している内容に加え、OpenVPNクライアント用の設定ファイルの中で「auth SHA1」以外(SHA-2以上)に設定する必要があります。AlmaLinux9における暗号化ポリシーの変更についてはこちらの記事でご紹介しております。
コメント