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についての詳細な説明は以下のドキュメントを参照。
- https://openvpn.net/community-resources/how-to/
- https://openvpn.net/community-resources/reference-manual-for-openvpn-2-4/
- https://www.openvpn.jp/
起動停止
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
に出力される。