
Algo VPNは、個人用のWireGuardおよびIPsec VPNのセットアップを簡素化するAnsibleスクリプトのセットです。利用可能な最も安全なデフォルト設定を使用し、一般的なクラウドプロバイダーで動作します。
詳細については、リリース発表をご覧ください。
Algoサーバーを稼働させる最も簡単な方法は、ローカルシステムまたはGoogle Cloud Shellから実行し、クラウド上に_新しい_仮想マシンを自動でセットアップしてもらうことです。
クラウドホスティングプロバイダーにアカウントを設定します。 AlgoはDigitalOcean(最もユーザーフレンドリー)、Amazon Lightsail、Amazon EC2、Vultr、Microsoft Azure、Google Compute Engine、Scaleway、DreamCompute、Linode、その他のOpenStackベースのクラウドホスティング、CloudStackベースのクラウドホスティング、またはHetzner Cloudをサポートしています。
Algoのコピーを取得します。 Algoスクリプトはローカルシステムから実行されます。取得方法は2つあります。
ZIPファイルをダウンロードします。ファイルを解凍すると、Algoスクリプトを含むalgo-masterというディレクトリが作成されます。
git cloneを使用して、Algoスクリプトを含むalgoというディレクトリを作成します:
git clone https://github.com/trailofbits/algo.git
設定オプションを設定します。 お気に入りのテキストエディタでconfig.cfgを開きます。usersリストに作成したいユーザーを指定します。VPNに接続する予定の各デバイスに対して一意のユーザーを作成してください。また、デプロイ前に他のオプションも確認してください。後で変更すると新しいサーバーをデプロイし直す必要があるかもしれません。
これで完了です。VPNに接続するためのクライアントをセットアップできるようになりました。以下のVPNクライアントの設定に進んでください。
"# Congratulations! #"
"# Your Algo server is running. #"
"# Config files and certificates are in the ./configs/ directory. #"
"# Go to https://whoer.net/ after connecting #"
"# and ensure that all your traffic passes through the VPN. #"
"# Local DNS resolver 172.16.0.1 #"
"# The p12 and SSH keys password for new users is XXXXXXXX #"
"# The CA key password is XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX #"
"# Shell access: ssh -F configs/<server_ip>/ssh_config <hostname> #"
ユーザーが必要とする証明書と設定ファイルはconfigsディレクトリに配置されます。これらのファイルには秘密鍵が含まれるものが多いため、安全に保管してください。すべてのファイルは、新しいAlgo VPNサーバーのIPアドレスを名前とするサブディレクトリに保存されます。
IPsecユーザーへの重要事項: 後でユーザーを追加または削除する場合は、サーバーデプロイ時のDo you want to retain the keys (PKI)?プロンプトでyesを選択する必要があります。これにより、ユーザー管理に必要な認証局が保持されます。
AppleデバイスでのVPNサービス提供にはWireGuardが使用されます。Algoは、config.cfgで定義された各ユーザーに対して、WireGuard設定ファイルwireguard/<username>.confとQRコードwireguard/<username>.pngを生成します。
iOSでは、iOS App StoreからWireGuardアプリをインストールします。次に、WireGuardアプリでQRコードをスキャンするか、AirDropで設定ファイルをデバイスに転送します。
macOSでは、Mac App StoreからWireGuardアプリをインストールします。アプリを実行するとWireGuardがメニューバーに表示されます。WireGuardアイコンをクリックし、Import tunnel(s) from file... を選択して、適切なWireGuard設定ファイルを選択します。
iOSまたはmacOSのいずれでも、WireGuardアプリでトンネル設定を編集することにより、"Connect on Demand"を有効にしたり、特定の信頼できるWi-Fiネットワーク(自宅や職場など)を除外したりできます。(Algoはこれを自動的に行うことはできません。)
Appleデバイスの内蔵IPsec VPNを使用したい場合、または"Connect on Demand"や除外Wi-Fiネットワークを自動設定する必要がある場合は、詳細な設定手順についてApple IPsecクライアントセットアップガイドを参照してください。
AndroidでのVPNサービス提供にはWireGuardが使用されます。WireGuard VPN Clientをインストールします。対応するwireguard/<name>.confファイルをデバイスにインポートし、それを使用して新しい接続を設定します。詳細なインストールおよび設定手順については、Androidセットアップガイドを参照してください。
WindowsでのVPNサービス提供にはWireGuardが使用されます。Algoは、config.cfgで定義された各ユーザーに対して、WireGuard設定ファイルwireguard/<username>.confを生成します。
WireGuard VPN Clientをインストールします。生成されたwireguard/<username>.confファイルをデバイスにインポートし、それを使用して新しい接続を設定します。より詳しい手順とトラブルシューティングについては、Windowsセットアップ手順を参照してください。
LinuxクライアントはWireGuardまたはIPsecのいずれかを使用できます:
WireGuard: WireGuardはLinuxクライアントで優れた動作をします。Ubuntuやその他のディストリビューションでWireGuardを設定する手順については、Linux WireGuardセットアップガイドを参照してください。
IPsec: strongSwan IPsecクライアント(OpenWrt、Ubuntu Server、その他のディストリビューションを含む)については、詳細な設定手順としてLinux IPsecセットアップガイドを参照してください。
WireGuardを使用するOpenWrtルーターについては、ルーター固有の設定手順としてOpenWrt WireGuardセットアップガイドを参照してください。
上記以外のデバイスや手動設定の場合、特定の証明書と設定ファイルが必要になります。必要なファイルは、デバイスのプラットフォームとVPNプロトコル(WireGuardまたはIPsec)によって異なります。
オプションのSSHトンネリングロールを有効にした場合、config.cfgの各ユーザーに対してローカルユーザーアカウントが作成され、それらのSSH authorized_keyファイルがconfigsディレクトリ(user.pem)に配置されます。SSHユーザーアカウントにはシェルアクセスがなく、パスワード認証もできず、限定的なトンネリングオプションのみが許可されます(例: ssh -Nが必要)。これにより、SSHユーザーはトンネルをセットアップするために必要な最小限のアクセスのみを持ち、Algoサーバー上で他の操作を行うことはできません。
以下のコマンド例を使用して、<user>と<ip>を自分のものに置き換えてSSHトンネルを開始します。トンネルがセットアップされたら、ブラウザやその他のアプリケーションが127.0.0.1:1080をSOCKSプロキシとして使用するように設定し、トラフィックをAlgoサーバー経由でルーティングできます:
ssh -D 127.0.0.1:1080 -f -q -C -N <user>@algo -i configs/<ip>/ssh-tunnel/<user>.pem -F configs/<ip>/ssh_config
Algoサーバーは、管理目的でキーのみによるSSHアクセスが設定されています。ターミナルアプリを開き、最初にAlgoをダウンロードしたalgo-masterディレクトリにcdして、成功メッセージに表示されたコマンドを使用します:
ssh -F configs/<ip>/ssh_config <hostname>
ここで<ip>はAlgoサーバーのIPアドレスです。サーバーに定期的にログインする場合は、Algo SSHキーを自動的にロードすると便利です。~/.bash_profileの末尾に次のスニペットを追加して、シェル環境に永続的に追加します:
ssh-add ~/.ssh/algo > /dev/null 2>&1
または、作成されたAlgoサーバーの生成済み設定をSSH設定に含めることもできます。ファイル~/.ssh/configを編集して、次のディレクティブを先頭に追加します:
Include <algodirectory>/configs/*/ssh_config
ここで<algodirectory>はAlgoをクローンしたディレクトリです。
Algoを使用すると、初期デプロイ後にVPNサーバーへのユーザーの追加や削除を簡単に行えます。
IPsecユーザーの場合: 初期サーバーデプロイ時にDo you want to retain the keys (PKI)?プロンプトでyesを選択している必要があります。これにより、ユーザー管理に必要な認証局が保持されます。また、デプロイ時に表示されるp12およびCAキーのパスワードは一度しか表示されないため、保存しておいてください。
ユーザーを追加または削除するには、まずconfig.cfgファイルのusersリストを編集します。必要に応じて新しいユーザー名を追加したり、既存のユーザー名を削除したりします。次に、ターミナルでalgoディレクトリに移動して実行します:
macOS/Linux:
./algo update-users
Windows:
.\algo.ps1 update-users
プロセスが完了すると、新しいユーザー向けの設定ファイルがconfigsディレクトリに生成されます。Algo VPNサーバーは、config.cfgファイルにリストされているユーザーのみを含むように更新されます。削除されたユーザーは接続できなくなり、新しいユーザーはすぐに使用できる新しい証明書と設定ファイルを取得します。
Algoはプライバシーに対して実用的なアプローチを取っています。デフォルトでは、セキュリティとトラブルシューティングに十分な情報を維持しながら、ロギングを最小限に抑えています。
デフォルトで記録されるもの:
sudo wgで確認可能 - 最後のエンドポイントとハンドシェイク時刻を表示)プライバシーはconfig.cfgの2つの主要な設定によって制御されます:
strongswan_log_level: -1 - StrongSwan接続ロギングを制御します(-1 = 無効、2 = デバッグ)privacy_enhancements_enabled: true - ログローテーション、履歴クリア、ログフィルタリング、クリーンアップのマスタースイッチトラブルシューティング時に完全なデバッグを有効にするには、strongswan_log_level: 2とprivacy_enhancements_enabled: falseの両方を設定します。これにより、詳細な接続ログが取得され、すべてのプライバシー機能が無効になります。デバッグ後はこれらの変更を元に戻すことを忘れないでください。
デプロイ後、プライバシー設定を確認します:
ssh -F configs/<server_ip>/ssh_config <hostname>
sudo /usr/local/bin/privacy-monitor.sh
どのVPNソリューションでも完璧なプライバシーは不可能です。クラウドプロバイダーは、サーバー設定に関係なくネットワークトラフィックのメタデータを閲覧し記録します。そしてもちろん、ISPはあなたがVPNサーバーに接続していることを知っています。たとえその中で何をしているかは見えなくてもです。
最高レベルのプライバシーを求めるなら、Algoサーバーを使い捨てとして扱ってください。必要なときに新しいインスタンスを起動し、特定の目的に使用した後、完全に破棄します。クラウドインフラストラクチャの一時的な性質は、意図的に使用すればプライバシー機能となり得ます。
すべてのドキュメントを読んでもまだ質問がある場合は、新しいディスカッションを作成してください。
VPNサービスの悲惨な状況について長い間文句を言ってきたが、そろそろ このテーマできちんとした話をする時だろう。要するに: Algoを使え。
-- Kenn White
VPNプロバイダー/アプリを選ぶ前に、必ず調査を行うこと https://research.csiro.au/ng/wp-content/uploads/sites/106/2016/08/paper-1.pdf ... – またはAlgoを検討してください
-- The Register
Algoは本当に簡単で安全だ。
-- the grugq
開発についてあまり詳しくなくても、クラウドにVPNを非常に短時間でセットアップできるスクリプト群であるAlgo VPNを試してみました。Trail of Bitsのアプローチにはかなり感銘を受けました。
-- Romain Dillet(TechCrunch より)
匿名の適当なVPNプロバイダーに金を払うのが気持ち悪いなら、これが最良のソリューションです。
-- Thorin Klosowski(Lifehacker より)
開発ガイドには以下の情報が記載されています:
すべての寄付は継続的な開発をサポートします。ありがとうございます!
AlgoはAGPLv3の下でライセンスされ配布されています。Algoに基づくクローズドソースの変更やサービスを配布したい場合は、例外の購入をご検討ください。上記の方法と同様に、これも継続的な開発のサポートに役立ちます。
デプロイを開始します。 ターミナルに戻ります。Algoディレクトリで、お使いのプラットフォームに適したスクリプトを実行します:
macOS/Linux:
./algo
Windows:
.\algo.ps1
スクリプトを初めて実行すると、必要なPython環境(Python 3.11+)が自動的にインストールされます。2回目以降はすぐに起動し、すべてのプラットフォーム(macOS、Linux、WSL経由のWindows)で動作します。Windows PowerShellスクリプトは、AnsibleがUnixライクな環境を必要とするため、必要に応じて自動的にWSLを使用します。完全に機能するVPNサーバーには必須ではない、いくつかのオプション機能があります。これらのオプション機能については、デプロイドキュメントで説明されています。