【问题标题】:Why is connection not established with ec2 public IP为什么没有与 ec2 公共 IP 建立连接
【发布时间】:2023-08-24 12:21:01
【问题描述】:

我们已经构建了一个车辆跟踪系统 (VTS) 设备。我有一个 PHP 脚本来监听客户端连接。

当我们使用 EC2 实例的私有 IP 连接时建立了连接,但是当我们尝试在 php 脚本中放置外部 IP 或公共 IP 时,它会显示错误。

我该如何解决这个问题??

我已经使用 Amazon EC2 启动了一个 Linux 虚拟机。然后使用 putty 从 Windows 连接到 Linux 实例。有一个 php 脚本可以监听传入的连接。当我放置 EC2 的私有 IP 时,它会连接,但是当我放置公共 IP 时,它会抛出错误“无法绑定 ip[99]”

public function __construct($bind_ip,$port)
{
    set_time_limit(0);
    $this->hooks = array();

    $this->config["ip"] = $bind_ip;
    $this->config["port"] = $port;

    $this->master_socket = socket_create(AF_INET, SOCK_STREAM, 0);
    socket_bind($this->master_socket,$this->config["ip"],$this->config["port"]) or die("Issue Binding");
    socket_getsockname($this->master_socket,$bind_ip,$port);
    socket_listen($this->master_socket);
    SocketServer::debug("Listenting for connections on {$bind_ip}:{$port}");
}

我们想从车辆跟踪设备获取数据。我们可以为该设备设置 IP 地址并将其放入 PHP 脚本中,但是当我使用公共 IP 运行它时,它会抛出错误“无法绑定 ip[99]”

【问题讨论】:

  • 所见即所得。 EC2 不会将外部公共 IP 暴露给实例的 IP 堆栈;相反,公共 IP 由 Internet 网关转换为私有 IP,它会自动进行静态 1:1 NAT,无需单独配置。绑定到内部地址或所有接口(例如0.0.0.0)是正确的,并且如果您的 VPC 网络设置都正确,仍然允许您接受到外部 IP 的连接。请确认:绑定私网IP后,还能连接公网IP吗?你应该,如果是这样,那么设置是正确的。

标签: php amazon-web-services amazon-ec2 ip-address serversocket


【解决方案1】:

请确保正确配置 EC2 实例安全组。 使用您在 EC2 实例中配置的 ip 和端口尝试 telnet。 例如: telnet 192.168.0.10 25 ,(25 是端口号)。

【讨论】:

  • 是的,我尝试过使用 telnet。它与私有 IP 连接,但是当我使用公共 IP 远程登录时,它显示无法绑定外部 IP
【解决方案2】:

VTS 系统需要静态 IP。您是否认为公开的内容是静态的?在大多数情况下,公共 ip 被划分为子网。

【讨论】: