LinuxでProton VPNを使う方法は2つあります。公式アプリを入れる方法と、OpenVPNの設定ファイルを使って手動で接続する方法です。
この記事は後者(OpenVPN手動設定)に絞って解説します。GUIのないサーバー、ルーター、コンテナ、最小構成のディストリなど、公式アプリが使えない環境で必要になる方法です。
実際にやってみると、Protonが配布する設定ファイルをそのまま使っても接続できません。私は3か所で詰まりました。同じところで止まる人が多いはずなので、原因と対処を具体的に書きます。
準備: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用パスワード |
罠①:設定ファイルをそのまま使うと起動に失敗する
ダウンロードした .ovpn をそのまま openvpn --config に渡すと、環境によっては起動に失敗します。原因は設定ファイルの末尾にあります。
実際にダウンロードした10個のファイルすべてに、次の3行が含まれていました。
script-security 2up /etc/openvpn/update-resolv-confdown /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 1500Linux ip link set failed: disallowed by script-security settingExiting 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 tun0128.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 をこのアドレスに書き換えたところ、名前解決が復活しています。
接続できたかを確認する方法
「つないだつもり」を防ぐために、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は繋がっている」と表示されるので原因が見えにくく、私も切り分けに時間を使いました。同じところで止まっている方の助けになれば幸いです。

コメント