我已经停止使用 OpenVZ 几年了,现在我又回来了,我对增加的复杂性感到有些不知所措。我只是在这个简单的任务上停留了几个小时:
我想使用硬件节点作为我的本地 DNS 缓存全部容器类型(这种范例对我来说是新的)、主机和桥接。
我只有容器。
我已成功配置dnsmasq
为分别侦听br0
桥接virbr0
容器和仅主机容器的接口。我可以确认该步骤dig @interface <public host name>
并且有效。
什么不起作用:
- 任何容器中的名称解析超时
- ping 硬件节点地址没有回复
从硬件节点:
# prlsrvctl net list
Network ID Type Bound To Bridge Slave interfaces
Bridged bridged enp2s0 br0
Host-Only host-only virbr0
与virbr0: 10.37.130.2/24
和br0:192.168.xx.5/28
.
我已经运行了prlctl set <my test container @ 192.168.xx.4> --nameserver 10.37.130.2
,尽管它没有名称解析。
我认为我需要添加一条规则,iptables
但是,伙计,即使是本地进程也有很多规则!即使是常识也无济于事:我尝试添加一条规则以在两个接口的端口 53 上接受 UDP 数据包...没办法,还有其他东西。
只是不知道要破解什么:
- 不知道是否
dnsmasq
收到DNS请求 - 不知道有没有回复
- 我不知道响应是否被防火墙阻止。
tcpdump
无论我是否添加防火墙规则,这都是我的情况:
# tcpdump
tcpdump: WARNING: venet0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on venet0, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
23:03:20.876113 IP 192.168.xx.4.53894 > myhostname.local.domain: 32621+ A? google.com. (28)
23:03:25.875974 IP 192.168.xx.4.53894 > myhostname.local.domain: 32621+ A? google.com. (28)
^C
2 packets captured
2 packets received by filter
0 packets dropped by kernel
host google.com
当我从具有该命令的容器中执行简单操作时,会发生这种情况host
。
从那个容器:
# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=39 time=328 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=39 time=19.8 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=39 time=20.3 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=39 time=20.3 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=39 time=44.1 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=39 time=20.4 ms
^C
--- 8.8.8.8 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5002ms
rtt min/avg/max/mdev = 19.836/75.699/328.996/113.614 ms
那么为什么……防火墙会列出这些规则呢?
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
复杂得令人沮丧。