Docker macvlan 丟棄 UDP (DNS) 流量,TCP 工作
我正在嘗試使用
macvlan
創建一個容器,它是我的 lan 上的一等公民。我使用的是靜態 IP(儘管我知道使用一些“技巧”也可以使用 DHCP)。
我知道它可以通過
host
網路來完成,但我計劃執行 2 個單獨的 DNS 容器,並且我希望它們每個都有不同的 IP,所以host
不是我正在尋找的解決方案。我的設置
有關我的網路和主機設置的詳細資訊:
- Unifi UGS 路由器,內部 IP:
192.168.1.254
- 網路遮罩:
192.168.1.0/24
- 主機作業系統:Ubuntu 20.04 LTS(Focal Fossa)
- Docker 版本 20.10.2,建構 20.10.2-0ubuntu1~20.04.2
- docker-compose 版本 1.28.5,建構 c4eb3a1f
br-lan
主機 IP 通過連接到我的乙太網埠的橋接介面(名為 )接收。我
[adguard-home][2]
用作測試容器的圖像,下面是 docker-compose 配置輸出:version: '3.7' networks: br-lan: driver: macvlan driver_opts: parent: br-lan ipam: config: - gateway: 192.168.1.254 subnet: 192.168.1.0/24 driver: default services: adguard: dns: # adguards default upstream DNS servers - 9.9.9.10 - 149.112.112.10 - 2620:fe::10 - 2620:fe::fe:10 image: adguard/adguardhome mac_address: '00:01:02:03:04:05:06:07' # Some randomized MAC address mem_limit: 500mb networks: br-lan: ipv4_address: 192.168.1.53 restart: unless-stopped volumes: - /etc/localtime:/etc/localtime:ro - /srv/adguard/data/conf:/opt/adguardhome/conf:rw - /srv/adguard/data/work:/opt/adguardhome/work:rw
什麼有效
這實際上適用於 TCP,我可以訪問 WebUI(埠 3000 和 80),並且只要通過 TCP 完成 DNS 查詢它就可以工作(tcp 埠 53)。
容器本身可以訪問網路,反過來容器可以被主機以及區域網路上的機器訪問。
什麼不起作用
UDP DNS 查詢失敗。
我怎麼測試?
在網路中的 Windows 10 機器上,我正在執行以下 PowerShell 命令:
# Default (UDP) DNS Query - Fails ❯ Resolve-DnsName -DnsOnly -Server 192.168.1.53 -Name stackoverflow.com # Test regular UDP DNS Query <# The Error output is Resolve-DnsName : stackoverflow.com : DNS name does not exist At line:1 char:1 + Resolve-DnsName -DnsOnly -Server 192.168.1.53 -Name stackoverflow.c ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ResourceUnavailable: (stackoverflow.com:String) [Resolve-DnsName], Win32Exception + FullyQualifiedErrorId : DNS_ERROR_RCODE_NAME_ERROR,Microsoft.DnsClient.Commands.ResolveDnsName #> # TCP DNS Query - works ❯ Resolve-DnsName -DnsOnly -Server 192.168.1.53 -Name stackoverflow.com -TcpOnly Name Type TTL Section IPAddress ---- ---- --- ------- --------- stackoverflow.com A 2507 Answer 151.101.65.69 stackoverflow.com A 2507 Answer 151.101.129.69 stackoverflow.com A 2507 Answer 151.101.193.69 stackoverflow.com A 2507 Answer 151.101.1.69
我的問題是什麼,為什麼我在這裡發帖?
我不明白為什麼在 TCP 工作時 UDP 會失敗。我對 UDP 的搜尋並
macvlan
沒有取得成果,我希望這裡的人能夠指導我如何解決這個問題,以便我可以辨識我的設計中的缺陷,或者解釋我可以做些什麼來解決這個問題。
看起來這個問題與我的網路設置有關。
重新啟動後,UDP 通信開始工作。
注意(與問題無關,但可能感興趣),預設情況下容器和主機之間的通信預設被阻止。
只是更多細節:我最終改用 ipvlan,效果更好。為了連接到主機(ipvlan 和 macvlan 塊),我添加了一個網橋並使用本地 ip(本地機器上的 hosts 文件解決了這個問題)。
原始問題沒有正確描述,因此稍後我將刪除此答案。
重啟不是解決方案。
我猜你的問題在重啟後解決了,因為防火牆服務的自動啟動沒有啟用,現在你的防火牆沒有啟動。
在 ubuntu 20 中,您可以使用 ufw 管理防火牆,並且必須將埠 53 添加到防火牆
sudo systemctl start ufw # start firewall service sudo systemctl enabled ufw # enable automatically start firewall service sudo ufw allow 53 # open tcp/udp dns port sudo ufw reload # apply firewall rule