所有名称服务器都无法响应 UDP 端口 53 谷歌云函数 python 3.7 atlas mongodb

Posted

技术标签:

【中文标题】所有名称服务器都无法响应 UDP 端口 53 谷歌云函数 python 3.7 atlas mongodb【英文标题】:All nameservers failed to answer UDP port 53 Google cloud functions python 3.7 atlas mongodb 【发布时间】:2020-11-14 16:58:27 【问题描述】:

我可以本地连接到地址为 0.0.0.0/0 的我的 mongodb 服务器。但是,当我将代码部署到云时,我收到错误部署到谷歌云功能。

带有python 3.7(测试版)的谷歌云功能 阿特拉斯 mongo 数据库 蟒蛇库: -pymongo -dnspython

Error: function crashed. Details: All nameservers failed to answer the query _mongodb._tcp.**-***.gcp.mongodb.net. IN SRV: Server ***.***.***.*** UDP port 53 answered SERVFAIL

Traceback (most recent call last): File "/env/local/lib/python3.7/site-packages/pymongo/uri_parser.py", line 287, in _get_dns_srv_hosts results = resolver.query('_mongodb._tcp.' + hostname, 'SRV') File "/env/local/lib/python3.7/site-packages/dns/resolver.py", line 1132, in query raise_on_no_answer, source_port) File "/env/local/lib/python3.7/site-packages/dns/resolver.py", line 947, in query raise NoNameservers(request=request, errors=errors) dns.resolver.NoNameservers: All nameservers failed to answer the query _mongodb._tcp.**mymongodb**-r091o.gcp.mongodb.net. IN SRV: Server ***.***.***.*** UDP port 53

【问题讨论】:

我想将您的问题改写如下:“我可以使用地址 0.0.0.0/0 在本地连接到我的 mongo db 服务器。但是,当我将代码部署到云时,我得到了错误:...” 我在 mongo db 方面没有经验,但我正在努力为其他人澄清问题。我不确定我是否在帮助... 【参考方案1】:

终于在卡住 2 天后,goblok banget semaleman

只需更改连接 来自

SRV 连接字符串(3.6+ 驱动)

标准连接字符串(3.4+驱动)

mongodb://<USERNAME>:<PASSWORD>@<DATABASE>-shard-00-00-r091o.gcp.mongodb.net:27017,<COLLECTION>-shard-00-01-r091o.gcp.mongodb.net:27017,<COLLECTION>-shard-00-02-r091o.gcp.mongodb.net:27017/test?ssl=true&replicaSet=<COLLECTION>-shard-0&authSource=admin&retryWrites=true

或者您可以在 atlas mongodb 中查看您的连接字符串。

知道为什么在谷歌云功能中无法使用 srv 连接字符串,现在可能不支持,或者只是配置错误。

【讨论】:

其实我觉得我有办法。通过安装dnspython 可以使用mongodb+srv:// URI;见the docs。【参考方案2】:

这可能对某些人有所帮助,当我尝试使用 mongodb+srv:// 语法连接到 MongoDB 时,我在 Windows 上遇到了这个错误,如果我通过 WSL 或在 Linux 机器上尝试它工作正常。

来自https://forum.omz-software.com/topic/6751/pymongo-errors-configurationerror-resolver-configuration-could-not-be-read-or-specified-no-nameservers/4

import dns.resolver
dns.resolver.default_resolver=dns.resolver.Resolver(configure=False)
dns.resolver.default_resolver.nameservers=['8.8.8.8'] # this is a google public dns server,  use whatever dns server you like here
# as a test, dns.resolver.query('www.google.com') should return an answer, not an exception

【讨论】:

以上是关于所有名称服务器都无法响应 UDP 端口 53 谷歌云函数 python 3.7 atlas mongodb的主要内容,如果未能解决你的问题,请参考以下文章

DNS服务53端口TCP和UDP的区别

hacker之眼Nmap的原理及用法(十六)设计理想的探针组合

DNS基础

DNS基础

如果您安装了防火墙请确认防火墙未拦截本机的UDP通讯报文(源端口:80目的端口53)您可以通过设置防火墙

DNS同时占用UDP和TCP端口53——传输数据超过512时候用tcp,DNS服务器可以配置仅支持UDP查询包