社区讨论

雷竞技网站MikroTik应用
axe3
刚刚加入了
主题作者
职位: 3.
加入: 2023年3月8日星期三下午1:54

DNS不能在路由器上通过HTTPS设置的DNS容器中工作

2023年3月8日星期三下午3:05

嘿,论坛!

我正在试验在我的路由器上运行的一些容器,特别是D53G-5HacD2HnD-TC&RG502Q-EA。

我目前已经在路由器上根据以下说明设置了DNS:https://www.youtube.com/watch?v=w4erB0VzyIE对我来说,它在网络上的所有设备上都运行得很好。

我现在遇到的问题是,如果我在路由器上运行容器,那么DNS不能与当前的DoH设置一起工作。最小的例子是运行图像'alpine:latest'与CMD 'ping google.com'并启用日志记录。这将导致容器停止,并记录“ping:错误地址'google.com'”。如果我在此时将CMD更改为“ping 8.8.8.8”,它就可以工作,因此我知道容器可以访问互联网。如果禁用DoH,那么DNS将按预期工作。如何让容器与DoH设置一起工作?

为了开始使用容器,我参考了容器系列的视频:https://www.youtube.com/watch?v=8u1PVouAGnkhttps://www.youtube.com/watch?v=UMcJs4oyHDkhttps://www.youtube.com/watch?v=i9GcFEx_Ois

潜在的相关信息:
代码:选择所有
/ip/dns print servers: dynamic-server: use-doh-server: https://cloudflare-dns.com/dns-query verify-doh-cert: yes doh-max-server-connections: 5 doh-max-concurrent-queries: 50 doh-timeout: 5s allow-remote-requests: yes max-udp-packet-size: 4096 query-server-timeout: 2s query-total-timeout: 10s max-concurrent-queries: 100 max-concurrent-tcp-sessions: 20 cache-size: 2048KiB cache-max-ttl: 1w cache-used: 78KiB

代码:选择所有
/ip/firewall/nat print标志:X - disabled, I - invalid;D -动态0;;;defconf: masquerade chain=srcnat action=masquerade out-interface-list=WAN ipsec-policy=out,none 1 chain=dstnat action=redirect protocol=tcp dst-port=53 log=no log-prefix="" 3;;允许容器访问互联网chain=srcnat action=masquerade src-address=172.17.0.0/24 log=no log-prefix=""

下面是默认设置旁边的防火墙过滤规则:
代码:选择所有
/ip/firewall/filter print标志:X - disabled, I - invalid;D -动态13;;;自定义规则-删除DNS查询链=输出动作=删除协议=tcp dst-port=53日志=无日志-prefix="" 14;;自定义规则-删除DNS查询链=输出动作=删除协议=udp - dst-port=53日志=无日志-prefix=""
antonsb
雷竞技网站MikroTik支持
雷竞技网站MikroTik支持
职位: 344
加入: 2016年7月24日星期日下午3:12
地点:里加,拉脱维亚

回复:DNS不能在路由器上通过HTTPS设置的DNS容器中工作

2023年3月9日星期四上午11:05

谢谢你的报道。这是一个已知的问题-自动“服务器”字段传递到容器,但在DOH的情况下,这个字段不存在,为了快速修复设置/更改DNS在容器设置为路由器DNS IP地址-
/container/set dns=192.168.88.1
axe3
刚刚加入了
主题作者
职位: 3.
加入: 2023年3月8日星期三下午1:54

回复:DNS不能在路由器上通过HTTPS设置的DNS容器中工作

2023年3月9日星期四晚上11:51

感谢您对这个问题的承认。我尝试了建议的解决方案,但不幸的是它没有工作-我仍然得到相同的日志信息:“ping:坏地址'google.com'”。还有其他的想法或建议吗?
代码:选择所有
/容器打印0;;;Test ping google.com name="40398a4c-a9d1-4dda-8d29-98a856360dc1" tag="library/alpine:latest" os="linux" arch="arm" interface=veth1 cmd="ping google.com" mounts="" dns=192.168.8.1 logging=yes status=stopped .
注意:我的路由器的IP是192.168.8.1(不是192.168.88.1):
代码:选择所有
/ip/ print标志:D - DYNAMIC列:address, NETWORK, INTERFACE # address NETWORK INTERFACE;;Defconf 0 192.168.8.1/24 192.168.8.0网桥
用户头像
Amm0
论坛专家
论坛专家
职位: 1553
加入: 2016年5月1日星期日下午7:12
地点:加州

回复:DNS不能在路由器上通过HTTPS设置的DNS容器中工作

2023年3月10日星期五上午12:10

感谢您对这个问题的承认。我尝试了建议的解决方案,但不幸的是它没有工作-我仍然得到相同的日志信息:“ping:坏地址'google.com'”。还有其他的想法或建议吗?
可能是您的防火墙阻止了从容器IP到DNS IP的流量。如果您将容器的VETH添加到LAN接口列表中,那么这可能是快速测试。

