profile picture

Amazon Lightsail で自宅サーバーを公開する

February 08, 2024 - aws lightsail tunnel rathole

概要

Amazon Lightsailrathole を使用して Tunnel を構築し自宅のサーバーを公開します。
Tunnel を構築して自宅のサーバーを公開するその他の方法は こちら を参照してください。

前提条件

手順

トンネルの構築

  1. Amazon Lightsail を開き インスタンスの作成 ボタンを選択します。

  2. インスタンスのイメージ、サイズなどを選択し インスタンスの作成 ボタンを選択します。

    • インスタンスイメージの選択
      • プラットフォームの選択: Linux/Unix を選択します。
      • 設計図の選択: オペレーティングシステム (OS) のみ から Ubuntu22.04 LTS を選択します。

    • サイズを選択: $3.51 か月あたりの USD を選択します。

    • インスタンスを確認: 任意のインスタンス名を入力します。
  3. インスタンスが 保留中 から 実行中 になるまで待ちます。

  4. インスタンスが 実行中 になったらインスタンス名を選択し管理画面に進みます。

  5. 管理画面の ネットワーキング タブ > IPv4 ファイアウォール > ルールを追加 を選択し開放するポートを追加します。

    • TCP/2333: rathole のポート番号です。
    • TCP/80: 自宅サーバーのポート番号です。
  6. インスタンスのコンソールアイコンを選択しインスタンスに接続します。以降の手順はインスタンス内で行います。

  7. インスタンスのポートを開放します。

    ufw を有効にします。

    sudo ufw enable
    

    開放するポートを追加します。2333 は rathole 、 80 は自宅サーバーのポート番号です。

    sudo ufw allow ssh
    sudo ufw allow 2333
    sudo ufw allow 80
    

    ufw をリロードします。

    sudo ufw reload
    
  8. インスタンスに docker と docker-compose をインストールします。

  9. rathole の設定ファイル server.toml を作成します。詳細は readme を参照してください。

     # server.toml
     [server]
     bind_addr = "0.0.0.0:2333"
    
     [server.services.home-server]
     token = "home-server-token"
     type = "tcp"
     bind_addr = "0.0.0.0:80"
    
  10. rathole の docker-compose.yaml を作成します。2333 は rathole 、 80 は自宅サーバーのポート番号です。

    version: "3.7"
    
    services:
      # https://github.com/rapiz1/rathole
      tunnel:
        image: rapiz1/rathole
        restart: unless-stopped
        command: ["--server", "/app/server.toml"]
        tty: true
        ports:
          # rathole
          - 2333:2333
          # home server
          - 80:80
        volumes:
          - ./server.toml:/app/server.toml
    
  11. インスタンスで rathole を起動します。

    sudo docker-compose up -d
    

自宅サーバーの公開

  1. rathole の設定ファイル client.toml を作成します。詳細は readme を参照してください。

    # client.toml
    [client]
    remote_addr = "myserver:2333"
    
    [client.services.home-server]
    token = "home-server-token"
    type = "tcp"
    local_addr = "home-sever:80"
    
  2. 自宅サーバーと Tunnel の docker-compose.yaml を作成します。今回の自宅サーバーは nginx を使用します。

    version: "3.7"
    
    services:
      # https://hub.docker.com/_/nginx
      home-sever:
        restart: unless-stopped
        image: nginx:latest
        ports:
          - "80:80"
      # https://github.com/rapiz1/rathole
      tunnel:
        restart: unless-stopped
        image: rapiz1/rathole:latest
        command: ["--client", "/app/client.toml"]
        volumes:
          - ./client.toml:/app/client.toml
    
  3. 自宅サーバーと Tunnel を起動します。

    docker-compose up -d
    

    停止する場合は次のコマンドを実行します。

    docker-compose down
    

    削除する場合は次のコマンドを実行します。

    docker-compose rm
    
  4. 自宅サーバーにアクセスできることを確認します。