Velocityで「Connection refused」が出た原因と直し方|Paperのポートを確認

1. はじめに

Velocityプロキシへはログインできるのに、接続後のlobbyサーバーへの移動だけ失敗するトラブルがありました。

先に結論を書くと、今回のConnection refusedは、Velocityが指定されたアドレスとポートへ接続しようとしたものの、その場所でPaperサーバーが待ち受けていなかった可能性が高いことを示しています。

初心者向けに言い換えると、Velocityがlocalhost:30066という入口をノックしましたが、その入口で接続を受け付けるPaperが見つからなかった状態です。

ただし、ログだけで原因を一つに断定はできません。主な原因として、次のようなものが考えられます。

  • Paperサーバーが起動していない
  • Paperが起動途中、またはエラーで異常終了している
  • Velocity側で指定したポートが間違っている
  • Paper側が別のポートで待ち受けている
  • Paperが別PCにあるのにlocalhostを指定している
  • ファイアウォールなどが接続を拒否している

この記事では、実際に表示されたログを起点に、確認する順番を整理します。

2. 発生したエラー

Velocityのコンソールには、次のエラーが表示されました。

[connected player] tapiann: unable to connect to server lobby
io.netty.channel.AbstractChannel$AnnotatedConnectException:
finishConnect(..) failed with error(-61):
Connection refused: localhost/127.0.0.1:30066

このとき、プレイヤーはVelocityプロキシ自体には接続できていました。しかし、その後にlobbyへ移動する段階で失敗しました。

ログから読み取れるのは、次の3点です。

  • プレイヤーtapiannからVelocityまでの接続はできている
  • Velocityからlobbyへの接続で失敗している
  • Velocityはlocalhost、つまり127.0.0.1のポート30066へ接続しようとしている

使用していたVelocityは3.5.0-SNAPSHOT系で、バックエンドにはPaperを使用しています。OSとPaperのバージョンは、この記事の時点では未確認です。

3. Connection refusedの意味

Connection refusedは、日本語では「接続を拒否された」という意味です。

今回、Velocityが接続しようとした場所は次のとおりです。

127.0.0.1:30066

このエラーは一般に、接続先のPCまでは到達したものの、そのIPアドレスとポートで接続を受け付けるプロセスが待ち受けていないときに発生します。

よくあるのは、Paperが停止しているケースです。ただし、「ポートが閉じている」という言葉には、いくつかの状態が含まれます。

Paperが停止中
  → ポートを使うプロセスがいない

Paperのポートが違う
  → Paperは動いているが、30066では待ち受けていない

ファイアウォールがREJECTする
  → 通信制御によって明示的に拒否される

ファイアウォールが通信を黙って破棄する設定では、Connection refusedではなくタイムアウトになることもあります。そのため、Connection refusedだけを見て、必ずファイアウォールが原因、または絶対にファイアウォールではない、と断定することはできません。

まずはPaperの起動状態とポート設定から確認するのが近道です。

4. 今回の通信構成

今回のログから読み取れる通信の流れは、次のとおりです。

プレイヤー
   ↓
Velocity
   ↓ localhost:30066
Paper(lobby)

プレイヤーは、最初にVelocityへ接続します。その後、VelocityがバックエンドのPaperへ接続します。

そのため、「Velocityへログインできた」という事実だけでは、Paperへの接続も正常だとは判断できません。今回問題が起きたのは、VelocityからPaperへ向かう2段目の通信です。

VelocityとPaperを同じPCで動かしているなら、localhostまたは127.0.0.1を使用できます。

同じPC
├─ Velocity
└─ Paper(127.0.0.1:30066)

別々のPCで動かしているなら、Paper用PCのIPアドレスが必要です。

Velocity用PC
   ↓ 192.168.1.100:30066
Paper用PC

localhostは、常にそのプログラムが動作しているPC自身を指します。Velocity側でlocalhostを指定した場合、Paper用PCではなくVelocity用PC自身を探します。

5. 最初に確認すること

原因を見つけやすくするため、私は次の順番で確認します。

  1. Paperサーバーが起動しているか
  2. Paperのコンソールにエラーがないか
  3. Paperのserver-portを確認する
  4. Velocityの接続先ポートを確認する
  5. VelocityとPaperが同じPCか別PCか確認する
  6. ポートがLISTEN状態か確認する
  7. ファイアウォールを確認する
  8. 修正後にPaperとVelocityを再起動する
  9. 再接続して両方のログを確認する

最初に見るべきなのはPaperのコンソールです。

Paperの画面やJavaプロセスが残っていても、正常に起動できているとは限りません。まだ起動途中だったり、設定やプラグインなどのエラーで処理が止まっていたりする可能性があります。

起動ログを最後まで確認し、Paperがプレイヤーの接続を受け付けられる状態になっているかを確認します。エラーがある場合は、最後の1行だけでなく、最初に出たエラーまでさかのぼると原因を見つけやすくなります。

