Amazon ec2 如何知道Amazon AWS实例的内部DNS名称?

Amazon ec2 如何知道Amazon AWS实例的内部DNS名称?,amazon-ec2,Amazon Ec2,我有一个在Amazon AWS云上有N台服务器的系统。他们都在同一个区域。实例A想与实例B对话,但显然它没有通过互联网。据我所知,每次重新启动实例时,内部IP都会发生变化。所有my实例是否都有一个内部的、恒定的DNS名称,通过它它们可以在它们之间进行交互而不必担心重新启动?否,使用现成的AWS实例无法使用“固定”IP地址或DNS名称。即使将EIP(弹性IP)分配给实例,这也只会影响面向公众的IP/DNS引用,而不会影响内部引用 我们在EC2中使用了一对DNS服务器(它是Windows,所以它们是

我有一个在Amazon AWS云上有N台服务器的系统。他们都在同一个区域。实例A想与实例B对话,但显然它没有通过互联网。据我所知,每次重新启动实例时,内部IP都会发生变化。所有my实例是否都有一个内部的、恒定的DNS名称,通过它它们可以在它们之间进行交互而不必担心重新启动?

否,使用现成的AWS实例无法使用“固定”IP地址或DNS名称。即使将EIP(弹性IP)分配给实例,这也只会影响面向公众的IP/DNS引用,而不会影响内部引用

我们在EC2中使用了一对DNS服务器(它是Windows,所以它们是主/辅助AD域控制器)。通过让所有其他实例将此对用作其DNS服务器,我们可以在每个实例启动时为其分配唯一的计算机名称,并通过这些名称引用任何/所有其他实例


例如,我们基于EC2的Subversion服务器有一个EIP,这意味着当我们从EC2外部与它交谈时,它总是在同一个地方,但基于EC2的CruiseControl服务器将其称为[ourec2domain].SVNHOST,因为它在启动时向DCs注册了该名称。

我第一次使用云时也遇到了同样的问题。我也使用2个DNS服务器的设置,并使用命令
ec2 create tags--tag Purpose=DNS

使用我创建的服务,服务器在启动时运行powershell脚本。此powershell脚本检查amazon中的两个dns服务器,并将它们添加到网络接口。假设此时您有一个dns服务器列表,您可以使用下面的代码将条目添加到dns服务器。要获得服务器列表,只需使用带powershell的AWSSDKnet查询您的帐户

$connection = "Local Area Connection 2"
$registered = $false;

# Clean up the DNS entries incase there are any settings already
Write-Output "Clearing DNS Entries"
$X = netsh interface ip set dns $connection static none

$index = 1;
foreach ( $server in $servers)
{
    # Set this server's 
    Write-Output "Adding server $server to DNS"
    $X = netsh interface ip add dnsserver $connection $server index=$index

    # Register the server's hostname with the dns server
    if(-not ($registered))
    {
        $computer = hostname
        $address = (netsh interface ip show address $connection | select-string "IP Address") -replace '^[^\d]+'
        $rec = [WmiClass]"\\dns01\root\MicrosoftDNS:MicrosoftDNS_ResourceRecord"
        $rec.CreateInstanceFromTextRepresentation("dns01", "network.cloud", "$($computer).network.cloud IN A $address")
        $registered = $true;
    }
    $index++;
}
如果您的服务器不是windows,那么您可以使用Ubuntu或Amazon Linux“Cloud Init”执行相同的任务。

从实例:

curl http://169.254.169.254/latest/meta-data/local-hostname

请注意,这种方法虽然有效,但并不是只在内部EC2主干上保持通信量。通过使用EC2内部的EIP,实际上是将请求路由到面向公众的网关,然后该网关通过将DNS请求交还给内部路由表并从中导出内部地址来解析DNS请求。此外,如果您有许多服务器,您可能会很快用完EIP分配—您可以请求更多,但不能保证亚马逊会将它们授予您。有几件事需要注意。重新路由到面向公众的网关对计费有什么影响?@Jonners,这种方法从不使用EIP。它仅使用EIP的主机名进行DNS查找(在内部DNS服务器上)。所以内部网络之外没有流量。@Andrew是的,这是我两年前写评论时没有完全理解的微妙之处。。)谢谢Jonners。您的解决方案更适合大型部署。另外,您的服务器如何连接到DNS服务器本身?如果DNS服务器的IP发生变化,您也会遇到同样的问题。DC有EIP分配,这些地址会在每个实例启动时提供给它们—设置它们的DNS引用。我们认识到,这意味着DNS流量被路由到EC2网关(通过EIP),然后再返回,但这仅适用于这两个服务器标识,而不是所有服务器标识(如果实例使用任何其他实例的EIP与它们通信,则会出现这种情况)。我们有一个在DCs上运行的概念验证流程,并宣布其内部IP地址,但尚未将侦听器流程“烘焙”到其他实例快照中以避免网关循环。我感到非常奇怪的是,没有人以通用方式解决此问题。无论如何,谢谢你的建议。我也有同样的问题。。。EC2上只有两台Windows服务器,我不知道用一个一致的名称从一台连接到另一台的简单方法,而不是在每次重新启动后手动输入分配的内部IP。也许Windows网络有一个可能有用的功能?