此外,假设您在/ip/dns中启用了“允许远程请求”,但这也是工作所必需的。

最后,也可能是Alpine没有接收到DNS IP。如果你在运行时输入"tail -f /dev/null",进入/container [find] shell,查看do a "cat /etc/resolv.conf",看看它是否真的从RouterOS获取DNS服务器。l雷竞技
axe3
刚刚加入了
主题作者
职位: 3.
加入: 2023年3月8日星期三下午1:54

回复:DNS不能在路由器上通过HTTPS设置的DNS容器中工作

2023年3月13日星期一下午2:18

此外,假设您在/ip/dns中启用了“允许远程请求”,但这也是工作所必需的。
我已经有了。

可能是您的防火墙阻止了从容器IP到DNS IP的流量。如果您将容器的VETH添加到LAN接口列表中,那么这可能是快速测试。
谢谢你的建议,我偶然发现了一个可行的解决方案。我试着按你的建议去做,但不小心加了集装箱桥(而不是容器VETH)到LAN接口列表,这使容器能够使用容器设置中指定的DNS,因此DoH现在也适用于容器!
一旦我意识到我的错误,我也尝试在局域网接口列表中使用容器VETH而不是桥接,但这不起作用-与我在原始问题中描述的相同的DNS失败记录。

所以是防火墙阻止了来自容器的DNS请求,就像你建议的那样Amm0-我检查了它使用日志记录,特别是默认规则,以放弃所有非局域网流量:
代码:选择所有
/ip/firewall/filter print标志:X - disabled, I - invalid;D -动态6;;;defconf:删除所有不来自局域网链=输入动作=删除in-interface-list=!局域网
不需要改变这个。


所以,对碰到这个问题的人总结一下,两者都有antonsbAmm0建议是相关的,使这个设置工作(假设你已经有DoH设置和容器根据microrotik的youtube教程启用):雷竞技网站
1.在容器设置中将DNS设置为路由器的DNS IP -期待这个问题在即将发布的版本中得到解决antonsb建议
2.将容器网桥接口添加到LAN接口列表中,因为默认防火墙设置很可能会阻止从容器IP到路由器DNS IP的流量

下面是接口列表的样子(在我的例子中,我将容器桥命名为“容器”而不是“dockers”,与视频相比,这个命名对我来说更清晰):
代码:选择所有
/interface/list/member / print Columns: list, interface # list interface;;defconf 0局域网网桥;;;defconf 1 WAN lte1;;容器:将容器网桥放在局域网接口列表中,以便防火墙允许来自容器的DNS请求;正如论坛2上建议的那样
用户头像
Amm0
论坛专家
论坛专家
职位: 1553
加入: 2016年5月1日星期日下午7:12
地点:加州

回复:DNS不能在路由器上通过HTTPS设置的DNS容器中工作

2023年3月13日星期一下午4:27

是啊,好像是防火墙的问题。/container的dns/hostname/domainname设置似乎只是更新/etc/hosts和/etc/resolve.conf。Alpine的内置DNS解析非常有限(例如,它只使用UDP),以保持Alpine的小/高效。所以@antonsb让DoH通过microrotik DNS运行是完全正确的- DoH所需的代码只需要在一个地方。雷竞技网站

顺便说一句,你通常不需要一个“容器”桥接VETH。它可以独立存在,对于容器中的一些L3/IP服务器应用程序来说,这可能更容易,因为您可以通过端口转发和其他防火墙规则中的VETH来引用该容器实例。对于需要相互通信的多个容器,或者您有一些第二层的东西(例如,某人构建的漂亮的netinstall容器),需要桥接。
用户头像
anav
论坛专家
论坛专家
职位: 16011
加入: 2018年2月18日星期日晚上11:28
地点:加拿大新斯科舍省
联系人:

回复:DNS不能在路由器上通过HTTPS设置的DNS容器中工作

2023年3月17日星期五凌晨3:39

你好,所以你使用容器的一些功能,但使用路由器本身的DOH。

Q1。你找到的解决方案,你的问题,意味着容器绕过DOH的DNS和去到路由器的DND,然后出去到互联网?
Q2。如果没有,您如何让容器流量通过DOH?

第三季。为什么不运行docker容器adguard,例如,而不是DOH?
第四季度。你能在一个docker/container中运行DOH和adguard吗?

我想问的是,如果两者都是好的,为什么我们不能同时使用这两种工具??
用户头像
Amm0
论坛专家
论坛专家
职位: 1553
加入: 2016年5月1日星期日下午7:12
地点:加州

回复:DNS不能在路由器上通过HTTPS设置的DNS容器中工作

2023年3月17日星期五下午4:22

