こんにちは、ナナオです。

今回は巷で噂のtailscaleというVPNを家に導入して、外から安全に家のネットワークにアクセスできるようにしたいと思います。

初期設定

まずはアカウントを作ります。

以下のサイトにアクセスします。

Tailscale

各情報を入力して、デバイスのセットアップをします。

デバイスにtailscaleをインストールします。

windowsを使っている場合はwingetでインストール可能です。

winget install Tailscale.Tailscale

インストールすると以下のような画面が立ち上がります。

次の画面で「Sign in your network」をクリックします。

以下のような画面がブラウザで立ち上がるので、Connectを押します。

成功すると、以下のような画面が表示されます。

これで一つ目のデバイスのセットアップは完了しました。

もう一つデバイスをセットアップしましょう。

家で動いているUbuntu Serverにインストールします。

先ほどの画面からadmin consoleに移動して、以下の「Skip this introduction」をクリックします。

SettingsタブのKeysから、Generate auth key…をクリックします。

項目を入力後Generate keyをクリックし、生成されたAPIキーを保存します。

いよいよlinuxにインストールします。

Ansibleで管理したいので、以下のようなプレイブックを実装しました。

---
- name: Install and Setup Tailscale
  hosts: main
  become: yes
  vars:
    tailscale_auth_key: "<先ほど生成したAPIキー>"

  tasks:
    - name: Ensure /usr/share/keyrings directory exists
      ansible.builtin.file:
        path: /usr/share/keyrings
        state: directory
        mode: "0755"

    - name: Download Tailscale GPG key
      ansible.builtin.get_url:
        url: https://pkgs.tailscale.com/stable/ubuntu/noble.noarmor.gpg
        dest: /usr/share/keyrings/tailscale-archive-keyring.gpg
        mode: "0644"

    - name: Add Tailscale repository list
      ansible.builtin.get_url:
        url: https://pkgs.tailscale.com/stable/ubuntu/noble.tailscale-keyring.list
        dest: /etc/apt/sources.list.d/tailscale.list
        mode: "0644"

    - name: Ensure Tailscale is installed
      ansible.builtin.apt:
        name: tailscale
        state: present
        update_cache: yes

    - name: Check if Tailscale is already authenticated
      ansible.builtin.command: tailscale status
      register: tailscale_status
      failed_when: false
      changed_when: false

    - name: Bring Tailscale up with Auth Key
      ansible.builtin.command:
        cmd: "tailscale up --authkey={{ tailscale_auth_key }}"
      # 既に接続済みの場合は実行しない(冪等性の確保)
      when: tailscale_status.rc != 0

これを実行します。

実行に成功すると、admin consoleに以下のようにIPアドレスが表示されます。

ここではlinux側に向けてpingコマンドを実行します。

ping <発行されているIPアドレス>

なんと、通信できてます。

感想

こんな簡単にVPN構築出来ちゃっていいの…?というくらい簡単に構築できました。

このあとiPhoneにもインストールしてみましたが、あっさりうまくいきました。

すごい、すごすぎる。