路由器后面的服务器

时间:2013-02-16 17:36:21

标签: python apache networking router

我正在尝试在路由器后面设置服务器,并且我已经能够将其减少到以下问题:

我用:

  1. Siemens SL2-141路由器。
  2. 使用Python 2.7的Windows 7 64位。
  3. 我跑:

    • 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它应该可以工作,但它不起作用(“没有连接可能是因为目标机器主动拒绝它“”。

    4. 我尝试用Apache服务器做同样的事情,结果很相似:浏览localhost工作,浏览静态IP工作,但浏览公共IP不起作用(端口80给了我路由器设置页面和端口8080无法连接)。

      最后的说明:

      • 我关掉了防火墙。
      • 我检查了端口是否已打开(http://www.canyouseeme.org/),而且是。
      • 我检查过服务器正在监听(netstat -na | find / i“8080”),确实如此。

      任何想法是什么问题?

1 个答案:

答案 0 :(得分:1)

  

据我了解,如果我离开服务器IP '10 .0.0.200'并将客户端IP设置为我的公共IP它应该可以工作,但它不起作用。

如果客户端在外部网络上,那是对的。在本地网络上,如果您使用公共地址,它可能会或可能不会工作,具体取决于您的路由器是否实现NAT反射(如果不是,它将丢弃数据包)。您应该使用本地网络上的本地(私有)IP地址。许多路由器允许您为本地资源配置DNS记录(从DNS服务器覆盖记录,实现一种“拆分DNS”)。这样,您就可以使用一个DNS名称来获取正确的地址。

如果问题是来自外部网络上的客户端的连接,听起来好像你的NAT路由器不是端口转发。我没有你的路由器型号,但我看到这一行:

  

来自内部主机IP地址:全部

并且想知道你是否必须允许From External

您还确定此规则已启用吗? (我只是问,因为我上次遇到这样的问题时我已正确创建了转发规则,但未启用。)

如果您仍然卡住,请尝试删除该规则并重新测试该端口是否向http://www.canyouseeme.org/开放。我还会在不运行服务器程序时重新测试(测试外部端口扫描是否会产生误导,这可能会发生)。

最后,当你写:

  

我关掉了防火墙。

您的意思是Windows防火墙吗?您还需要仔细检查,因为Windows防火墙可以在阻止远程连接时允许本地连接。