routing közben eltünedező UDP csomagok

Fórumok

Már azt hittem, nagyon sok minden újat nem tud a linux mutatni nekem, pedig most sikerült.

Van egy 14.04-es ubuntu szerverem, amin van néhány interfész és virtuális bridge definiálva. Mindeközben az iptables nagy erőkkel DNATol, meg MASQUERADE-ol, nem beszélve a docker zombi bejegyzéseiről.

A rendszer mindeközben remekül működik, mígnem meguntam, hogy a TS3 szerver (ami jellemzően udp-n kommunikál) a vason fut, és belekergettem egy vm-ben egy dockerbe. Be is raktam a megfelelő PREROUTING szabályt, miszerint

iptables -t nat -I PREROUTING -p udp -i eth0 -d $public_ipv4 --dport 9987 -j DNAT --to 10.20.3.208

Közben VPN-en keresztül simán be tudok menni mind a belső IP címen. A külsőn csakazértis a régi szerver jelentkezik (ha nem fut a régi szerver, akkor természetesen nem sikerül csatlakozni). Nem úgy van, hogy mielőtt beérkezhetne lokálba a kapcsolat, megeszi a PREROUTING a nat táblában? Fellőttem egy másik porton is a port forwardot (--dport 9988 --to 10.20.3.208:9987). Természetesen ott lehet kapcsolódni, a 9987-en nem.

Aztán órákon keresztül hűlt a szolgáltatás (hiszen nem érkeztek be rá a csomagok, így az emberek rá is untak), majd egyszer csak csodák csodája elindult. Na nem mindenkinek, de a többségnek ment.

Már-már azt hittem, hogy valami connection tracking vagy egyéb mágia, de most meg a VPN-en keresztül akartam lekérdezni a libvirt által futtatott dnsmasq-tól egy vm IP címét. Az akárhányadik futtatás után megelégelte a rendszer, és többet nem volt hajlandó szóba állni a távoli klienssel. Ping megy, tcp megy minden további nélkül. Csak az udp53 nem hajlandó eljutni a céljához.

No itt aztán tényleg nincs semmi NAT és egyéb mágia. Van két hálózat (tap0 és virbr0), nincs közöttük semmiféle nat vagy filtering. Sőt, beraktam tesztből a PREROUTING meg a FORWARD elejébe egy-egy ACCEPT rule-t. Szépen látszik, hogy megjelenik egy csomag a PREROUTING rule-on, de a FORWARD-ra már nem jut a lendületből. A megfelelő tcpdump is csak annyit lát, hogy ami bejön az egyik interfészen, a másikra nem jut el.

Látott már valaki ilyet? Melyik részét kell csapdosni, hogy elmúljon?