🐺

リモート開発環境の構築: TailscaleとCode-serverのセットアップ

2024/08/20に公開

目次

目的

開発対象のインスタンスに毎回sshしたりコードを転送したりするのは煩雑です。TailscaleとCode-serverを使用することで、オンザフライでコードの編集やシェル操作、ブラウザ確認が可能となり、開発効率を大幅に向上させることができます。今回は家庭のネットワークやAWSのVPC内部に存在していて、NATの背後にインスタンスを設置せざる得ないケースにおいても遠隔からのアクセス方法を提供する方法をご紹介します。同じようなZTNA的なアクセスについては他にもありますが、今回はTailscaleを取り上げます。

環境

  • Ubuntu 22.04 LTS
  • Tailscale
  • Code-server

設定手順

構成図

一般的には、リモートアクセスを許容するとセキュリティレベルが下がってしまうため隔離された環境に設置することが推奨となります。

私の環境では矢印の方向にしかセッションのイニシエーションできないポリシを設定しております。ご自宅で環境を用意する場合には参考にしてください。

        Internet                                     
          ▲  ▲                         
          │  │                         
        ┌─┼──┼──┐                      
        │ │FW│  │                      
┌───────│ │  │  │─────────────────────┐
│DMZ    └─┼──┼──┘                     │
│         │  │        ┌──────────┐    │
│         │  │        │ Code-SV  │    │
│         │  └────    │ Tailscale│    │
│         │           └──────────┘    │
│       ┌─┼─────┐                     │
└───────│ │     │─────────────────────┘
        │ │FW   │                      
┌───────│ │     │─────────────────────┐
│Local  └─┼─────┘                     │
│     ┌──────────┐    ┌──────────┐    │
│     │  Private │    │  Mac     │    │
│     │  PC      │    │          │    │
│     └──────────┘    └──────────┘    │
└─────────────────────────────────────┘

Tailscaleのインストール

まずはTailscaleをインストールします。

$ curl -fsSL https://tailscale.com/install.sh | sh
$ sudo tailscale up
$ ip address show tailscale0

Code-serverのインストール

次に、Code-serverをインストールします。

$ curl -fsSL https://code-server.dev/install.sh | sh
$ sudo systemctl enable --now code-server@$USER

Code-serverの設定変更

Code-serverの設定を変更して、パスワード認証を設定します。

bind-addrはtailscale的にローカルのソケットから接続してきてるかもしれないので、127.0.0.1でも動作すると思われます。

$ vi .config/code-server/config.yaml
$ cat .config/code-server/config.yaml
bind-addr: 0.0.0.0:8080
auth: password
password: *****
cert: false
$ sudo systemctl restart code-server@$USER
$ sudo systemctl status code-server@$USER

Tailscale Funnelの設定

最後に、Tailscale Funnelを設定して、Code-serverへのアクセスをインターネット経由で可能にします。

$ sudo tailscale funnel 8080
[sudo] password for ubuntu:

Funnel is not enabled on your tailnet.
To enable, visit:

         https://login.tailscale.com/f/funnel?node=xxxxxxxxxxxxxx

Success.
Available on the internet:

https://ubuntu.tail73xx.ts.net/
|-- proxy http://127.0.0.1:8080

Press Ctrl+C to exit.

TailscaleのコンソールからFunnelを有効にする操作を行うことで、設定が完了します。Code-serverのパスワードは忘れないように設定しましょう。自動起動なども可能かと思いますが、セキュリティ的な面も考慮して常時起動とはしておりません。

code serverの例

自動起動(非推奨)

Tailscale FunnelはZTNAとしては認証機構が現時点では弱いため、常時パブリックに公開するのは懸念があります。参考にはなりますが、自動で起動するように構成する手順を記載しておきます。

#設定をリセット
$ sudo tailscale funnel reset
#--bgオプション付きでFunnelを起動
$ sudo tailscale funnel --bg 8080
Available on the internet:

https://ubuntu-api.tail7xxx.ts.net/
|-- proxy http://127.0.0.1:8080

Funnel started and running in the background.
To disable the proxy, run: tailscale funnel --https=443 off

#状態の確認
$ sudo tailscale funnel status

# Funnel on:
#     - https://ubuntu-api.tail7xxx.ts.net

https://ubuntu-api.tail7xxx.ts.net (Funnel on)
|-- / proxy http://127.0.0.1:8080

以上のように非常に簡単にサービス化ができます。

停止したい場合には、サービスをoffにするコマンドを投入し、サービス登録はない旨の表示を確認します。

$ sudo tailscale funnel --https=443 off
$ sudo tailscale funnel status
No Servie Config

まとめ

TailscaleとCode-serverを利用することで、リモート開発環境を簡単に構築することができます。これにより、開発効率が向上し、よりスムーズな作業が可能となります。

注:iPadのブラウザからもコーディングできるため大変便利ですが、本番では使えないセキュリティレベルのためあくまでLabや試験用の使用を想定した構成になります。

注:Funnelは執筆時点ではBataになりますので、突然使えなく可能性もありますのでご了承ください。

参考

Tailscale FunnelはHTTPSのリバースプロキシのように動作します。詳しくはリンク先をご覧ください。

Discussion