私はJavaでサーバークライアントアプリケーション(コマンドラインベース)を開発しています。私はRaspberry Pi(RPi)で実行したいのですが、私のラップトップでサーバー部分にログインできないことがわかりました。問題は、私のアプリケーションのサーバー部分(ソケット、ポート4444)を実行すると、問題なくRPiからTelnet経由で接続できることです。
RPiでサーバ部を実行しても接続は確立されません。私はLinuxに慣れていませんが、これはiptablesで何をすべきですか?他の提案?
答え1
まず、ファイアウォール(iptables)が問題ではないことを確認します。 RPiでは、次のコマンドを使用してこれを確認できます。
$ iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
上記のようにファイアウォールが問題ない場合は、Javaアプリケーションを起動し、次のコマンドを使用して正しいポートでリッスンしていることを確認してください。
$ netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:9090 0.0.0.0:* LISTEN 970/xbmc.bin
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 970/xbmc.bin
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 936/sshd
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 1086/smbd
tcp 0 0 192.168.1.85:22 192.168.1.20:34971 ESTABLISHED 6762/0
tcp 0 0 :::53 :::* LISTEN 829/connmand
tcp 0 0 :::22 :::* LISTEN 936/sshd
tcp 0 0 :::445 :::* LISTEN 1086/smbd
このコマンドは、各デーモンがリスニングするIPアドレスとポートを表示します。たとえば、次の行は次のようになります。
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 970/xbmc.bin
これは、プロセスIDが970(xbmc.bin)のプロセスがすべてのインターフェイス(0.0.0.0)のポート80でリッスンしていることを示しています。最後のビット「すべてのインターフェイス」は、複数のネットワークインターフェイス(イーサネット、Wi-Fiなど)がある場合、デーモンがこれらのいずれかの接続を受け入れることを意味します。
単に192.168.1.10などのIPアドレスを表す場合、デーモンはそのIPアドレスが割り当てられているインターフェイスの接続のみを許可します。
最後に注目すべき点は、上記デーモンが許可する接続タイプはTCPであることです。もう1つのタイプは、このデーモンでは許可されていないUDPです。