FreeBSDでProtonVPNに接続する

#freebsd#protonvpn

fuji44

ProtonVPNではFreeBSDを公式にサポートしているわけではなく、ドキュメントや各種設定類も用意されていないため、Linux向けのものを流用する。

pkgに公式のクライアントツール protonvpn-cli があるがこれはv1系で古く、既に別のリポジトリで管理されているv2系に開発が移っている。

protonvpn-cliはopenvpnのラッパーで、ProtonVPNの認証を行うだけでサーバに接続することができとても便利。ただ、今回使った限りだといくつか不都合があったのでクライアントには openvpn を利用する。

  • 不都合1:disconnectしてもすぐに再接続されてしまう。
  • 不都合2:jail終了時にtunデバイスが削除されず残ってしまう。おそらく1の影響で正しくtunを開放できていないため。

jailの設定

jailは事前に作成しておく。要件としては以下。

  • NATを有効にする。
  • VNETを有効にする。
  • allow_tun を有効にする。

devfsルールでTUNデバイスを認識できるようにする必要はない。

というのもallow_tunによってtunデバイスの作成、削除自体は可能になっており、jail内で作成したデバイスファイルはdevfsルールがなくても認識できるため、作成したtunデバイスだけを利用するなら不都合は生じない。ただ、例えば /dev/tun0 がホスト上で存在するにもかかわらず、jail上で ifconfig tun0 create をしても当然作成できない。この場合、jail上では存在しないように見えるため少し混乱する。ただ、 ifconfig tun create とすれば自動的にナンバリングされたデバイスファイルを作成できるため特に不都合はない。セキュリティ面でも不要なファイルは参照できないほうが良いため既に作成されているtunデバイスを使う必要がないのであれば、devfsルールは必要ない。

devfsルールの設定については FreeBSD Jails で記載する。

必要なパッケージをインストール

jailに必要なパッケージをインストールする。

pkg update
pkg install ca_root_nss openvpn

OpenVPNの設定

ProtonVPNのDownloadsページからLinux向けのOpenVPNの設定ファイルを入手する。入手したファイルは /usr/local/etc/openvpn/openvpn.conf に配置する。

次に、設定ファイルを以下のように修正。

  • ユーザ認証に認証情報を定義したファイルを使うようにする
  • 名前解決スクリプトの参照パスを変更
  • LANネットワークへのルートを追加
mkdir /usr/local/etc/openvpn
sed -i "" "s,auth-user-pass,auth-user-pass /usr/local/etc/openvpn/auth.conf,g" /usr/local/etc/openvpn/openvpn.conf
sed -i "" "s,/etc/openvpn/update-resolv-conf,/usr/local/etc/openvpn/update-resolv-conf,g" /usr/local/etc/openvpn/openvpn.conf
echo "route 192.168.10.0 255.255.255.0 172.16.0.1 100" >> /usr/local/etc/openvpn/openvpn.conf

/usr/local/etc/openvpn/auth.conf にはOpenVPN用のユーザ名とパスワードを一行ずつ記載する。OpenVPN用のユーザ名とパスワードはProtonVPNのAccountページから確認できる。設定の詳細は auth-user-pass オプションの説明を参照。

作成後に権限を変更しておく。

chmod 400 /usr/local/etc/openvpn/auth.conf

最後に、OpenVPNを有効にする。(自動起動)

echo 'openvpn_enable="YES"' >> /etc/rc.conf

OpenVPNについての詳細な説明は以下のドキュメントを参照。

起動停止

serviceコマンドで起動・停止できる。

service openvpn start
service openvpn stop

おまけ

protonvpn-cliの使い方

初期設定

protonvpn-cli --init

設定やログファイルなどは ~/.protonvpn-cli に作成される。

接続

# 国指定でサーバ自動選択
protonvpn-cli -cc JP
# サーバ固定接続
protonvpn-cli -c JP-FREE#3

ログ

protonvpn-cli でログを有効にするには、環境変数に PROTONVPN_CLI_LOG=true を設定してコマンドを実行する。ログは ~/.protonvpn-cli/connection_logs に出力される。