
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に接続する予定の各デバイスに対して一意のユーザーを作成してください。また、デプロイ前に他のオプションも確認してください。後で変更すると新しいサーバーをデプロイし直す必要があるかもしれません。
デプロイを開始します。 ターミナルに戻ります。Algoディレクトリで、お使いのプラットフォームに適したスクリプトを実行します:
macOS/Linux:
./algo
Windows:
.\algo.ps1
スクリプトを初めて実行すると、必要なPython環境(Python 3.11+)が自動的にインストールされます。2回目以降はすぐに起動し、すべてのプラットフォーム(macOS、Linux、WSL経由のWindows)で動作します。Windows PowerShellスクリプトは、AnsibleがUnixライクな環境を必要とするため、必要に応じて自動的にWSLを使用します。完全に機能する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