1

ルーターの背後にサーバーをセットアップしようとしていますが、次の問題に減らすことができました。

私が使う:

  1. シーメンスSL2-141ルーター。
  2. Python2.7を搭載したWindows764ビット。

走る:

  • server.py:

    import socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind((IP, 8080))
    sock.listen(1)
    sock.accept()
    print 'success'
    sock.close()
    
  • client.py:

    import socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((IP, 8080))
    sock.close()
    

  1. IP = '127.0.0.1'の場合、機能します。
  2. 静的IPを設定しました:

    > Network And Sharing Center > Change Adaper Settings > Local Area Connection
    > Properties > Internet Protocol Version 4 (TCP/IPv4) > Properties
    > Use The Following IP Address:
    
        IP Address:      10.0.0.200
        Subnet Mask:     255.0.0.0
        Default Gateway: 10.0.0.138
    
    > Use The Following DNS Server Addresses:
    
        Preferred DNS Server: 10.0.0.138
        Alternate DNS Server: - - - -
    

    そして、IP = '10.0.0.200'の場合、それは機能します。

  3. ルーターにポートフォワーディングを設定しました。

    > http://10.0.0.138/
    > Username: Admin
    > Password: Admin
    > Advanced > Virtual Server > Port Forwarding > Add:
    
        User Defined: Test
    
        From Internal Host IP Address:       ALL
        Forward to Internal Host IP Address: 10.0.0.200
    
        Protocol:                            TCP
        External Packet Port Start:          8080
        External Packet Port End:            8080
        Forward To Internal Host Port Start: 8080
        Forward To Internal Host Port End:   8080
    
    > Apply (and reboot router, just in case).
    

    私の理解では、サーバーIPを「10.0.0.200」のままにしてクライアントIPをパブリックIPに設定すると、機能するはずですが、機能しません(「ターゲットマシンがアクティブに拒否したため、接続できませんでした」)。 。

Apacheサーバーで同じことを試してみたところ、結果は似ていました。ローカルホストの参照は機能し、静的IPの参照は機能しましたが、パブリックIPの参照は機能しませんでした(ポート80でルーターのセットアップページが表示され、ポート8080ではできませんでした)接続しない)。

最後の注意:

  • ファイアウォールをオフにしました。
  • ポートが開いていることを確認しました(http://www.canyouseeme.org/)。
  • サーバーがリッスンしていることを確認し(netstat -na | find / i "8080")、リッスンしています。

問題は何ですか?

4

1 に答える 1

1

私の理解では、サーバー IP '10.0.0.200' をそのままにして、クライアント IP をパブリック IP に設定すると機能するはずですが、機能しません。

そうです、クライアントが外部ネットワーク上にある場合です。ローカル ネットワークでは、パブリック アドレスを使用する場合、ルーターが NAT リフレクションを実装しているかどうかによって、機能する場合と機能しない場合があります (そうでない場合は、パケットがドロップされます)。ローカル ネットワークではローカル (プライベート) IP アドレスを使用する必要があります。多くのルーターでは、ローカル リソースの DNS レコードを構成できます (DNS サーバーからのレコードを上書きし、「分割 DNS」のタイプを実装します)。そうすれば、1 つの DNS 名を使用して正しいアドレスを取得できます。

外部ネットワーク上のクライアントからの接続に問題がある場合は、NAT ルーターがポート転送されていないように思えます。ルーターのモデルはわかりませんが、次の行が表示されます。

内部ホスト IP アドレスから: すべて

そして、あなたが許可しなければならないのだろうかFrom External.

また、このルールが有効になっていますか? (前回このような問題が発生したとき、転送ルールを正しく作成しましたが、有効になっていませんでした。)

それでも問題が解決しない場合は、ルールを削除して、 http://www.canyouseeme.org/に対してポートが開いているかどうかを再テストしてください。サーバープログラムを実行していないときにも再テストします(外部ポートスキャンが誤解を招く可能性があるかどうかをテストするため)。

最後に、次のように記述します。

ファイアウォールをオフにしました。

Windows ファイアウォールのことですか? Windows ファイアウォールは、リモート接続をブロックしながらローカル接続を許可できるため、これも再確認する必要があります。

于 2013-02-16T17:49:35.667 に答える