🛢️

MySQL(Sakuraサーバ)へのSSHポートフォワーディング

に公開

概要

この手順書は、Ubuntu上でSakura Internetのレンタルサーバーを中継点として、Sakura DB(MySQL)へのポートフォワーディングを設定する方法を説明します。

  • 目的: ローカルマシン(例: 192.168.1.100)からSakura DBにセキュアにアクセスするためのSSHトンネルを作成。
  • ツール: autossh(SSHの自動再接続ラッパー)を使用。
  • 前提: Ubuntu 20.04以降。SakuraアカウントでレンタルサーバーとDBが同一アカウント下にあること。
  • 注意: 機密情報(ホスト名、IP、ユーザー名)は例値に置き換えています。実際の値に適宜変更してください。パスワードはSSHキー認証を推奨(パスワード認証は避ける)。DB2のフォワードは省略し、DB1のみを設定。
    • Sakuraホスト名の確認と置き換え: 手順書内の例値(例: ****.sakura.ne.jpmysql***.db.sakura.ne.jp)は、Sakuraの管理画面で実際のホスト名を確認して置き換えてください。
      • レンタルサーバー(Sakuraサーバー)のホスト名確認:
        1. Sakura会員メニューにログイン。
        2. 左側の「契約情報」から「契約中のサービス一覧」をクリック。
        3. レンタルサーバーの行をクリックし、「サーバー情報」または「基本情報」を確認。ホスト名(例: ``****..sakura.ne.jp`)が表示されます。
          代替: サーバーコントロールパネル(https://secure.sakura.ad.jp/rs/panel/)にログイン > 「サーバー情報」 > 「サーバー情報」をクリック。
      • Sakura DBのホスト名確認:
        1. サーバーコントロールパネルにログイン。
        2. 「データベース」 > 「データベースの作成・追加・削除」をクリック。
        3. 作成済みデータベースを選択し、「データベースサーバー名」または「ホスト名」(例: mysql***.db.sakura.ne.jp)を確認。MySQLバージョン(例: mysql80)に応じて形式が変わります。
          これらのホスト名を正しく置き換えないと接続失敗の原因となります。確認後、手順書の全箇所を更新してください。

設定の全体像

  • 中継点: Sakuraレンタルサーバー(例: ****.sakura.ne.jp)。
  • DBサーバー:
    • DB1: mysql***.db.sakura.ne.jp:3306 → ローカル 192.168.1.100:3306
  • フロー: Ubuntu → SSHトンネル(autossh) → レンタルサーバー → Sakura DB。

1. 準備

1.1 パッケージインストール

sudo apt update
sudo apt install autossh openssh-client

1.2 SSHキー認証の設定

  • Ubuntu側でSSHキーペア生成(初回のみ):
    ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
    
  • 公開鍵をSakuraレンタルサーバーに登録(ssh-copy-idを使用):
    ssh-copy-id example-user@****.sakura.ne.jp
    
    • 初回はパスワードを入力して認証。成功後、パスワードレス接続が可能になります。
    • テスト: ssh example-user@****.sakura.ne.jp(パスワード不要でログイン確認)。

1.3 Sakura側設定確認

  • レンタルサーバー: SSHアクセス有効(ポート22)。
  • DB: コントロールパネル > データベース > アクセス制限 で、レンタルサーバーのIPを許可(同一アカウントならデフォルトOK)。

1.4 Ubuntuファイアウォールの設定(ufw使用)

Ubuntuのデフォルトファイアウォール(ufw)を有効化し、必要なポート(3306)を解放します。これにより、トンネル経由のローカルアクセスを許可。
注意: ufwが未インストールの場合、まずインストール。既存のルールがある場合、バックアップを取ってください(sudo cp /etc/ufw/ufw.conf /etc/ufw/ufw.conf.bak)。

  1. ufwのインストールとステータス確認:

    sudo apt install ufw
    sudo ufw status verbose
    
    • 出力例: Status: inactive(未有効)または既存ルール一覧。
  2. デフォルトポリシーの設定:

    • 入力(IN)を拒否、デフォルトでアウトバウンド(OUT)を許可(SSHトンネルはアウトバウンド中心):
      sudo ufw default deny incoming
      sudo ufw default allow outgoing
      
  3. 必要なポートの解放:

    • SSHポート(22)を許可(リモート接続用、任意):
      sudo ufw allow 22/tcp
      
    • トンネルポート(3306)を許可(ローカルアクセス用):
      sudo ufw allow from 192.168.1.0/24 to any port 3306 proto tcp  # LAN内からのみ許可(192.168.1.0/24を実際のサブネットに変更)
      
      • または全開放(セキュリティ上非推奨): sudo ufw allow 3306/tcp
    • 特定IPからのみ(例: ローカルホスト): sudo ufw allow from 127.0.0.1 to any port 3306
  4. ufwの有効化:

    sudo ufw enable
    
    • 確認プロンプトで「y」を入力。
    • 再確認: sudo ufw status numbered(ルール一覧表示)。
  5. テストとロールバック:

    • トンネル起動後、ポート確認: sudo ss -tuln | grep 3306
    • 問題時: sudo ufw disable で一時無効化。ルール削除: sudo ufw delete 1(番号指定)。

2. 手動テスト(一時的なトンネル)

ターミナルで以下のコマンドを実行(バックグラウンドで起動):

autossh -NT -o ExitOnForwardFailure=yes -o ServerAliveInterval=10 -o ServerAliveCountMax=3 \
  -L 192.168.1.100:3306:mysql***.db.sakura.ne.jp:3306 \
  example-user@****.sakura.ne.jp
  • -f を追加するとバックグラウンド起動(例: autossh -f -M 0 ...)。
  • 確認: sudo ss -tuln | grep 3306(LISTEN状態が出力される)。

接続テスト

  • DB1: mysql -h 192.168.1.100 -P 3306 -u your_db_user -p
    your_db_user はSakura DBのユーザー名に置き換え)。

3. 永続化(自動起動)

3.1 systemdサービス(推奨)

  1. サービスファイル作成:

    sudo nano /etc/systemd/system/ssh-tunnel.service
    

    内容:

    [Unit]
    Description=SSH Tunnel to Sakura DB
    After=network.target
    
    [Service]
    User=example-user  # 実際のユーザー名に変更
    ExecStart=/usr/bin/autossh -NT -o ExitOnForwardFailure=yes -o ServerAliveInterval=10 -o ServerAliveCountMax=3 \
      -L 192.168.1.100:3306:mysql***.db.sakura.ne.jp:3306 \
      example-user@****.sakura.ne.jp
    Restart=always
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    
  2. サービス有効化:

    sudo systemctl daemon-reload
    sudo systemctl enable --now ssh-tunnel.service
    
  3. 確認:

    sudo systemctl status ssh-tunnel.service
    ps aux | grep autossh
    

3.2 代替: cronジョブ

  1. スクリプト作成: nano ~/start-tunnel.sh

    #!/bin/bash
    autossh -NT -o ExitOnForwardFailure=yes -o ServerAliveInterval=10 -o ServerAliveCountMax=3 \
      -L 192.168.1.100:3306:mysql***.db.sakura.ne.jp:3306 \
      example-user@****.sakura.ne.jp
    

    実行権限: chmod +x ~/start-tunnel.sh

  2. crontab編集: crontab -e

    @reboot /home/example-user/start-tunnel.sh
    

3.3 簡易: ~/.ssh/config

nano ~/.ssh/config

内容:

Host sakura-tunnel
  HostName ****.sakura.ne.jp
  User example-user
  LocalForward 192.168.1.100:3306 mysql***.db.sakura.ne.jp:3306

起動: autossh -M 0 -f -N sakura-tunnel

4. 確認とメンテナンス

  • プロセス確認: ps aux | grep ssh(autossh/sshプロセスが出力)。
  • ポート確認: sudo ss -tuln | grep 3306
  • ログ確認: journalctl -u ssh-tunnel -f(systemdの場合)。
  • 停止: sudo systemctl stop ssh-tunnel.service または sudo kill <PID>

5. トラブルシューティング

問題 原因/解決策
接続失敗 SSHキー確認: ssh example-user@****.sakura.ne.jp。SakuraコントロールパネルでDB IP制限チェック。
トンネル不安定 ServerAliveInterval を20秒に増やす。レンタルサーバーのリソース混雑時はSakuraサポート相談。
ポート競合 sudo lsof -i :3306 でプロセス殺す。
ログなし `/var/log/syslog
DB接続エラー Sakura DBのユーザー/パスワード確認。ファイアウォール: sudo ufw status で3306開放確認。ufwリセット: sudo ufw reset(注意: 全ルール削除)。
ファイアウォールブロック sudo ufw allow 3306/tcp 再実行後、sudo ufw reload

注意事項

  • セキュリティ: パスワード認証は避け、キー認証使用。トンネルは最小限のポートのみ。ufwで入力制限を厳しく。
  • Sakura規約: レンタルサーバーの高負荷使用は避ける。詳細はSakuraマニュアル参照。

Discussion