Proton VPNをLinuxでOpenVPN接続する方法【実際に踏んだ3つの罠と対処】

この記事にはアフィリエイト広告(プロモーション)を含みます。リンク経由で契約された場合、当サイトに報酬が発生することがあります。ただし記事の内容は実際に契約・検証した結果に基づいており、報酬の有無で評価を変えることはしていません。

LinuxでProton VPNを使う方法は2つあります。公式アプリを入れる方法と、OpenVPNの設定ファイルを使って手動で接続する方法です。

この記事は後者(OpenVPN手動設定)に絞って解説します。GUIのないサーバー、ルーター、コンテナ、最小構成のディストリなど、公式アプリが使えない環境で必要になる方法です。

実際にやってみると、Protonが配布する設定ファイルをそのまま使っても接続できません。私は3か所で詰まりました。同じところで止まる人が多いはずなので、原因と対処を具体的に書きます。

公式アプリの導入手順はProtonの公式サイトが最新なので、そちらを参照してください。この記事は「アプリが使えない環境でどうするか」に特化します。

検証条件:2026年7月25日、Proton VPN(Unlimitedプラン)の設定ファイルを使い、Linux(Alpine 3.20 / OpenVPN 2.6.20 aarch64)から実際に接続して確認しました。記事内で挙げる設定ファイルの記述は、日本・米国・英国・シンガポール・ドイツ・韓国の計10ファイルすべてで同じであることを確認しています。

準備:2種類の認証情報を混同しない

最初につまずきやすいのがここです。Protonアカウントのパスワードでは接続できません。

OpenVPN用に別の認証情報が発行されており、それを使う必要があります。

  • OpenVPN専用の認証情報:account.protonvpn.com にログインし、Account → OpenVPN / IKEv2 username で確認できます。ユーザー名とパスワードの2つです
  • 設定ファイル(.ovpn):同じ画面の Downloads → OpenVPN configuration files から取得します。プラットフォームとプロトコル(UDP推奨)、接続先の国またはサーバーを選んでダウンロードします

認証情報は次の形式で保存しておきます(1行目にユーザー名、2行目にパスワード)。

ファイル 内容
creds.txt 1行目:OpenVPN用ユーザー名
2行目:OpenVPN用パスワード
このファイルは平文でパスワードを保持します。パーミッションを 600 にして、他ユーザーから読めない状態にしてください。バージョン管理には絶対に含めないでください。

罠①:設定ファイルをそのまま使うと起動に失敗する

ダウンロードした .ovpn をそのまま openvpn --config に渡すと、環境によっては起動に失敗します。原因は設定ファイルの末尾にあります。

実際にダウンロードした10個のファイルすべてに、次の3行が含まれていました。

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

update-resolv-conf は、DNS設定を書き換えるためのスクリプトです。Debian系で openvpn パッケージを入れると付いてきますが、それ以外の環境には存在しません。存在しないスクリプトを呼ぼうとして、OpenVPNが起動に失敗します。

対処

この3行を削除してから使います。

grep -v -E '^(up|down|script-security) ' 元.ovpn > 使う.ovpn

削除するとDNSの自動設定も効かなくなりますが、それは罠③で扱います。

罠①:設定ファイルをそのまま使うと起動に失敗する

罠②:script-security を 0 にすると別の理由で落ちる

罠①でスクリプト実行が問題になったので、「ならスクリプト実行を全面禁止すればいい」と考えて --script-security 0 を付けたところ、今度は別の理由で落ちました。

ログにはこう出ます。

TUN/TAP device tun0 opened
/sbin/ip link set dev tun0 up mtu 1500
Linux ip link set failed: disallowed by script-security setting
Exiting due to fatal error

厄介なのは、トンネルが張れる直前まで進んでから落ちる点です。認証は通っているので、認証エラーと勘違いしやすいところです。

原因と対処

OpenVPNは、tunデバイスを設定するために /sbin/ip という外部コマンドを実行しますscript-security 0 はこれも禁止してしまいます。

レベル 意味 この用途では
0 外部プログラムを一切実行しない tun0の設定ができず失敗する
1 ip / ifconfig / route など組み込みコマンドのみ許可 これが正解
2 ユーザー定義スクリプトも許可 罠①の問題が再発する

レベル1なら、tunデバイスの設定は通り、設定ファイル側のスクリプトは実行されません。罠①の対処と両立します。

罠③:接続できたのにDNSが引けなくなる

ここが一番わかりにくい問題です。接続には成功し、ログにも Initialization Sequence Completed と出ます。tun0にIPも割り当てられています。なのに通信ができません。

切り分けると、こうなっていました。

  • IPアドレス直打ちの通信は通る(例:1.1.1.1 へのHTTPSは応答あり)
  • ホスト名を使った通信はすべて失敗する

つまりトンネルは正常で、DNSだけが死んでいます。

原因

接続すると、ルーティングテーブルにこの2行が入ります。

0.0.0.0/1 via 10.x.x.1 dev tun0
128.0.0.0/1 via 10.x.x.1 dev tun0

この2つで全アドレス空間をカバーし、通信をトンネルへ向けます(defaultルートを書き換えずに優先させる定石です)。その結果、これまで使っていたDNSサーバーがトンネル経由になり、到達できなくなります。

罠①で update-resolv-conf を削除しているので、DNSの自動切り替えも働きません。

対処

