2009-09-12 13 views
0

私はubuntuマシンにソケットサーバーを設定しようとしています。私はそれが完璧に動作する私のマシン上に同じサーバスクリプトを設定しています。私のルータでは、私はポート10007を正しいマシンに転送し、私のローカルIP(192.168 ...:10007)にIPをバインドします。ソケットサーバーのIP /ポートの問題

ここで私はそれを専用サーバーに設定する必要があります。それが問題の始まりです。私はサーバ上にローカルIPを持っていないようだが、atleast ifconfigは私には表示されないだろう。私はpublic IPに代わりに127.0.0.1または0.0.0.0にバインドしようとしました。これは、同じマシンからtelnetして別のマシンからtelnetすればうまく動作します。誰でもこれを解決する方法を知っていますか?私は何らかのポートフォワーディングを設定する必要がありますか?

+0

用語を明確にしてください。 「私はサーバー上にローカルIPを持っていないようです」とはどういう意味ですか? if loのインタフェースがifconfig、eth0などで表示されますか?パブリックIPでは、ルータの外部IPを意味しますか? – Duck

+0

私はloとeth0を持っていますが、192.168.x.xのように "internal"はありません。 eth0には79.136.x.xがあり、これは例えばインターネットからsshとhttpを介してアクセスできます。 – Martin

+0

新しいサーバーはデータセンターにあるか、自宅でケーブルモデムなどに直接接続されていますか? NATデバイスの背後にはありませんか? – Duck

答えて

2

特定のIPアドレスにバインドしないでください。 INADDR_ANY(IPv4)またはオールゼロアドレスを使用してください。

Ubuntuには、システムの一部として独自のファイアウォールが組み込まれています。別のマシンから接続できない場合は、ポートへの接続をブロックするように設定されているかどうかを確認してください。

Ubuntu Firewall documentation
Ubuntu ufw man page

編集:もあなたとポートをブロックしているサーバの間にファイアウォールがあるかもしれません。ホスティングプロバイダまたはサービス契約に確認することができます。必要な追加ポートを個別に有効にする必要がある場合があります。いくつかのプロバイダは、ポート80だけを許可する基本的なWeb専用の共有ホスティングパッケージから、マシンとすべてのポートへのフルアクセスを可能にする専用のサーバーまで、さまざまなホスティングパッケージを提供しています。

+0

さて、私は0.0.0.0を試しました。ポート10007をufwで有効にしました.iptablesの制限がなく、別のマシンから接続しようとしました。しかしそれでも動作しません:/ – Martin

+0

サーバーマシンにpingできますか?他のポートに正常に接続していますか?他のファイアウォールがサーバーを保護していないことは確かですか? – mark4o

+0

はい79.136 ....にpingをしていますが、ipはうまくいきます。私はそれにsshすることができ、Webサーバー(ポート80)は正常に動作しています。ファイアウォールがポートをブロックしているかどうか調べるにはどうすればいいですか?これが起こる可能性がある唯一の方法だと思われますが、どこを見てもわからないので、iptables -Lは規則を与えません。 – Martin

1

NAT-Network Address Translationは、インターネットに1つのパブリックアドレスを提示するルータの背後にローカルアドレスを持つことができるものです。古いサーバーでは、NATを実行するよりもルータの背後にあることがほぼ確実でした。そのため、サーバーに到達するためにポート転送を行う必要がありました。

現在、NATデバイスの背後にいない場合は、192.168.x.xまたは172.16.x.xまたは10.0.x.xの範囲でプライベートアドレスが表示されません。あなたはインターネットに直接接続されており、プライベートアドレスとパブリックアドレスの区別はありません。 79.136.x.xはあなたのパブリックアドレスであり、プライベートアドレスはありません。それにバインドしてサーバーを実行してください。

1

あなたのプログラムを実行した後、ポートはnetstat(私はnetstat -aを使用しています)にリストされていますか?これは、ポートが開いていて聞いているかどうかを知らせます。

+0

はいnetstatに記載されています: tcp 0 0 0.0.0.0:10008 0.0.0。0:* LISTEN 13071/php – Martin

+0

ファイアウォールがブロックしていた場合は表示されませんか? – Martin

+0

はい、ファイアウォールがブロックしていても表示されると思います。 これは、プログラムが「正しいことをして」、ソケットを正常に開いていることを示しています。 lsofを使って同じ情報を得ることもできます。 まだ接続できない場合は、ソケットをブロックする何かがあります。 – cigarman

関連する問題