@anvu,简短版:
这里的容器与DNS服务器无关。如果你认为当RouterOS要启动一个容器时,l雷竞技它需要设置IP地址/子网掩码/网关和DNS服务器。通常,容器不使用DHCP来获取它们的网络设置——所以容器内部的ip地址/netmask/gateway的VETH设置是什么。但是DNS如何在容器内工作,请参阅长版本以回答以下问题:


Q1。你找到的解决方案,你的问题,意味着容器绕过DOH的DNS和去到路由器的DND,然后出去到互联网?
OP没有在容器中运行DNS服务器。但是在容器中有一个Linux应用程序需要进行DNS查找。像任何服务器/桌面一样,它需要一个DNS服务器来使用。容器初始使用的DNS服务器由容器的RouterOS配置来配置。l雷竞技这可以在winbox中使用“DNS Server”为容器显式设置;如果为空,容器将使用路由器的DNS IP地址。如果您不使用DoH,这一切都很好。

这里的问题是,如果您没有为容器设置DNS,并且microtik DNS没有DNS服务器的IP地址,该怎么办?雷竞技网站如果RouterOS的DNS使用l雷竞技DoH,因为它没有DNS的IP地址,因为设置DoH服务器会取代任何IP服务器,就会发生这种情况。由于容器DNS设置只能是“常规”DNS(例如使用端口53,通常是UDP) IP地址,因此需要在容器设置中明确设置容器代码使用的DNS服务器IP。

但是容器也可以在安装之后修改它自己的配置,包括DNS。所以对于像Pi-Hole这样的东西,你通常会在这些容器的web GUI中设置上游DNS(或通过容器的环境变量)。

Q2。如果没有,您如何让容器流量通过DOH?
这个想法是常规的DNS在内部是好的。它实际上比DoH快。但是使用53端口上的常规DNS,查找的域名不会加密。这对于从容器到运行它的RouterOS的DNS查找来说不是问题。l雷竞技那么,为什么容器使用端口53作为RouterOS的DNS服务器呢?l雷竞技RouterOSl雷竞技的DNS在互联网上做DoH——在那里你会想要隐藏正在查找的域名。

(阿尔卑斯容器)-端口53/udp- > (Mikrotik DNS) -雷竞技网站端口443/tcp- > (Internet) -> DoH DNS服务器

第三季。为什么不运行docker容器adguard,例如,而不是DOH?
OP的案例不是关于容器是DNS服务器-它只需要一个上游的工作。但没有什么能阻止任何人运行第二个容器,运行Pi-Hole或Ad-Guard广告拦截。在这些容器的web GUI中,您可以设置上游DNS以使用DoH服务器。因此,Alpine容器(或ThingsBoard)可以使用位于另一个容器中的DNS服务器作为DNS服务器。如。

(阿尔卑斯容器)-端口53/udp- > (Pi-Hole DNS) -端口443/tcp- > (Internet) -> DoH DNS服务器

或者更间接地说,可以使用RouterOSl雷竞技 DNS,如OP中在Mikrotik DNS上游使用Pi-Hole/etc容器的情况所示雷竞技网站

(阿尔卑斯容器)-端口53/udp- > (Mikrotik DNS) -雷竞技网站端口53/udp- > (Pi-Hole DNS) -端口443/tcp- > (Internet) -> DoH DNS服务器

第四季度。你能在一个docker/container中运行DOH和adguard吗?
基本上你可以在adguard/pi-hole管理网页上设置DoH。这些会解决DoH问题。

Alpine是非常小的,所以它没有“直接”的DoH支持。但是其他基于“常规Linux”(如Ubuntu或Debian)的容器,您可以在容器中安装直接从容器进行DoH解析的包。这就是Pi-Hole(和其他广告拦截容器)所做的:

(Pi-Hole容器)——端口443/tcp——> (Internet)——> DoH DNS服务器

现在,如果你想让你的网络的其余部分使用广告拦截Ubuntu容器的IP地址作为DNS服务器,你可以在你的DHCP服务器的网络设置中将容器的IP地址作为DNS。

(局域网客户端做DNS) -端口53/udp- > (RouterOS的DNS) l雷竞技-端口53/udp- > (Pi-Hole容器)-端口443/tcp- >(互联网)-> DoH DNS服务器

但是在这种情况下,您确实需要配置防火墙。由于Pi-Hole/etc最初可能需要DNS,您可能需要显式地将Pi-Hole/etc的DNS服务器在容器设置中设置为真正的DNS服务器,如8.8.8.8,1.1.1.1,208.67.222.222.222或9.9.9.9,这取决于您的宗教信仰-您不能让Pi-Hole/etc指向Mikrotik DNS而Mikroitk DNS指向Pi-Hole。雷竞技网站


整体…就像警察看到的,容器的IP/VETH/网桥的防火墙可能会变得混乱和容易被删除,因为在默认情况下容器的网桥/VETH是默认的!“LAN”在/ip/firewall/filter中。

谁在线?

浏览本论坛的用户:萝卜2位客人