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
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.)
Citace od: rmrf kdy 04. 09. 2024, 09:53:14
Citace od: ighor kdy 04. 09. 2024, 09:27:14
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
Citace od: Filip Jirsák 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.)
Jestli myslíte na hostu:
tshark -i virbr0 udp port 94
tak nevidím
Citace od: ighor kdy 04. 09. 2024, 10:42:38
Citace od: Filip Jirsák 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.)
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.