接続後に、トンネル内から引けるDNSへ手動で切り替えます。優先順位はこうです。

  • OpenVPNのログに dhcp-option DNS x.x.x.x がpushされていれば、そのアドレス
  • なければ tun0 のゲートウェイ(ip route の tun0 行にある via のアドレス)
  • それも不明なら 10.2.0.1(Proton VPNの既定DNS)

実際に接続した環境では、tun0のゲートウェイ 10.96.0.1 がDNSとして応答しました。/etc/resolv.conf をこのアドレスに書き換えたところ、名前解決が復活しています。

切断時は元のDNS設定に戻すのを忘れないでください。戻さないと、VPNを切った後にトンネル内DNSを参照し続けて、今度は通常の通信で名前解決ができなくなります。私はこれで一度、速度測定の基準値が0になりました。

接続できたかを確認する方法

「つないだつもり」を防ぐために、2つ確認します。

1. 出口IPが変わったか

接続前後で外から見えるIPアドレスを比較します。実際の検証では次のようになりました。

接続前 接続後
出口IP 回線事業者のIP 103.155.232.201
判定される事業者 使っている回線が特定できる xTom Japan(Protonの接続先)

2. DNSがトンネル内を向いているか

/etc/resolv.conf のnameserverが 10.x 系(トンネル内部のアドレス)になっているかを確認します。ここが元のまま外部を向いていると、通信内容を暗号化しても「どのサイトを見たか」は回線事業者に伝わります。

この2つが両方とも変わっていれば、VPNとして機能しています。

実際の速度

同じ環境で日本サーバーの速度を測りました。VPN未接続の基準値は558.4 Mbpsです。

接続先 下り速度 維持率 遅延
日本(最速のサーバー) 197.2 Mbps 35.3% 16.7ms
日本5台の平均 159.1 Mbps 28.5% 20.6ms

サーバーによって70.8〜197.2 Mbpsと2.8倍の幅がありました。差は混雑度と対応しているので、設定ファイルをダウンロードする画面で混雑度の低いサーバーを選ぶのが有効です。

海外サーバーを含む詳細はProton VPNの速度を実測【NordVPNと比較したら2.7倍の差がついた】、日本サーバーの掘り下げはProton VPNの日本サーバーを実測検証にまとめました。

▶ Proton VPNを公式サイトで見る(無料版から試せます)

まとめ:詰まりやすい3か所

同じところで止まらないよう、要点を再掲します。

症状 原因 対処
起動直後に失敗する 設定ファイルの up/down が呼ぶスクリプトが存在しない 該当3行を削除する
ip link set failed で落ちる script-security 0/sbin/ip の実行まで禁止している レベル1にする
繋がるのに名前解決だけ失敗 DNSサーバーがトンネル経由になり到達不能 接続後にトンネル内DNSへ切り替える

いずれも「設定ファイルをそのまま使えば動く」という前提だと原因にたどり着けません。特に2つ目は認証エラーと見分けがつきにくいので、ログの最終行を確認するのが早道です。

接続そのものができない場合は、原因が別のところにある可能性があります。Proton VPN が接続できない時の原因と対処法もあわせて確認してください。

よくある質問(FAQ)

LinuxでProton VPNを使うには公式アプリが必要ですか?

必要ありません。OpenVPNの設定ファイルを使えば手動で接続できます。GUIのないサーバーやルーター、コンテナなど公式アプリが使えない環境ではこの方法が有効です。

Protonアカウントのパスワードで接続できますか?

できません。OpenVPN用に別の認証情報が発行されています。account.protonvpn.com の Account → OpenVPN / IKEv2 username で確認してください。

設定ファイルをそのまま使うと接続できないのはなぜですか?

配布される .ovpn には update-resolv-conf というスクリプトを呼ぶ記述が含まれており、そのスクリプトが存在しない環境では起動に失敗するためです。該当する up / down / script-security の3行を削除してください。

接続はできたのにインターネットに繋がりません

DNSが原因の可能性が高いです。トンネル確立後は全通信がtun0経由になるため、これまでのDNSサーバーに到達できなくなります。/etc/resolv.conf をトンネル内のDNS(tun0のゲートウェイ、またはProtonの既定DNSである10.2.0.1)に書き換えてください。

接続できているかどうかを確認する方法は?

出口IPアドレスが変わっていること、そして /etc/resolv.conf のnameserverが10.x系のトンネル内アドレスになっていることの2点を確認してください。両方が変わっていればVPNとして機能しています。

まとめ

実際にLinuxから接続して分かったことをまとめます。

  • 認証情報はアカウントのパスワードとは別。 OpenVPN専用のものを使う
  • 配布される設定ファイルはそのままでは動かないことがある。 up / down / script-security の3行が原因
  • script-security は 0 ではなく 1。 0だとtunデバイスの設定すらできない
  • 接続後にDNSの張り替えが必要。 繋がっているのに名前解決だけ失敗する状態になる
  • 速度は日本サーバーで平均159.1 Mbps、最速197.2 Mbps

手順自体は難しくありませんが、詰まりどころが独特です。特に3つ目は「VPNは繋がっている」と表示されるので原因が見えにくく、私も切り分けに時間を使いました。同じところで止まっている方の助けになれば幸いです。

▶ Proton VPNを無料で試す

この記事は公式手順の書き写しではなく、実際に接続して詰まった箇所をそのまま書いています。逆に言えば、公式アプリを使う方法については検証していないので触れていません。GUIが使える環境なら、素直に公式アプリを入れる方が早いと思います。

関連記事

コメント

タイトルとURLをコピーしました