[Ubuntu Server 22.04] 　Tailscale インストール

## <font color="MediumVioletRed">注意事項</font>
**リンク先に記載**

**[[Ubuntu Server 22.04] 個人的初期設定 覚書](https://qiita.com/QiitaYkuyo/items/54cf4dc7acab59074a5e)**

## 概要
#### 「目次」
**1.Tailscale インストール**
　　**[概要](#概要)**
　　**[コンストラクション](#コンストラクション)**
　　　**ｰ[Tailscale インストール](#tailscale-インストール)**
　　　　 **[1.インストレイション](#1インストレイション)**
　　　　　 **[[一括インストール]](#一括インストール)**
　　　　　 **[[手動インストール]](#手動インストール)**
　　　　 **[2.Tailscale サービスの認証](#2tailscale-サービスの認証)**
　　　　　 **[[Authentication]](#authentication)**
　　　**ｰ[任意な追加の設定](#任意な追加の設定)**
　　　　 **[3.オプション](#3オプション)**
　　　　　 **[[IPフォワードの有効化]](#ipフォワードの有効化)**
　　　　　 **[[サブネット ルーティング、出口ノードの利用可能化]](#サブネット-ルーティング出口ノードの利用可能化)**
　　　　 **[4.ブラウザから有効化](#4ブラウザから有効化)**
　　　**ｰ[その他の操作](#その他の操作)**
　　　　 **[Tailscale へのログイン、ログアウト、アカウントの追加、アカウントの切り替え](#tailscale-へのログインログアウトアカウントの追加アカウントの切り替え)**
　　　　　 **[[ログイン、再ログイン（＋起動）]](#ログイン再ログイン起動)**
　　　　　 **[[ログアウト]](#ログアウト)**
　　　　　 **[[アカウントの追加]](#アカウントの追加)**
　　　　　 **[[アカウントの切り替え]](#アカウントの切り替え)**
　　　　 **[テールネット内にローカル サーバーを展開](#テールネット内にローカル-サーバーを展開)**
　　**[引用元、参照元、参考先](#引用元参照元参考先)**
[2.WeTTY インストール](https://qiita.com/QiitaYkuyo/items/db4febd9915fb7708e77)
[3.Ubuntu Desktop(GDM3 ubuntu カスタム) インストール、自動ログイン設定](https://qiita.com/QiitaYkuyo/items/06a22d394c4fb7f15867)
[4.Ubuntu Desktop RDP セットアップ](https://qiita.com/QiitaYkuyo/items/c8e700da451e894e5d53)
[5.PowerTOP TLP インストール](https://qiita.com/QiitaYkuyo/items/89636030b3cfc1bf5fea)
[6.自動再起動設定（Crontab, rtcwake）](https://qiita.com/QiitaYkuyo/items/401bf93e26300551d51f)

#### 「説明」
Tailscale は、非常に簡単に構築できる、機器同士を VPN でピアツーピア接続するソフトです。

## コンストラクション

### Tailscale インストール

#### 1.インストレイション
 **➀～➃ までを行う**

##### [一括インストール]
```bash:bash
‘[手動インストール]の ➀～➁ に相当‘
curl -fsSL https://tailscale.com/install.sh | sh
```

##### [手動インストール]
```bash:bash
’➀ Tailscale 公式サイトから、リポジトリと鍵を追加’
  curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
  curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list

’➁ Tailscale をインストール’
  sudo apt update
  sudo apt install tailscale

’➂ Tailscale の起動及び、ブラウザでの認証’
  sudo tailscale up

’➃ Tailscale の起動確認’
  tailscale ip -4
  tailscale status
```

#### 2.Tailscale サービスの認証
　ブラウザから、Tailscale サービスの認証を行います。
##### [Authentication]
　1. `sudo tailscale up` を実行して表示された URL に適当なブラウザからアクセスしてください
　　※再認証は `sudo tailscale up --force-reauth`
![スクリーンショット (482).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115728/88b150e0-c922-e51d-23d4-eb4f628cd54a.png)
　2. すでに所有している Google, Microsoft, GitHub のいずれかのアカウントでサインインし、そのアカウントを Tailscale に登録してください。
※ここでは Google アカウントを使っています。
![スクリーンショット (483).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115728/da5c30c3-939e-fdc6-4a2c-0fff2177a3e7.png)
![スクリーンショット (484).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115728/45374850-088c-0fe8-07db-373b1c21d3ae.png)
![スクリーンショット (485).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115728/99813dd4-6230-5f11-4a2b-4a43ca5940a1.png)
↑サインインが完了すれば、上記の画面が表示され、認証されています。
　3. アドミンコンソールにアクセスして機器が登録されていることを確認します。
https://login.tailscale.com/admin/machines
![スクリーンショット (486).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115728/8f1fb10f-1644-ddce-c6a5-84feded69104.png)
**以上で認証は完了です。**

### 任意な追加の設定
 <font color="Red">※必要な場合のみ行う</font>

#### 3.オプション

##### [IPフォワードの有効化]
```bash:bash
’➄サブネットルーターの設定、IPフォワードの有効化’
  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
```
　<font color="Red">オプション：UFW での許可</font>
```bash:bash
Add_Text='\\n-A ufw-before-forward -i tailscale0 -j ACCEPT \n-A ufw-before-forward -o tailscale0 -j ACCEPT'

# 確認
sudo grep "# End required lines" /etc/ufw/before.rules
sudo sed '/^# End required lines$/a '"$Add_Text" /etc/ufw/before.rules | awk '/# End required lines/,/# allow all on loopback/'

# 実行
sudo sed -i '/^# End required lines$/a '"$Add_Text" /etc/ufw/before.rules

# 確認
sudo awk '/# End required lines/,/# allow all on loopback/' /etc/ufw/before.rules
```

##### [サブネット ルーティング、出口ノードの利用可能化]
　<font color="Red">[IPフォワードの有効化]を行った後に実行する。</font>
```bash:bash
’➅′   1.LAN内へのアクセスと、ローカルIPアドレスの使用を可能にさせる’
  sudo tailscale down
  sudo tailscale up
  sudo tailscale up --advertise-routes=xxx.xxx.xxx.xxx/24

’➅′′  2.対象PCを出口ノードとして使用できるようにする　　　  　　　 ’
  sudo tailscale down
  sudo tailscale up
  sudo tailscale up --advertise-exit-node

’➅′′′ 1.LAN内へのアクセスと、ローカルIPアドレスの使用を可能にさせる’
’　    2.対象PCを出口ノードとして使用できるようにする　　　  　　　 ’
  sudo tailscale down
  sudo tailscale up
  sudo tailscale up --advertise-routes=xxx.xxx.xxx.xxx/24 --advertise-exit-node

  # 例）
  # tailscale up --advertise-routes=192.168.10.0/24 --advertise-exit-node
  # tailscale up --advertise-routes=172.19.0.0/16 --advertise-exit-node

  # うまくいかない場合
  # sudo tailscale up --reset
```
Available ; Enable

#### 4.ブラウザから有効化
　<font color="Red">[サブネット ルーティング、出口ノードの利用可能化]を行った後に実行する。</font>
　次に アドミンコンソール へアクセス
https://login.tailscale.com/admin/machines
##### [別区分のネットワークへの転送を有効化]
・"･･･" ⇒ "Edit route setting" ⇒ "Subnet routes"
![スクリーンショット (491).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115728/5f0a3398-9767-23bc-558d-7e9424cc83b2.png)
![スクリーンショット (492).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115728/bad0c52e-916f-fe98-607f-ae3ffa790963.png)

##### [出口ノードの有効化]
・"･･･" ⇒ "Edit route setting" ⇒ "Use as exit node"
![スクリーンショット (491).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115728/5f0a3398-9767-23bc-558d-7e9424cc83b2.png)
![スクリーンショット (487).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115728/d322b530-5787-82a9-e3ee-5d2f933f4b27.png)
![スクリーンショット (488).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115728/ff4f90c0-36ec-9e37-a4f9-7bf2e94e0004.png)

### その他の操作
#### Tailscale へのログイン、ログアウト、アカウントの追加、アカウントの切り替え
##### [ログイン、再ログイン（＋起動）]
 1. 現在アクティブなアカウントがないときに認証 及び ログイン
    `sudo tailscale up`
 2. 再認証（現在アクティブなアカウントからログアウトし、再度ログインする）
    `sudo tailscale up --force-reauth`
##### [ログアウト]
 1. 切断 及び 現在アクティブなアカウントからログアウト
    `sudo tailscale logout`
 2. 特定のアカウントからログアウト
    `sudo tailscale logout MailAddress@gmail.com`
##### [アカウントの追加]
 1. アカウントの追加
    `sudo tailscale login`
 2. 追加されたか確認
    `sudo tailscale switch --list`
##### [アカウントの切り替え]
 1. すべてのログインしているアカウントを表示（\*が現在アクティブなアカウントを示す）
    `sudo tailscale switch --list`
 2. 指定したアカウントをアクティブに切り替える
    `sudo tailscale switch MailAddress@example.com`

#### テールネット内にローカル サーバーを展開
**"version 1.38.1" 以降**
```bash:bash
ーーー使い方ーーー
  # 末尾の off でアクティブなサーバーの一覧からサーバーを削除する
  tailscale serve https:<port> <mount-point> { local-IP:port / full-path / text } [off]
  tailscale serve tcp:<port> tcp://localhost:<local-port> [off]
  tailscale serve tls-terminated-tcp:<port> tcp://localhost:<local-port> [off]
  tailscale serve status [--json]

  echo "{ ... json ... }" | tailscale serve set-raw

  tailscale funnel <port> on/off
  tailscale funnel status [--json]
ーーーーーーーーー

※例）
# 展開したものを非公開にする
sudo tailscale serve https / off

# URL のカスタマイズの例（"/Add_URL/" の部分）
sudo tailscale serve https /Add_URL/ text:"Hello, world!"
# アクセスは "https://ipアドレス.tail１６進数.ts.net/Add_URL"

# 127.0.0.1:3000のWebサーバーへの接続をプロキシ
sudo tailscale serve https / 127.0.0.1:3000
# port:10000 で展開
sudo tailscale serve https:10000 / http://127.0.0.1:3000

# 単一のファイルまたはファイルをディレクトリごと展開（絶対パス） 
sudo tailscale serve https / "/home/$(whoami)/File.txt"
sudo tailscale serve https /  /home/$(whoami)/Directory/

# シンプルに文字列を配信
sudo tailscale serve https / text:"Hello, world!"

# TCPパケットを、ローカルTCPサーバーの port:5432 に転送
sudo tailscale serve tcp:2222 tcp://localhost:22

# TCPパケットを、tailnet内でTLSでの接続を終端させ、ローカルTCPサーバーの port:80 に転送
sudo tailscale serve tls-terminated-tcp:443 tcp://localhost:80

# サーバーのステータス表示
tailscale serve status

# serve 設定の全消し
echo {} | sudo tailscale serve set-raw

# インターネット全体に公開 （<port> = 443, 8443, 10000）
sudo tailscale funnel 443 on

# 展開されているすべてのサーバーの funnel のステータスを出力
tailscale funnel status
```

以下は　2023/03/14 (version 1.36.2)　までの方法
　~~検証した翌日にコマンドが変わるとかウケる~~
```bash:bash
### A ### / ### B ### / ### C ###

### A ###
tailscale serve [flags] "mount-point" {proxy|path|text} <arg>

  flags:
    [--remove] "mount-point"
    # <port> = 443(既定), 8443, 10000
    [--serve-port] <port>
  mount-point:
    "/"
    "/～～～"
  proxy|path|text:
    {proxy} <port OR ip:port>
    {path} <full-path>
    {text} "<some-text>"

※例）
sudo tailscale serve / proxy 80
sudo tailscale serve --remove /

sudo tailscale serve / path "/home/$(whoami)/File.txt"
sudo tailscale serve / path  /home/$(whoami)/Directory/
sudo tailscale serve --remove /

sudo tailscale serve /Add_URL/ text "Hello, world!"
sudo tailscale serve --remove /Add_URL/

sudo tailscale serve --serve-port 10000 / proxy 80
sudo tailscale serve --remove --serve-port 10000 / 


### B ###
tailscale serve [flags] {sub-command} <arg>

  flags:
    [--remove] {tcp} <port>
    # <port> = 443(既定), 8443, 10000
    [--serve-port] <port>
  sub-commands:
    {status}
    {status --json}

    {tcp} <port>
    {tcp --terminate-tls} <port>

    # インターネット全体に 公開/非公開
    {funnel} <on/off>

※例）
tailscale serve status

sudo tailscale serve tcp 5432
sudo tailscale serve --remove tcp 5432

sudo tailscale serve tcp --terminate-tls 3706
sudo tailscale serve --remove tcp 3706

sudo tailscale serve --serve-port 8443 tcp --terminate-tls 555
sudo tailscale serve --remove --serve-port 8443 tcp 555

# "Settings → General → Funnel の有効化" が必要
sudo tailscale serve funnel on
sudo tailscale serve funnel off


### C ###
echo "{ ... json ... }" | tailscale serve set-raw

※例）
# serve 設定の全消し
echo {} | sudo tailscale serve set-raw
```

## 引用元、参照元、参考先
Tailscale 公式
　・https://tailscale.com/kb/1080/cli/
　・https://tailscale.com/kb/1103/exit-nodes/?tab=linux
　・https://tailscale.com/kb/1187/install-ubuntu-2204/
　・https://tailscale.com/kb/1225/fast-user-switching
　・https://tailscale.com/kb/1242/tailscale-serve/
GiHub issue #
　・https://github.com/tailscale/tailscale/issues/367
　・https://github.com/tailscale/tailscale/issues/7086
reddit Posts
　・/r/Tailscale/comments/z58wzt/more_funnel_questions/