tailscaleを使って簡単VPNの構築 on MIRACLE LINUX 9

tailscale とは

tailescaleはVPNのサービスの一種です。他のVPNとの違いは中央サーバを経由するような方法ではなく、tailscaleをインストールした端末同士で直接VPN接続を行うことになります。その為、一つのアカウントで何台もtailscaleにログインすると、お互いの端末はフルメッシュでVPN接続を行うことになります。VPN通信のプロトコルにはWireGuard®を使っています。WireGuardは1対1接続で接続ごとに設定が必要になります。フルメッシュにしようと思うと接続数が多く、管理が大変になってしまいます。その手間を無くしたのがtailscaleというものになっています。

そして何より、LinuxをはじめWindows、MacOS、iPhoneのiOS、Androidに対応しているので手持ちのデバイスの種類にほぼ関係なくお互いを接続することが可能なのはとても便利です。

料金

2023/4/17現在では、個人利用(For personal & hobby projects)であれば無料です。20台までという制限や他にも制限がありますが実質20台越えなければ個人で使う分には問題とならないと思います。Pricingのページを確認することをお勧めします。

2023/4/20追記

なんと2023/4/18に新しい料金プランが発表されました。無料枠は拡大され、3ユーザーまで使うことができ、デバイスは100台まで使えるようになりました。やったね!

ただし、ユーザーの追加には独自ドメインのアカウントかGithub Organizationが必要です。Gihub Organizationが無ければ後述のアカウント作成に記載の通り、OIDC規格のサービスを利用することになるはずでちょっと面倒になると思います。

アカウント作成

公式サイト上部右側のTry for freeのリンクからアカウントを登録できます。今時のSSO ID プロバイダを使うタイプなのでGoogleかMicrosoftかGithubあたりのアカウントか、OIDC規格のサービスのアカウント(AuthentikDexKeycloakOryZitadel等)が必要になります。

ML9へのインストールと接続

公式の案内では各ディストリビューションごとに説明がありますが、残念ながらMIRACLE LINUX 9向けがありません。でも大丈夫。RHEL9のソースをちょっとカスタムしてビルドしたのがML9なので、RHEL9の手順に従うとインストールが可能です。

今回のインストールについて

今回はML9のCUIのみのマシンにインストールしました。家に置いて外出先から接続して、公共の無線LANは危ないことがあるのでこのマシンを経由してインターネットを利用する形です。外出先からこのマシンまでがVPN接続で安全になります。その為、tailscaleのインストール後にML9でIPルーティングを可能にする設定も一緒に行っているので公式のインストール手順にいくつか手順を足したり修正しています。

インストール

リポジトリの追加

tailscaleのパッケージが置いてあるリポジトリを追加します。今後はdnf updateでパッケージがアップデートされることになります。

$ sudo dnf config-manager --add-repo https://pkgs.tailscale.com/stable/rhel/9/tailscale.repo
$ sudo dnf install tailscale

途中、リポジトリの鍵のインポートと、インストールの確認で二回、

これでよろしいですか? [y/N]: 

と確認されます。それぞれyと入力してEnterキーを押して進みます。

tailscaledの有効化と起動

tailscaleのデーモンとしてtailscaledの有効化と起動をします。

$ sudo systemctl enable --now tailscaled

Tailscale networkへの登録と認証

tailscaleにログインすると、Web上のAdmin consoleに登録されてネットワーク接続や諸々の操作が可能になります。

$ sudo tailscale up

コマンドを入力すると下記のようなメッセージが表示されます。

To authenticate, visit:

        https://login.tailscale.com/a/XXXXXXXXXXXX

表示されたhttps://以下のURLに別のマシンのブラウザからアクセスすると、SSOを用いたログイン画面が表示されます。アカウント作成時に使ったアカウントでログインを行いましょう。

ログインすると黒いボタンでConnectというのが出てくるので、クリックすると先ほど設定していたマシンがtailscaleに接続されます。

ルーティング許可とexit node

前述の手順までで、他にtailscaleに接続したマシンがあればもうお互いにVPN通信を行うことが可能です。自分のIPv4アドレスはtailscale ip -4で取得することができます。

今回は外出先からこのマシンに接続した上で、このマシンからインターネットに通信が出ていく形にしたいので、exit nodeという機能を使います。exit nodeは、exit nodeとなったマシンを経由してからインターネットへの通信を行う機能です。exit nodeの設定は、まずマシン側でexit nodeになることを許可した上で、Web上のAdmin consoleで設定を行います。

またLinuxでは基本的にどのディストリビューションも似ていますが、IPプロトコルをあるインタフェースから他のインタフェースに転送するにはKernelにIP転送を許可する設定を行わなければできません。その設定も合わせて行います。

IP転送を有効にする

IP転送を有効にする設定をファイルに書き込みます。やり方は公式サイトのExit Nodesに記載があり、そのまま実行します。

$ echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
$ echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
$ sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

ML9ではfirewalldが稼働しているので既知の問題を回避したいので念のため次のコマンドも実行します。

$ sudo firewall-cmd --permanent --add-masquerade

exit nodeとして広告する

広告といっても全世界にではなく、自分のアカウントの中で他のマシンに広告するだけです。

$ sudo tailscale up --advertise-exit-node

exit nodeを有効にする

Web上のAdmin consoleのMachinesのページにアクセスして、対象のマシンの行の一番右側の・・・をクリックしてEdit route settings...をクリックします。

新しく表示された子ウィンドウの一番下に、Use as exit nodeスライドボタンが表示されているので、クリックしてボタンの一部が青くなったら有効になります。右上の×をクリックして閉じてください。

他のマシンからexit node経由でインターネットへ接続する

Windowsへのインストール方法はインストーラーを起動してログインするだけなので割愛します。

Windowsでtailscaleをインストールしたマシンからは、タスクトレイのtailscaleアイコンを右クリックExit nodeをクリック→対象のマシンをクリックで完了です。

直接インターネットに接続するように戻すには、同じくExit nodeからNoneを選択すると元に戻ります。

MagicDNS

tailscaleにはWireGuardにはないオリジナル機能でMagicDNSという機能があり、最初から有効になっています。Admin consoleのMachinesのページに載っているマシン名、それぞれのマシンの一番左の名前で名前解決ができます。ですので、わざわざIPアドレスを調べなくてもマシン名で通信することができます。つまりping 100.x.x.xとやらなくても、ping hogehogeで通信できます。

By @Akio Tomita in
Tags :