Portál AbcLinuxu, 12. května 2025 15:29
Popis problému
Firewall dělá nat z vnitřních adres 10.250.xxx.xxx do veřejné sítě 82.xxx.xxx.xxx pro uživatele. Všechno funguje, ale firewall nedokáže sám najít trasu pro veřejné ip. Tedy ping z vně i zevnitř je v pořádku, ale z lokalhostu firewalu ne. Na firewallu je smtp, které občas musí doručit zprávu na veřejou adresu uvnitř sítě.
Děkuji
firewall nedokáže sám najít trasu pro veřejné ip. Tedy ping z vně i zevnitř je v pořádku, ale z lokalhostu firewalu ne.
To tam asi máte dost divokou konfiguraci a něco jste přehlédl.
Takže si nejprve otestujte směrování (ip route get PROBLÉMOVÁ_ADRESA
), a pak si projděte packetový filtr (asi si tam nastrkejte pravidla s LOG), abyste zjistil, kde vám tyto packety zahazuje nebo je posílá jinam nebo jim špatně přepisuje adresy.
82.xxx.xxx.2 via 82.xxx.xxx.205 dev eth2 src 82.xxx.xxx.206
cache mtu 1500 advmss 1460 hoplimit 64
Uteče to ven na bránu poskytovatele v iptables to nebude. Spíš asi chybý routa, ale kam když síť není ani venku (eth2) ani vevnitr (eth1) ale jen v nat tabulce ?
Paket dojde na bránu, ale adresa existuje jen v nat na rozhraní není. Jestli paket z brány poskytovatele jde zpátky na firewall nevím, příjde mi to divný. Prostě potřebuju lokalhostu říct že ip 82.xxx.xxx.xxx je 10.xxx.xxx.xxx.
Paket dojde na bránu
Jakou bránu? Bránu vzhledem k vašemu firewallu, tedy na stroj poskytovatele?
ale adresa existuje jen v nat na rozhraní není
Jaká adresa na jakém rozhraní? Adresa brány, cílová adresa packetu?
Pokud jde o cílovou nebo zdrojovou adresu packetu, tak ta na žádném rozhraní být nemusí. Pouze všechny směrovače po cestě musí vědět, kam daný packet poslat (což se většinou rozlišuje podle cílové adresy packetu a směrovacích tabulek na daném routeru).
Jestli paket z brány poskytovatele jde zpátky na firewall nevím,
Stačí si pustit tcpdump na rozhraní firewallu směřujícího do brány poskytovatele.
Prostě potřebuju lokalhostu říct že ip 82.xxx.xxx.xxx je 10.xxx.xxx.xxx.
Stále nerozumím. Zkuste se vyjadřovat souvisle a bez zkratek. Adresy schovávat nemusíte, nikdo vám je neukradne. Nakreslete schéma nebo uveďte výpisy směrovacích tabulek.
Princip
Sít 82.208.32.32/26 je mapována na 82.208.83.204 což je můj server.
1) Poslu paket z intenetu na 82.208.32.33
2) Paket příjde na bránu 82.208.83.204
3) Na serveru je paket pro 82.208.32.33 přeložen na 10.250.0.2
4) Paket je doručen
Problém je když paket nepřichází z venku ale ze serveru.
1) Pošlu zprávu na schránku @domena.cz přes SMTP na 82.208.83.204
2) Server zjistí z DNS, že MX vede na adresu 82.208.32.33
3) Pošle paket na ip 82.208.32.33
4) Ip 82.208.32.33 není na rozhraní serveru
5) Ip 82.208.32.33 není ve vnitřní síti
6) Pošle paket na bránu provozovatele (82.208.83.205)
7) Paket už se nevrátí
IP jsou lehce upravené.
Už chápu.
Že se packet nevrátí od poskytovatele je způsobeno tím, jak on má nastavené své routery.
Pokud by se choval striktně podle pravidel RFC, tak by měl packet vrátit a zároveň odeslat ICMP zprávu typu redirect, která by byla adresována vašemu serveru a říkala by, že packety pro tuto adresu mají být příště směrovány jinudy a to přes váš server.
To samozřejmě není moc chytré, protože by se hrozil vznik směrovací smyčky (poskytovatel neví, že nějaké adresy přepisujete, a tak byste smyčku rozetnul), proto poskytovatel raději takové packety zahazuje.
Vy v podstatě potřebujete, aby se překládaly adresy i lokálně generovaným packetům.
Pravděpodobně máte DNAT pravidla v řetězci PREROUTING. Jenže packety generované lokálně neprocházejí řetězcem PREROUTING, nýbrž řetězcem OUTPUT (stále v tabulce nat). Citace z iptables(8) u popisu tabulky nat:
This table is consulted when a packet that creates a new connection is encountered. It consists of three built-ins: PREROUTING (for altering packets as soon as they come in), OUTPUT (for altering locally-generated packets before routing), and POSTROUTING (for altering packets as they are about to go out).
Takže ve vašem případě pomůže, když stejná pravidla DNAT, která překládají adresy v řetězci PREROUTING rovněž přidáte to řetězce OUTPUT.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.