2013-02-16 171 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