2013-02-16 134 views
1

我試圖建立一個路由器後面的服務器,我已經能夠將其降低到以下問題:服務器的路由器後面

我用:

  1. 西門子SL2 -141路由器。
  2. Windows 7 64位與Python 2.7。

我運行:

  • 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」),它確實如此。

任何想法是什麼問題?

回答

1

據我瞭解,如果我離開服務器IP '10.0.0.200'並將客戶端IP設置爲我的公有IP,它應該可以工作,但它不起作用。

這是正確的,如果客戶端在外部網絡上。在本地網絡上,如果使用公共地址,它可能會或可能不會工作,具體取決於您的路由器是否實施NAT反射(如果不是,則會丟棄數據包)。您應該在本地網絡上使用本地(專用)IP地址。許多路由器允許您爲本地資源配置DNS記錄(覆蓋來自DNS服務器的記錄,實現一種「分割DNS」)。這樣您可以使用一個DNS名稱來獲取正確的地址。

如果你的問題是從客戶端的外部網絡的連接,聽起來莫名其妙的NAT路由器不是端口轉發。我沒有你的路由器模式,但我看到這一行:

從內部主機IP地址:ALL

,不知道如果你要允許From External

您是否確定此規則已啓用? (我只問,因爲我最後一次有這樣我就正確地創建了轉發規則的問題,但它並沒有啓用。)

如果你仍然堅持,嘗試刪除該規則,並重新測試,如果港口看起來開放http://www.canyouseeme.org/。我還會在不運行服務器程序時重新測試(以測試外部端口掃描是否具有誤導性,這可能會發生)。

最後,當你寫:

我關掉我的防火牆。

是不是指Windows防火牆?您還需要仔細檢查,因爲Windows防火牆可以在阻止遠程連接的同時允許本地連接。

+0

原來的路由器通過互聯網沒有路線我,所以公網IP不是用我的機器識別。我嘗試通過Tor運行客戶端(並瀏覽Apache服務器),並且一切正常。 謝謝。 – 2013-02-16 18:59:25