6. Velocity側の設定

Velocityからバックエンドへ接続するアドレスは、velocity.toml[servers]周辺で確認します。

PaperがVelocityと同じPCにあり、ポート30066を使用する場合の例は次のとおりです。

[servers]
lobby = "127.0.0.1:30066"

今回のログでは、Velocityがlocalhost/127.0.0.1:30066へ接続しようとしていました。そのため、lobbyの設定自体は同じPCを指しています。

設定を見るときは、次の点を確認します。

  • サーバー名がエラーに出たlobbyと一致しているか
  • IPアドレスまたはホスト名が正しいか
  • ポート番号がPaper側と一致しているか
  • TOMLの書式が壊れていないか
  • 実際に起動しているVelocityのvelocity.tomlを編集しているか

サーバーフォルダのコピーが複数ある場合は、別の設定ファイルを編集していないかにも注意します。

Velocityを使った複数サーバー構成全体については、Minecraft Java版プロキシサーバーの立て方でもまとめています。

7. Paper側の設定

Paperの待受ポートは、server.propertiesで確認します。

今回の接続先に合わせるなら、関連する設定は次のようになります。

server-port=30066
server-ip=

server-portには、Paperが待ち受けるポート番号を指定します。

Velocity側が次の設定なら、

lobby = "127.0.0.1:30066"

Paper側も30066で待ち受ける必要があります。

server-port=30066

たとえばPaperが25565で動いているのに、Velocityが30066へ接続していれば、両者の設定が一致していません。

server-ipは、特別な理由がない限り空欄にする構成が多いです。

server-ip=

特定のIPアドレスを指定すると、そのアドレスだけで待ち受ける動作になる場合があります。存在しないIPや目的と違うIPを設定すると、Paperが期待した場所で待ち受けられません。

ただし、適切なserver-ipは実行環境によって異なります。複数のネットワークインターフェース、コンテナ、仮想環境などを使っている場合は、その構成に合わせて判断してください。

設定を変更しただけでは、すでに動いているPaperへ反映されないことがあります。保存後にPaperを再起動して確認します。

8. ポートの待受状態を確認する

設定ファイルが正しく見えても、Paperが実際にポートを使えているとは限りません。OS上で30066番ポートが待受状態になっているか確認します。

Windows:netstatで確認する

コマンドプロンプトまたはPowerShellで、次を実行します。

netstat -ano | findstr :30066

正常に待ち受けている場合は、該当行にLISTENINGが表示されます。

TCP    0.0.0.0:30066    0.0.0.0:0    LISTENING    1234

末尾の1234にあたる数字はPIDです。Paperを動かしているJavaプロセスのPIDかどうかを確認できます。

PowerShell:Get-NetTCPConnectionで確認する

Get-NetTCPConnection -LocalPort 30066

結果のStateListenなら、そのポートで何らかのプロセスが待ち受けています。結果が見つからない場合は、確認時点で30066を待ち受けるTCP接続がない可能性があります。

Linux:ssで確認する

ss -ltnp | grep 30066

出力にLISTENがあり、ローカルアドレス側に:30066が表示されていれば待受状態です。権限によってはプロセス名やPIDが表示されない場合があります。

macOS:lsofで確認する

lsof -nP -iTCP:30066 -sTCP:LISTEN

Javaプロセスなどが表示されれば、ポート30066で待ち受けています。

コマンド結果の見方

どのOSでも、まず見るのはLISTENまたはLISTENINGです。

LISTEN / LISTENINGがある
  → 30066で何らかのプロセスが待ち受けている

何も表示されない
  → 30066で待ち受けるプロセスが見つからない

何も表示されない場合は、Paperの停止、起動途中、異常終了、ポート番号の違いを確認します。

一方、LISTENと表示されても、それが必ずPaperとは限りません。可能であればPIDやプロセス名も確認し、別のプログラムが30066を使っていないか調べます。

また、別PC構成では、コマンドをPaperが動いているPCで実行してください。Velocity用PCで確認しても、Paper用PCの待受状態は分かりません。

9. 同じPCと別PCで設定が異なる

VelocityとPaperが同じPCの場合

同じPCで動かしている場合は、ループバックアドレスを指定できます。

[servers]
lobby = "127.0.0.1:30066"

Paper側では、同じPCのポート30066で待ち受けます。

server-port=30066
server-ip=

この構成なら、外部ネットワークを経由せずにVelocityからPaperへ接続できます。

VelocityとPaperが別PCの場合

Paperが別のPCにある場合は、Paper用PCのLAN内IPアドレスなどを指定します。

[servers]
lobby = "192.168.1.100:30066"

192.168.1.100は設定例です。実際には、Paperを動かしているPCへ割り当てられたIPアドレスに置き換えます。

