profile picture

GCP で自宅サーバーを公開する

January 19, 2024 - gcp tunnel rathole

概要

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

前提条件

手順

Tunnel の構築

GCP のファイアウォール、Tunnel、DNS を設定します。

ファイアウォールの設定

VPC ファイアウォールのルールを作成します。

  1. GCP にログインします。

  2. サイドメニューから VPC ネットワークファイアウォール 選択します。

  3. ファイアウォール ルールを作成 を選択します。

  4. 項目に次の値を入力し 作成 ボタンを選択します。

    項目名入力値備考
    名前home-server任意の値
    説明home-server のルール任意の値
    ターゲットタグhome-server任意の値
    送信元 IPV4 範囲0.0.0.0/0
    プロトコルとポート > 指定したプロトコルとポート > TCP80TCP チェックボックスにチェックを入れます。今回は自宅サーバーを port 80 で公開します。

Tunnel の設定

Compute Engine で rathole を起動して Tunnel を構築します。

Compute Engine のインスタンスは Google Cloud の無料プログラム を参考に設定します。

  1. サイドメニューから Compute EngineVM インスタンス 選択します。

  2. インスタンスを作成 を選択します。

  3. 項目に次の値を入力し 作成 ボタンを選択します。

    項目名入力値備考
    名前instance-1任意の値
    リージョンオレゴン: us-west1
    マシン構成 > シリーズE2
    マシン構成 > マシンタイプe2-micro
    ブートディスク > OSUbuntu
    ブートディスク > バージョンUbuntu 18.04 LTS
    ブートディスク > ブートディスクの種類標準永続ディスク
    ブートディスク > サイズ (GB)30
    ファイアウォール > HTTP トラフィックを許可する許可チェックボックスにチェックを入れる
    ファイアウォール > HTTPS トラフィックを許可する許可チェックボックスにチェックを入れる
    詳細オプション > ネットワーキング > ネットワーク タグhome-serverファイアウォールのターゲットタグを入力する
  4. 作成したインスタンスの SSH を選択し SSH 接続します。

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

    ufw を有効にします。

    sudo ufw enable
    

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

    sudo ufw allow 2333
    sudo ufw allow 80
    

    ufw をリロードします。

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

  7. 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"
    
  8. 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:
        - /home/st-little/server.toml:/app/server.toml
    
  9. インスタンスで rathole を起動します。

    docker-compose up -d
    

予算の設定

  1. サイドメニューから お支払い を選択します。

  2. お支払いのサイドメニューから 請求先アカウント を選択します。

  3. お支払いのサイドメニューから 予算とアラート を選択します。

  4. 予算を作成 を選択します。

  5. 項目に次の値を入力し 終了 ボタンを選択します。

    項目名入力値備考
    範囲 > 名前home-server任意の値
    金額 > 目標金額1000予算の上限金額

DNS の設定

Cloud DNS を使用してドメインを設定します。

  1. サイドメニューから ネットワーキングCloud DNS を選択します。

  2. ゾーンを作成 を選択します。

  3. 項目に次の値を入力し 作成 ボタンを選択します。

    項目名入力値備考
    ゾーンのタイプ公開
    ゾーン名mc-zone任意の値
    DNS 名DNS 名の接尾辞
    説明home-server DNS任意の値
  4. 作成したゾーンを選択し ゾーンの詳細 を表示します。

  5. レコードセットの追加 を選択します。

  6. 項目に次の値を入力し 作成 ボタンを選択します。

    項目名入力値備考
    DNS 名DNS ゾーンのサブドメイン
    リソース レコードのタイプA
    IPv4 アドレスVM インスタンスの外部 IPTunnel の設定 で作成した Compute Engine のインスタンス

自宅サーバーの公開

  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. 自宅サーバーにアクセスできることを確認します。