Nefunguje dnat

Nefunguje dnat
« kdy: 04. 09. 2024, 09:27:14 »
Ahoj,
nikdy jsem si nemyslel, že na dnat udp portu strávím několik dní, ale stalo se :-)
Mám hostitele s aktuálním debianem 12.7. Jako firewall se používá nftables. /etc/alternatives/iptables -> /usr/sbin/iptables-nft
V něm pod libvirt 9 běží jako guest další debian 12.7. Bez firewallu. IP 192.168.122.2
Úkolem je přesměrovat UDP port z internetu do hostitele. Řekl bych triviální úkol, ale něco mi uniká.

Na guestu poslouchám pomocí: tshark udp port 94
Paket z hosta vidím:  echo a | netcat -u -p 94 192.168.122.2 94
Paket z interntu: echo a | netcat -u -p 94 IP_HOSTA 94 vidím na hostu, ale už ne na guestu

V nftables hosta mám pravidlo:
table ip my_nat {
        chain prerouting {
                type nat hook prerouting priority dstnat; policy accept;
                udp dport 94 log prefix "DNAT" flags all
                udp dport 94 dnat to 192.168.122.2:94
        }

        chain postrouting {
                type nat hook postrouting priority srcnat; policy accept;
        }
}

v journalctl -k | grep DNAT vidím:
... DNATIN=venet0 OUT= MACSRC=xxx MACDST=x MACPROTO=0800 SRC=TEST DST=IP_HOSTA LEN=30 TOS=0x00 PREC=0x00 TTL=56 ID=41461 DF PROTO=UDP SPT=94 DPT=94 LEN=10

Ale guest nic nevidí.

Co dalšího vyzkoušet?

Díky Ighor


Re:Nefunguje dnat
« Odpověď #1 kdy: 04. 09. 2024, 09:51:31 »
Podívejte se, jestli vidíte paket na odchozím rozhraní routeru. Zkontroloval bych, zda nemáte nějaké pravidlo na firewallu, které by blokovalo danou komunikaci. (Nezapomeňte, že DNAT se dělá v preroutingu, takže ve firewallu musíte počítat s modifikovaným paketem.)

rmrf

Re:Nefunguje dnat
« Odpověď #2 kdy: 04. 09. 2024, 09:53:14 »
Co dalšího vyzkoušet?

Povolit forward.

Re:Nefunguje dnat
« Odpověď #3 kdy: 04. 09. 2024, 10:40:06 »
Co dalšího vyzkoušet?

Povolit forward.

To jsem zapomněl napsat, ten je povolený. Nebo existuje ještě nějaké nastavení, které neznám?
# cat /proc/sys/net/ipv4/ip_forward
1

Re:Nefunguje dnat
« Odpověď #4 kdy: 04. 09. 2024, 10:42:38 »
Podívejte se, jestli vidíte paket na odchozím rozhraní routeru. Zkontroloval bych, zda nemáte nějaké pravidlo na firewallu, které by blokovalo danou komunikaci. (Nezapomeňte, že DNAT se dělá v preroutingu, takže ve firewallu musíte počítat s modifikovaným paketem.)

Jestli myslíte na hostu:
tshark -i virbr0 udp port 94
tak nevidím


Re:Nefunguje dnat
« Odpověď #5 kdy: 04. 09. 2024, 11:02:22 »
Podívejte se, jestli vidíte paket na odchozím rozhraní routeru. Zkontroloval bych, zda nemáte nějaké pravidlo na firewallu, které by blokovalo danou komunikaci. (Nezapomeňte, že DNAT se dělá v preroutingu, takže ve firewallu musíte počítat s modifikovaným paketem.)

Jestli myslíte na hostu:
tshark -i virbr0 udp port 94
tak nevidím

Zkontroloval jsem detailně ten guláš, co produkuje libvirt a narazil na:

chain LIBVIRT_FWI {
        oifname "virbr0" ip daddr 192.168.122.0/24 ct state related,established counter packets 8 bytes 716 accept
        oifname "virbr0" counter packets 66 bytes 2163 reject
}

to jsem vyřešil:
nft insert rule ip filter LIBVIRT_FWI udp dport 94 accept

Tím se to rozběhlo. Díky za nakopnutí správným směrem.