ロリポップのMySQLに外部から接続しようと試みた

ロリポップのMySQLは外部から接続できない

ローカルマシンから、ロリポップレンタルサーバのMySQLに接続したい、となりました。

mysql -h mysql000.phy.lolipop.lan -P 3306 -u LAA9999999 -p LAA9999999-db

しかし接続はできません。

ERROR 2005 (HY000): Unknown MySQL server host 'mysql000.phy.lolipop.lan' (0)

lanというドメインからも分かる通り、 mysql000.phy.lolipop.lan というホスト名は、ロリポップ内部でしか名前解決できません。

dig +short A mysql000.phy.lolipop.lan
# 結果返らず

もちろんIPが分かったとしても、レンタルサーバからしかアクセスを受け付けておらず、外部から接続することはできません。

SSHで接続して、MySQLクライアントを利用

ロリポップは、スタンダードプラン以上なら、SSHを利用することができます。

事前にSSHを有効化して、パスワードを確認した上で接続することができます。

ssh -p 2222 username@ssh.lolipop.jp

SSHでレンタルサーバ内にログインした状態からなら、MySQLクライアントで接続できます。

$ mysql -h mysql000.phy.lolipop.lan -P 3306 -u LAA9999999 -p LAA9999999-db
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4035668
Server version: 5.6.23-log MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

もちろんサーバ内からなら、データベースホストの名前解決もできました。

$ dig +short A mysql000.phy.lolipop.lan
172.19.xxx.xxx

SSHポートフォワードして接続

となると、「SSHトンネリングしで、接続すればよいのでは?」となりますよね。

やってみます。

ssh -L 3307:mysql000.phy.lolipop.lan:3306 -p 2222 username@ssh.lolipop.jp

SSHのポートフォワードの設定については、以前に書きましたので、こちらも参考にしてください。

これで、ローカルマシンの3307ポートが、レンタルサーバのSSHを通して、データベースサーバの3306ポートに、ポートフォワードされる。はずでした・・・。

mysql -h localhost -P 3307 -u LAA9999999 -p LAA9999999-db

結果は失敗。

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

SSH側では、このようなエラーが出ていました。

channel 3: open failed: administratively prohibited: open failed

接続の途中で、コネクションが遮断されているようです。

問い合わせしてみた結果

おそらくSSHサーバの AllowTcpForwarding が no になっているのでは、と考えています。

ロリポップに問い合わせをしてみた結果、すぐに「ポートフォワードやトンネリングはできない」との回答をいただけました。

敗北です。何か方法があればぜひ教えてください。

Railsから接続したかった

なぜそんなに必死に調べていたかというと、Ruby on Railsから接続したかったからです。他のレンタルサーバも同様だと思いますが、ロリポップではRailsアプリケーションは動かせません。そのため、「Railsは別の環境で立てて、MySQLだけ使えないだろうか」と考えました。

ちなみに、もしSSH経由で接続できるならば、net-ssh-gatewayというgemが使えそうでした。

initializersの中などで、SSHトンネルを確立して、そのローカルポートである3307に対して、ActiveRecordの接続設定を書けばよい、ということです。

gateway = Net::SSH::Gateway.new(
    'ssh.lolipop.jp',
    'username',
    password: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    port: 2222
)
gateway.open('mysql000.phy.lolipop.lan', 3306, 3307)
development:
  adapter: mysql2
  encoding: utf8
  charset: utf8
  collation: utf8_general_ci
  host: '127.0.0.1'
  port: 3307
  database: 'LAA9999999-db'
  username: 'LAA9999999'
  password: 'XXXXXXXXXXXXXXXX'

そういうわけで、MySQLは、Amazon RDSなどで立てるか、ClearDBなどを使うか、考え中です。

タイトルとURLをコピーしました