TailscaleのExit NodeをOracle Cloudの無料インスタンスで構築する手順

# はじめに
最近、TailscaleというVPNを使っています。きっかけは、以前QiitaにWireGuardの導入方法を投稿した際、「Tailscaleの方が便利だよ」というコメントをいただいたことでした。それ以来、Tailscaleをメインで使うようになりました。


WireGuard派の方もいらっしゃるかと思いますが、Tailscaleは鍵の管理が不要で導入が簡単なうえ、モダンなWeb UIが用意されていて管理もしやすいため、個人的にはTailscaleを使うようになりました。

https://tailscale.com/

Tailscaleには多くの機能がありますが、中でも「Exit Node」機能が便利です。これは、Tailscaleをインストールした端末をインターネットのゲートウェイとして利用できる機能で、私もこれを使ってトラフィックを自宅へ逃してインターネットにアクセスしたりしています。

Exit-Nodeについて詳しく知りたい方はこちら↓（学内や社内での利用には注意が必要です）

 https://tailscale.com/kb/1103/exit-nodes



# 解決したいこと
現在、自宅に設置したUbuntuサーバ（Tailscale入り）をExit Nodeとして使い、インターネットへアクセスしています。

しかし最近、電気代の高騰を受けて「節電しよう」という話が家庭内で持ち上がりました。サーバの稼働による電力消費を見直したいと考えていたところ、以下の記事を見つけました。

 https://qiita.com/shota0616/items/d0dfa1f70af073aa9554

# 手順
### Oracleクラウドでのインスタンス作成
上記の記事を参考に、Oracle Cloudで無料インスタンス（Ubuntu 22.04）を作成します。

基本的には記事通りに作業を進めれば問題ありませんが、「可用性ドメインAD-1のシェイプVM.Standard.A1.Flexの容量が不足しています」というエラーでインスタンスが作成できないことがあります。私も同様のエラーに遭遇しましたが、アカウントをアップグレードすることで回避できました（※アップグレード時にはご注意を）。

また、なぜかインスタンス作成段階でブート・ボリュームの料金が発生しています。ただ、契約額の合計は¥0と表示されているため、実際には無料のようです。もし理由をご存知の方がいれば、コメントいただけると助かります。

↓スクリーンショット（料金表示）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/7cdb0128-ab0e-40dd-a211-47f23a67dd5f.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/59be8ce1-9308-4237-b90c-3397c08e686c.png)


### Tailscaleでのアカウント作成
以下のサイトからアカウントを作成してください。

 https://tailscale.com/


### インスタンスへのTailscaleの導入
インスタンスへSSHで接続し、Tailscaleをインストールします。SSH接続の方法は以下を参考にしてください。Tailscaleのインストールする手段は色々あります。

#### インストール方法①：Web UIからスクリプト生成
1. Tailscaleの管理画面で「Add device」をクリック

2. 「Generate install script」を選択

3. 表示されたスクリプトをインスタンスにコピー＆実行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/e63f5096-e6c5-41ef-95ee-cb8c6770e150.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/9b1ab20a-bfa2-4c40-bbbc-e30736428fff.png)


#### インストール方法②：curlコマンドで手動インストール
詳しくはこちらを参照ください。

https://utakamo.com/article/network/vpn/tailscale/index.html

### インスタンスをExit-Nodeとして起動
次は、インスタンスでTailscaleを起動させるとともにExit-Nodeとする方法を説明します。

 https://tailscale.com/kb/1408/quick-guide-exit-nodes

1.　まず、Ubuntuでトラフィックを転送できるようにしていきます。


```
# 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
```
2.　次にNATの設定をしていきます。（※[インターフェイス]は適宜置き換えてください）
```
# sudo iptables -t nat -A POSTROUTING -o [インターフェイス] -j MASQUERADE
```
3.　最後に、Tailscaleを起動させます。
```
# sudo tailscale up --advertise-exit-node
```
# 確認
無事にOracleクラウドのインスタンス経由で、インターネットへアクセスすることができているかを確認します。今回は、Mac BookでTailscaleを起動させ、Exit-Nodeにインスタンスを指定してグローバルIPv4を確認していきます。

※MacではGUIで操作することができますが、場合によってはCLIでの設定が必要となります。各種設定については以下をご参考ください。

https://tailscale.com/kb/1080/cli?tab=linux

まず、App StoreからTailscaleをインストールし、起動させます。その次は、Tailscaleのアカウントと連携させVPN接続が可能なようにします。そして、Tailscale Appを起動させると、上バーにTailscaleのマークが表示されるので、そこからVPN接続を開始します（Connectedと表示されます）。次に、「Exit Nodes」から作成したインスタンスを指定します。無事に、設定が終了すると上バーのアイコンが以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/f4272d53-0f86-4d0c-be5c-1c4d46b30cb7.png)


この状態で、以下のサイトでグローバルIPv4を確認します。

 https://www.cman.jp/network/support/go_access.cgi

確認すると、Oracleの「インスタンスの詳細」で表示されているグローバルIPv4アドレスと同一のアドレスであることが確認できます！
（ 黒塗り部分に表示されるIPアドレスが同じはずです！! ）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/3fa4b6ff-62c9-4454-923c-8d523927f759.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/26d76b32-82e7-4211-8437-9275c733f41c.png)


# 最後に
今回は、Oracle Cloudの無料インスタンスをTailscaleのExit Nodeとして使う方法を紹介しました。無料であるかどうかはやや不安が残りますが、無料で作成したインスタンスを介して、インターネットへアクセスできるようになります。

この記事が少しでもお役に立てれば嬉しいです。ありがとうございました！