Fórum Root.cz
Hlavní témata => Sítě => Téma založeno: ighor 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
-
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.)
-
Co dalšího vyzkoušet?
Povolit forward.
-
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
-
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
-
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.