LAN 外部から Jetty サーバーにアクセスするにはどうすればよいでしょうか?

LAN 外部から Jetty サーバーにアクセスするにはどうすればよいでしょうか?

当初、この質問を stackoveflow に投稿しましたが、このサイトの方が適しているというアドバイスを受けました。

あるマシンに展開されたJettyサーバーにLAN外の別のマシンからアクセスしようとしていますが、うまくいきません。このスレッドそして、@ヨアキム・エルドフェルトしかし、動作しませんでした。私のコードは以下の通りです:

Server server = new Server();
    

    
// HTTP connector
ServerConnector serverConnector = new ServerConnector(server, 1, 1);
serverConnector.setHost("0.0.0.0"); <-
serverConnector.setPort(8080);
serverConnector.setIdleTimeout(30000);
    
    
 
 // Set the connector
 server.addConnector(serverConnector);

次のコードを使用して、別のリモート サーバーからサーバーにアクセスしようとしました。

String postUrl = "http://" + myIP + ":8080"; // myIP is set to the public IP address of Jetty Server

System.out.println("Post URL: " + postUrl);

RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(120 * 1000).build();



try (CloseableHttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();) {

HttpPost httpPostRequest = new HttpPost(postUrl);

...

ただし、次の例外がスローされます。

HttpPostConnectException: Connect to 123.4.56.78:8080.. failed: Connection refused: connect

このエラーの原因は何ですか? プロンプトが表示されたらファイアウォール アクセスを許可したので、ファイアウォールの問題ではないと思います。ポートは8080他のプロセスにも使用されていません。複数のポートを試しましたが、効果はありませんでした。

ありがとう

答え1

私の推奨事項のいくつかを回答に移します。基本的なネットワークの知識が不足していますので、少し読んでみてください(ここたとえば、次のような基本事項があります。

  • ローカル IP (ネットワーク 192.168.xx、10.xxx など) はインターネットからアクセスできません。インターネット プロバイダーに直接接続されているデバイス (自宅のルーター) のみがインターネットから直接アクセスできます。
  • 自宅のルーターに接続してインターネットを閲覧すると、いくつかのことが起こります。ローカル IP はインターネットからアクセスできないため、自宅のルーターはローカル IP を隠し、パブリック IP に置き換えます。これを行うと、ルーターは接続を記録して応答を処理できるようにします。応答が到着すると、同じプロセスが逆になります。ルーターがテーブル内で着信パケットに一致する接続を見つけた場合、パブリック IP はプライベート IP に置き換えられ、応答はネットワーク内の適切なデバイスに転送されます。このプロセスは、NATネットワークアドレス変換
  • NAT は、ホーム ネットワーク内のデバイスを保護します (デバイスはインターネットに接続できますが、インターネットはデバイスに接続できません)。ただし、ホーム ネットワークのデバイスをインターネットから接続可能にする場合は困難になります。これは、ルーターがすべての着信データ パケットの処理方法を把握する必要があるためです。デフォルトでは、ホーム ネットワーク内のどのデバイスもその接続を開かなかった場合、着信データ パケットはドロップされます。

これで、なぜ複数のIPアドレスを持っているのかが明らかになったはずです。GoogleはパブリックIPしか見ることができません。Jettyサーバーをインターネットからアクセスできるようにするには、ポート転送基本的には、自宅のルーター内にルールを作成します。ポート8080で受信したすべてのTCPパケットを内部デバイスXYに転送します。「これを行う方法については、ルーターのマニュアルを確認する必要があります。ほとんどのルーターには、設定用の Web インターフェイスがあります。これで混乱が解消されることを願っています...

関連情報