別PC構成で次のように設定すると、VelocityはPaper用PCへ接続しません。

lobby = "localhost:30066"

localhostはVelocityが動作しているPC自身を指すからです。Velocity用PCの30066で何も待ち受けていなければ、今回のようなConnection refusedになる可能性があります。

別PCの場合は、さらに次の点も確認します。

  • Paper用PCのIPアドレスが正しいか
  • Paperがネットワーク側から到達できるアドレスで待ち受けているか
  • 2台のPCが互いに通信できるネットワークにあるか
  • Paper用PCのファイアウォールがVelocity用PCからの接続を許可しているか
  • ルーターやネットワーク機器が通信を遮断していないか

10. それでも直らない場合

設定と待受状態を確認しても解決しない場合は、次の項目を調べます。

Paperがまだ起動途中ではないか

VelocityとPaperをほぼ同時に起動すると、Velocityが接続を試みた時点ではPaperの準備が終わっていないことがあります。

Paperのコンソールで起動完了を確認してから、Velocity経由で再接続します。起動直後だけ失敗し、しばらくしてから成功する場合は、起動順や起動時間が関係している可能性があります。

Paperが異常終了していないか

Paperのウィンドウが一瞬で閉じたり、ログが途中で止まったりしている場合は、異常終了している可能性があります。

次のようなエラーがないか、Paperのコンソールやログを確認します。

  • 設定ファイルの読み込みエラー
  • ポートの競合
  • Javaの実行環境に関するエラー
  • プラグイン読み込み時のエラー
  • メモリやファイルアクセスに関するエラー

具体的な原因は環境によって異なります。この記事では、未確認のOS、Paperバージョン、プラグイン構成を推測して原因を決めつけません。

別のプロセスが30066を使っていないか

Paperのログにポートを利用できない旨のエラーがある場合は、別のJavaプロセスなどが30066を使用している可能性があります。

待受確認コマンドに表示されるPIDを使い、実際にどのプロセスがポートを使用しているか確認します。

ファイアウォールを確認する

VelocityとPaperが別PCの場合は、特にPaper用PCのファイアウォールを確認します。

許可ルールを作る場合は、必要なポートだけでなく、可能なら送信元もVelocity用PCに限定します。原因調査のためにファイアウォールを確認するときも、全体を無効にしたまま運用しないようにします。

同じPC内の127.0.0.1通信では、ファイアウォールが原因になるケースは比較的限られます。ただし、セキュリティソフトや独自の通信制御が影響する可能性は残ります。

修正後に再起動してログを確認する

設定を変更したら、PaperとVelocityを再起動します。

1. Paperを起動する
2. Paperの起動完了を確認する
3. 30066がLISTEN状態か確認する
4. Velocityを起動する
5. プレイヤーが再接続する
6. VelocityとPaperの両方のログを見る

エラー内容が変わった場合は、新しいログを手掛かりに次の原因を調べます。

11. セキュリティ上の注意

Velocityを入口にする構成では、バックエンドのPaperへ外部から直接接続できないようにすることが重要です。

同じPCで動かしている場合は、ローカル接続だけを使う構成を検討できます。別PCの場合は、ファイアウォールでPaperのポートへの接続元をVelocity用PCに限定する方法があります。

Paperの30066を、必要なくインターネット全体へ公開するのは避けてください。公開するポートと、VelocityからPaperへ接続するためだけのポートは分けて考えます。

また、Velocityのプレイヤー情報転送設定やシークレットも重要です。ただし、設定ファイルの場所や推奨設定は、使用しているVelocityとPaperのバージョンによって異なる場合があります。

不確かな設定値を作って貼り付けるのではなく、使用しているVelocityとPaperの公式ドキュメントを確認してください。

12. まとめ

今回のエラーは、Velocityへ接続した後、lobbyへ移動する段階で発生しました。

Connection refused: localhost/127.0.0.1:30066

このログは、Velocityが127.0.0.1:30066へ接続しようとしたものの、その場所でPaperが待ち受けていなかった可能性が高いことを示しています。

確認するポイントをまとめると、次のとおりです。

  • Paperが正常に起動しているか
  • Paperが起動途中または異常終了していないか
  • Paperのserver-port30066
  • Velocityのlobby設定がPaperのポートと一致しているか
  • ポート30066LISTEN状態か
  • VelocityとPaperが同じPCか別PCか
  • 別PCなのにlocalhostを指定していないか
  • ファイアウォールが通信を拒否していないか

同じPCなら、次の設定が候補になります。

lobby = "127.0.0.1:30066"

別PCなら、Paper用PCのIPアドレスを指定します。

lobby = "192.168.1.100:30066"

Connection refusedが出たときはVelocityの設定だけを何度も変更せず、Paperの起動状態、PaperとVelocityのポート番号、実際の待受状態を順番に照合すると原因を絞り込みやすくなります。