无法绑定到AWS VPC内的0.0.0.0

时间:2014-10-22 16:45:38

标签: amazon-web-services amazon-vpc vpc

我正在尝试在EC2中设置一个香草Jboss(Wildfly-8.0.0.Final),虽然我相信任何应用程序都会遇到这个问题。

在默认空间中的vanilla ubuntu可信VM上,我解压缩,并配置为在addr-any:0.0.0.0上运行。

在运行时,这已成功解​​析为实例的本地IP:

15:26:43,467 INFO [org.hornetq.jms.server](ServerService线程池 - 59)HQ121005:无效"主机"价值" 0.0.0.0"检测到" http-connector"连接器。切换到" ip-123-45-67-8.us-my-zone.compute.internal"。如果此新地址不正确,请手动配置连接器以使用正确的地址。

现在,我在VPC内部启动同一台机器的AMI图像。 VPC设置有公共IP和公共DNS。附加并配置路由表/安全组/等,使得可以使用公共DNS ssh到新的VPC实例。启动jboss,它无法连接到0.0.0.0:

16:28:47,603 WARN  [org.hornetq.jms.server] (ServerService Thread Pool -- 58) HQ122017: Tried to correct invalid "host" value "0.0.0.0" for "http-connector" connector, but received an exception.: java.net.UnknownHostException: ip-123-45-67-8: ip-123-45-67-8
    at java.net.InetAddress.getLocalHost(InetAddress.java:1473) [rt.jar:1.7.0_65]
    at org.hornetq.jms.server.impl.JMSServerManagerImpl.correctInvalidNettyConnectorHost(JMSServerManagerImpl.java:1883) [hornetq-jms-server-2.4.1.Final.jar:]
    at org.hornetq.jms.server.impl.JMSServerManagerImpl.internalCreateCFPOJO(JMSServerManagerImpl.java:1379) [hornetq-jms-server-2.4.1.Final.jar:]
    at org.hornetq.jms.server.impl.JMSServerManagerImpl.internalCreateCF(JMSServerManagerImpl.java:1324) [hornetq-jms-server-2.4.1.Final.jar:]
    at org.hornetq.jms.server.impl.JMSServerManagerImpl.access$1300(JMSServerManagerImpl.java:103) [hornetq-jms-server-2.4.1.Final.jar:]
    at org.hornetq.jms.server.impl.JMSServerManagerImpl$5.runException(JMSServerManagerImpl.java:1187) [hornetq-jms-server-2.4.1.Final.jar:]
    at org.hornetq.jms.server.impl.JMSServerManagerImpl.runAfterActive(JMSServerManagerImpl.java:1845) [hornetq-jms-server-2.4.1.Final.jar:]
    at org.hornetq.jms.server.impl.JMSServerManagerImpl.createConnectionFactory(JMSServerManagerImpl.java:1173) [hornetq-jms-server-2.4.1.Final.jar:]
    at org.jboss.as.messaging.jms.ConnectionFactoryService$1.run(ConnectionFactoryService.java:66) [wildfly-messaging-8.0.0.Final.jar:8.0.0.Final]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_65]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_65]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_65]
    at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.1.Final.jar:2.1.1.Final]

解决方法是更新/ etc / hosts文件以包含主机名: 在/ etc / hosts之前: 127.0.0.1 localhost

/ etc / hosts之后: 127.0.0.1 val-from-hostname-file localhost

在VPC内部运行,实例可以找到其主机名但未成功绑定到它,有什么不同?

1 个答案:

答案 0 :(得分:3)

这很可能是您的VPC配置问题。

DHCP选项集确定主机通过DHCP提供的域名后缀,以便在查找不合格的主机名(包括他们自己的主机名)时使用。您将在/etc/resolv.conf

中看到此配置的结果
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.0.2.2
search ec2.internal

此处,ec2.internal是US-East-1中VPC的默认值。其他区域具有不同的格式,但这些域仅存在于您的VPC中,以便查找内部主机。

当VPC中的一个实例(假设为192.0.2.100)从其主机名中查找其地址时,它将查找ip-192-0-2-100.ec2.internal。如果您在VPC配置中启用了DNS ResolutionDNS Hostnames,则这是根据AWS提供的DNS服务器的有效主机名。

如果您已将DHCP选项集配置为使用您自己的example.com域,则分配给该实例的主机名(例如,ip-192-0-2-100)必须是有效的主机名在那个域中,所以ip-192-0-2-100.example.com必须是可解析的主机名,并且需要解析到正确的地址。

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-dns.html

这不是EC2-Classic中的问题,因为无法更改或禁用此基础架构配置层。每个EC2-classic实例都可以针对AWS提供的内部*.internal域查找自己的主机名,并获取自己的IP。

此错误配置问题的另一个症状是当您使用sudo并看到sudo: unable to resolve host ip-x-x-x-x警告时。