【问题标题】:Permission denied when performing a DNS lookup on OpenShift Online在 OpenShift Online 上执行 DNS 查找时权限被拒绝
【发布时间】:2015-01-24 18:51:44
【问题描述】:

我正在尝试在 OpenShift Online 上的 Rails 应用程序中查找 DNS 记录。不幸的是,这失败并出现 Permission denied 错误。从日志中:

[App 13739 stdout] I, [2015-01-24T13:37:47.698714 #13739]  INFO -- : Completed 500 Internal Server Error in 25ms
[App 13739 stdout] F, [2015-01-24T13:37:47.811394 #13739] FATAL -- : 
[App 13739 stdout] Errno::EACCES (Permission denied - bind(2)):
[App 13739 stdout]   app/models/user.rb:706:in `block in validate_mail_domain'
[App 13739 stdout]   app/models/user.rb:705:in `validate_mail_domain'

失败的代码是:

  def validate_mail_domain
    begin
      Resolv::DNS.open do |dns|
        dns.getresource(mail.split("@").last, Resolv::DNS::Resource::IN::SOA)
      end
    rescue ArgumentError
      errors.add(:mail, "must be provided")
    rescue Resolv::ResolvError
      errors.add(:mail, "must be valid")
    end
  end

第 706 行是以dns.getresource 开头的那一行。

(逻辑很简单:存在的域会有SOA记录,如果没有,则域无效。)

这是非常标准的东西,这里的失败是非常出乎意料的。是否有其他方法可以在 OpenShift 中执行 DNS 查找?

【问题讨论】:

    标签: ruby-on-rails dns openshift


    【解决方案1】:

    由于 SELinux 的限制,您似乎无法在 OpenShift 上进行 DNS 查找。当您通过 SSH 连接到您的设备时,您可以通过 dig 确认这一点:

    $ dig google.com
    dig: isc_socket_bind: permission denied
    

    此限制记录在此 bug report 中,链接的 OpenShift 论坛 thread 建议您同时使用基于 Web 的外部 DNS 查找服务作为解决方法。

    【讨论】:

    • 看来确实如此。使用基于 Web 的服务的解决方法似乎 (1) 真的很笨拙,并且 (2) 不太可能让我交到任何朋友,因为我看到的大多数此类服务都不需要自动查询并且不提供 API。跨度>
    • 是的,这很糟糕。我认为这个限制与绑定 UDP 端口有关?你看过statdns.com/api吗?
    猜你喜欢
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2016-11-01
    • 2013-04-14
    • 1970-01-01
    相关资源
    最近更新 更多