【问题标题】:Socket server ip/port problemSocket服务器ip/port问题
【发布时间】:2009-09-12 16:36:15
【问题描述】:

我正在尝试在 ubuntu 机器上设置套接字服务器。我一直在我自己的机器上设置相同的服务器脚本,它可以完美运行。在我的路由器中,我将端口 10007 转发到正确的机器并将 ip 绑定到我的本地 ip (192.168...:10007)。

现在我需要在专用服务器上设置它,这就是问题开始的地方。我似乎在服务器上没有本地 ip,至少 ifconfig 不会显示给我一个。我尝试绑定到公共 ip,或者绑定到 127.0.0.1 或 0.0.0.0,如果我从同一台机器上远程登录,但不是从另一台机器上远程登录,那效果很好。任何人都知道如何解决这个问题?我需要设置某种端口转发吗?

【问题讨论】:

  • 请澄清条款。 “我似乎在服务器上没有本地 ip”是什么意思? ifconfig 中只显示 lo 界面,没有 eth0 等?公网IP是指路由器的外网IP?
  • 我有 lo 和 eth0,但没有 192.168.x.x 中的“内部”。 eth0 有 79.136.x.x,例如可以通过 ssh 和 http 从 Internet 访问。
  • 那么您的新服务器是在数据中心还是在家里,直接连接到电缆调制解调器或其他什么地方?它不在 NAT 设备后面?
  • 是的,在数据​​中心。不知道 NAS。

标签: linux networking sockets ubuntu


【解决方案1】:

不要绑定到特定的 IP 地址;使用INADDR_ANY (IPv4) 或全零地址。

Ubuntu 包含自己的防火墙作为系统的一部分。如果您无法从另一台机器连接,请检查它是否配置为阻止连接到您的端口。

Ubuntu Firewall documentation
Ubuntu ufw man page

编辑:您和阻止端口的服务器之间也可能有防火墙。您可以咨询您的托管服务提供商或您的服务协议;他们可能需要专门启用所需的每个附加端口。一些提供商提供不同的托管包,从仅允许端口 80 的基本仅 Web 共享托管包到允许完全访问机器和所有端口的专用服务器。

【讨论】:

  • 好的,现在我尝试了 0.0.0.0,用 ufw 启用端口 10007,检查我没有任何 iptables 限制并尝试从不同的机器连接。但它仍然不起作用:/
  • 你能ping通服务器吗?您是否成功连接到其他端口?您确定没有其他防火墙保护服务器吗?
  • 是的 ping 79.136.... ip 工作正常,我可以通过 ssh 连接到它,并且其上的网络服务器(端口 80)工作正常。如何确定是否有防火墙阻止了端口?这似乎是发生这种情况的唯一方法,但我不知道在哪里看,iptables -L 没有给出任何规则。
【解决方案2】:

NAT - Network Address Translation 允许多台机器在路由器后面拥有本地地址,该路由器向互联网提供一个公共地址。对于您的旧服务器,您几乎可以肯定是在路由器后面而不是运行 NAT,这就是为什么您必须进行端口转发才能到达您的服务器。

如果您当前不在 NAT 设备后面,那么这就是您看不到 192.168.x.x 或 172.16.x.x 或 10.0.x.x 范围内的私有地址的原因。您直接连接到互联网,私人地址和公共地址之间没有区别。 79.136.x.x 是您的公共地址,您没有私人地址。只需绑定到它并运行您的服务器。

【讨论】:

    【解决方案3】:

    运行程序后,netstat 中是否列出了端口(我使用 netstat -a)?这将告诉您端口是否打开并正在侦听。

    【讨论】:

    • 是的,它与 netstat 一起列出:tcp 0 0 0.0.0.0:10008 0.0.0.0:* LISTEN 13071/php
    • 是的,我相信即使防火墙阻止它也会显示出来。这表明您的程序正在“做正确的事情”并成功打开套接字。您也可以使用 lsof 来获取相同的信息。如果此时仍无法连接,则说明有其他东西阻塞了您的套接字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2013-08-07
    • 2014-04-18
    相关资源
    最近更新 更多