ConoHaで接続許可ポートをsshにしつつmoshも通す方法


ConoHaには「接続許可ポート」という機能があって、コントロールパネルからVPSへのポート制限を行うことができます。

この設定を「全て許可」で運用しても問題はありませんが、一般的には使うポートだけを許可するのが良いとされています。サーバー上で意図しないプログラムが動いていた場合などでも、外部からの通信を遮断することができるからです。

moshでポートが通らない

私は普段sshではなくmoshを使っています。moshはsshの代替のようなツールで、接続が切れた場合の自動再接続や、優れたローカルエコーがあるのでとても便利です。

moshの実際の挙動は、まずsshでサーバーに接続を行い、認証が完了した後にサーバー上でmosh-serverと言うコマンドが実行されてクライアントとの接続が確立します。なので、moshは単体では使えません。必ずsshとセットで使うことになります。

sshは22/tcpを使いますが、moshは60000-61000/udpを使います。上記のスクリーンショットのように、コントロールパネルからsshのポートだけを許可しても、udpを使うmoshは使うことができません。とは言っても「全て許可」での運用は避けたいものです。

セキュリティグループを使う

ConoHaにはセキュリティグループと言う機能があって、接続元のIPアドレスやポート番号を使ってパケットフィルタリングを行えます。前述の「接続許可ポート」もこのセキュリティグループを使って実装されています。なので、moshを使うにはセキュリティグループを使って60000-61000/udpを許可してあげればよいのです。

本来セキュリティグループはConoHa APIを使って作業するのですが、結構大変です。conoha-netというCLIツールを使うと簡単に操作することができます。

参考
ConoHaでセキュリティグループを設定する

conoha-netやセキュリティグループの詳細は上の記事を読めばわかります。なのでここではやり方だけ解説します。


# conoha-netのインストール
# これはLinux向けですが、OSXやWindowsのインストール方法もREADME.mdにあります
curl -sL https://github.com/hironobu-s/conoha-net/releases/download/current/conoha-net-linux.amd64.gz | zcat > conoha-net && chmod +x ./conoha-net

# 環境変数の設定
# APIの設定については下記URLを参考にしてください
# https://github.com/hironobu-s/conoha-net#1-%E8%AA%8D%E8%A8%BC
export OS_USERNAME="gncu*****"
export OS_PASSWORD="********"
export OS_AUTH_URL="https://identity.tyo1.conoha.io/v2.0"
export OS_TENANT_ID="*******************************"

# VPS一覧を見てみる
./conoha-net list

NameTag    IPv4               IPv6                                    SecurityGroups
my-vps     150.95.***.**      2400:8500:1302:829:***:***:***:***      gncs-ipv6-all, gncs-ipv4-all, default

# moshを通すためのルールを格納するセキュリティグループ(permit-mosh)を作る
./conoha-net create-group permit-mosh

# 60000-61000/udpを許可するルールをpermit-moshに追加する
./conoha-net create-rule -p 60000-61000 -P udp permit-mosh

# permit-moshをVPS(my-vps)にアタッチする
./conoha-net attach -n my-vps permit-mosh

# 正しく設定されたか確認
# permit-moshが追加されていればOK
./conoha-net list

NameT      IPv4               IPv6                                    SecurityGroups
my-vps     150.95.***.**      2400:8500:1302:829:***:***:***:***      gncs-ipv6-all, permit-mosh, gncs-ipv4-all, default

これでmoshがつながるはずです。

mosh 150.95.***.**