Am un container DNS bind9 care rulează pe 10.64.128.53, care se află pe „serverele” rețelei docker de pe subrețeaua 10.64.128.0/24. asta merge bine si daca rulez:
nslookup google.com 10.64.128.53
Obțin rezultatul:
Server: 10.64.128.53
Adresa: 10.64.128.53#53
Răspuns neautorizat:
Nume: google.com
Adresa: 216.58.193.142
Când rulez aceeași comandă într-un container docker: docker run --rm -it --network servers --dns 10.64.128.53 alpine nslookup google.com 10.64.1 28.53
Obțin rezultatul:
Server: 10.64.128.53
Adresa: 10.64.128.53:53
Răspuns neautorizat:
Nume: google.com
Adresa: 216.58.193.142
Acest lucru este de așteptat
Acum, dacă alerg: docker run --rm -it --network servers --dns 10.64.128.53 alpine nslookup google.com
Obțin rezultatul:
nslookup: scrieți la „127.0.0.11”: conexiune refuzată
;; conexiunea a expirat; niciun server nu a putut fi atins
Acest lucru nu are prea mult sens pentru mine, deoarece am specificat serverul meu DNS docker, dar presupun că docker îl rulează printr-un proxy intern pe 127.0.0.11. Ar fi grozav dacă l-aș folosi, dar nu am nevoie de el. Cea mai bună soluție la care mă pot gândi este suprascrierea /etc/resolv.conf
cu serverul meu DNS, dar aceasta pare o soluție îngrozitoare. am vazut asta https://github.com/moby/moby/issues/19474#issuecomment-173093011 dar nu pot face asta să funcționeze în nftables, dar cred că aceasta este singura modalitate, deoarece se pare că serverul DNS docker necesită conexiuni de la 127.0.0.11:53
Gazda este Gentoo Linux, știu că rețeaua funcționează când este instalat iptables. Văd aceste erori în jurnalele dockers ori de câte ori pornesc un VM:
time="2022-01-25T03:08:56Z" level=warning msg="Nu s-a găsit iptables: exec: \"iptables\": fișierul executabil nu a fost găsit în $PATH"
time="2022-01-25T03:08:56Z" level=error msg="set up rule failed, [-t nat -I DOCKER_OUTPUT -d 127.0.0.11 -p udp --dport 53 -j DNAT --to- destinație 127.0.0.11:50360]"
time="2022-01-25T03:08:56Z" level=error msg="set up rule failed, [-t nat -I DOCKER_POSTROUTING -s 127.0.0.11 -p udp --sport 50360 -j SNAT --to- sursa :53]"
time="2022-01-25T03:08:56Z" level=error msg="set up rule failed, [-t nat -I DOCKER_OUTPUT -d 127.0.0.11 -p tcp --dport 53 -j DNAT --to- destinație 127.0.0.11:46531]"
time="2022-01-25T03:08:56Z" level=error msg="set up rule failed, [-t nat -I DOCKER_POSTROUTING -s 127.0.0.11 -p tcp --sport 46531 -j SNAT --to- sursa :53]"
De asemenea, văd această eroare de fiecare dată când încerc să rulez comenzile nslookup în containerele docker, dar nu sunt sigur cât de legată este:
time="2022-01-25T03:20:08.094540639Z" level=error msg="Handler pentru POST /v1.41/exec/d52b964c2e34acb78b67e5d2f02a8143e1efb3c45da02a8143e1efb3c45da09: containerul nu poate opri returnat6936fe1b345da09346fe1b:
Doar folosirea iptables nu este cu adevărat o soluție aici, vreau să fie pur nftables și asta nu pare nerezonabil.
Dacă am iptables care rulează, Docker DNS pare să funcționeze, dar nu există reguli adăugate la iptables. Nu înțeleg asta, de ce necesită iptables, dar nu face reguli?