OPNsense NAT Reflection (kérdések)?

Fórumok

Sziasztok!

Szombaton Zentyal-ról átálltunk OPNsense-re. Minden a - korábban letesztelt - elvárt módon működik egy dolgot kivéve. A belső hálózat gépeiről nem érhetők el a belső hálózatban lévő weboldalak publikus URL-lel (az internet felől elérhető a belső hálózatban lévő weboldal; a szükséges NAT > Port Forward szabály fel van véve).

Az OPNsense dokumentációjában olvastam a NAT Reflection-ról, de nem fordítottam nagy figyelmet rá, és nincs is túl sok információ ezzel kapcsolatban az OPNsense dokumentációjában.

A Firewall > Settings > Advanced oldalon a Network Address Translation részben az alábbi három beállítás közül, az elsőt és a harmadikat bejelölve, a belső hálózat gépeiről is elérhető publikus URL-lel a belső hálózatban lévő egyik weboldal:

  1. Reflection for port forwards
  2. Reflection for 1:1
  3. Automatic outbound NAT for Reflection

1. Kérdés: Ezt így kell / így a legjobb beállítani?

Azonban ezekkel a beállításokkal egyelőre csak a 80-as porton lévő weboldal érhető el. De ugyanazon a szerveren van egy másik weboldal is a 8080-as porton, és az nem érhető el (pedig a Firewall > NAT > Port Forward oldalon a 80 és a 8080-as portra is fel van véve a szabály).

2. Kérdés: Miért nem érhető el a 8080-as porton lévő weboldal a fenti beállítások mellett?

 

A pfSense oldalán találtam bővebb leírást: https://docs.netgate.com/pfsense/en/latest/recipes/port-forwards-from-l…

Itt írnak a DNS Split módszerről, amely "hasonló" lenne ahhoz, ahogy a Zentyal-on oldottam meg eddig (fel volt véve a külső publikus domain is a szükséges host / IP párral, ahol az IP-cím a belső privát címe volt a webszervernek), és ez annak ellenére működött, hogy nem a Zentyal volt a DNS szerver a hálózatban (igaz ez valószínűleg azért azért működhetett mert a Zentyal transzparens proxy volt).

3. Kérdés: A pfSense dokumentációban részletezett DNS Split módszer OPNsense esetén is beállítható, ha az OPNsense lenne a DNS forwarder a belső hálózatban lévő DNS szerver számára?

Hozzászólások

Én részemről split DNS-sel oldom meg ezt az utóbbi ~10 évben. Nagyon régen, kézzel írt FreeBSD pf.conf időkben csináltam utoljára készakarva reflection-t, utána valamiért inkább csak a szívás volt vele és akkor váltottam split DNS-re, azóta is ezt használom.

OPNsense-nél az utóbbi időben két dolgot olvastam, ami itt releváns lehet (nem saját tapasztalat): Az első, hogy alias-okkal operáltó NAT szabályokra nem feltétlen működik jól az automata reflection, ha az alias több mint egy portot jelöl meg. Minden portra legyen külön NAT szabály, kézi megadással vagy egy elemű alias-szal. A másik, hogy a NAT szabályban ne csak a WAN-ra legyen meg a szabály (mint forrás), mert úgy hiába a reflection, ha nincs meg utána a "normál" NAT szabály, ami LAN irányból is működik. Ezen felül ne legyen a NAT tisztán manual-ra állítva, mert akkor nem készülnek el a rendszer által generált szabályok. Vagy Automatic vagy Hybrid legyen a NAT.

Egyébként ha megnézed a valódi szabályok listáját (egy kicsit nehezen olvasható, mert minden random generált alias-okkal van megoldva, de nem lehetetlen értelmezni), akkor meg tudod keresni, hogy mi hiányzik a 8080 port esetén, ami a működő portoknál megvan, és akkor el tudsz indulni annak kinyomozásában, hogyan tudnál olyan konfigot előállítani, ami a 8080 portra is ugyan azt a tényleges pf szabályt generálja.

A pfSense dokumentációk legtöbbször nem relevánsak OPNsense esetén manapság. A forkoláskor (2015 magasságában) még volt sok átfedés, de azóta annyira más irányba megy az OPNsense fejlesztése, hogy a pfSense-re található megoldások nagyjából sohasem használhatóak. Elvek igen, konkrét megoldást biztosan más képernyőkön, más módon kell beállítani.

OPNsense esetén engedélyezd az Unbound-ot, abban tudsz felvenni host és domain override-ot, és ha ott felveszed az adott szervert a belső címével az érintett FQDN-t, és a kliensek (akár áttételesen is) az OPNsense Unbound-ján keresztül oldják fel a címeket, akkor teljesen jól működik a split DNS.

Ha va saját belső DNS szervered pl. egy tartományra (AD), akkor választhatod azt, hogy az a "fő" DNS és továbbítónak jelölöd meg az Unbound-ot, vagy lehet az Unbound a "fő" DNS és felveszed a saját tartományod a hozzá tartozó DNS szerver(ek)el, hogy azt rajtuk keresztül oldja fel, ne másfelé próbálkozzon. Mind a kettő működik.

Bocsánat, hogy eltérítem a topikot, de hátha nem teljesen offtopic:

opnsense, dyndns-t használok távoli hosztokkal való kapcsolatra. Emiatt a No-ip szolgáltatás néhány domain suffix-ét szeretném, ha változáskor gyorsan frissülne az új aktuális publikus IP-kkel. Ez alapból amúgy így is történik, mert tudtommal nem túl nagyok a TTL-ek a No-Ip féle "A" recordokban. Viszont szeretném, ha mellette a többi, ritkábban változó DNS recordnál az autoritativ válaszokban a TTL-t kicsit override-olni tudnám. Azaz kb. minden más nem-dynDNS forgalomnál. Így az unbound cache-nek lenne valami értelme is, hogy ne kelljen 15 percenként újra meg újra lekérdezni a gyakran használt FQDN-eket.

Emiatt unbound-ban beállítottam a TTL override-ot pl. 24órára. Viszont ez emiatt a dyndns-es no-ip domainekre is vonatkozik, ergo ha változás történik a publikus IP-ben, az csak kb. 1 nap múlva jut érvényre, ami viszont használhatatlanná teszi ezt az egész override-ot.

A megoldás az lenne, h. valami módon exception-ként venném fel az unbound konfigjába a No-ip jellemző domain suffix-jeit, és azoknál vagy hagynám a TTL-t az autoritativ szerverről jövő eredeti értékre beállni (ha lehet ilyen felülbírálással semmissé tenni a global konfigból jövő TTL override-ot, nem tudom nem jöttem rá), vagy csak szimplán kapna egy 15 perces TTL-t, az még elfogadható.

Na de ezt hol kellene opnsense unbound konfigba konkrétan beleverni? Úgy, hogy opnsense-unbound verzió-updatek során is megmaradjon! Tényleg érdekelne a megoldás, az unbound zona fájlok környékén kellene gondolom nézelődnöm, azaz a no-ip.com -os zónára kellene valami stub(?) bejegyzést felvennem, amiben csak a TTL-t adom meg én, minden más adatáért (SOA és tsai?) meg továbbra is menjen ki az internetre? Lehetséges egyáltalán ilyet megadni, az unbound képes így működni, vagy ez a DNS filozófia teljes megerőszakolása és egy dns szerver sem működik így a világon?

Mellékesen az opnsense-nek ez a legnagyobb nyavalyája: a szar semmi hiányos és felületes dokumentáció

Bevallom, sohasem jutott (és eztán sem fog szerintem) eszembe jutni, hogy a DNS rekordok TTL-jével variáljak. Így sohasem foglalkoztam azzal, hogyan lehetne.

Minden DNS bejegyzésnek (remélhetőleg jó okkal) annyi a TTL-je, amennyi. Nem is értem, miért kellene ezt változtatni, pláne növelni. Nyilván a zóna üzemeltető tudja, milyen gyakran változhat az RR, ehhez van TTL választva. Miért tudnám én jobban, hogy elég azt ritkábban frissíteni... Mi értelme a gyorstárnak akkor, ha készakarva érvénytelen tartalom van benne? Mert ugye nem tudhatom, hogy a zóna üzemeltetője váltzotatott-e az adaton, így akár érvénytelen is lehet az én cache-embe lévő megnövelt TTL-es RR, ami akár működési gondot is okozhat annál, aki erre támaszkodik.
Ha egy rekordot lekérdezel, akkor bekerül a helyi resolver cache-be, és ez a helyi resolver onnantól a TTL figyelembe vételével frissen tartja az értéket (a cache törléséig - pl. szolgáltatás restart) az internetről az authoratív szerverről (vagy ha forwarder-e van saját cache-sel, akkor onnan). Szóval a helyi resolver kliensei az adott bejegyzésre a választ mindig is a helyi gyorstárból kapják TTL-től függetlenül, a kérés az első lekérés után "sohasem" jut ki a publikus netre újból - tehát a gyorstár ellátja a feladatát. Egy filerendszer gyorstár is így működik, ha változás van a fájlrendszeren, akkor a cache is frissül, nem az adat előző verzióját adja random ideig... Ráadásul az automatikus frissítés miatt mindig érvényes választ kapnak a kliensek (akik helyben gyorstárazzák a választ, így a TTL alatt még csak a helyi resolvert sem kérdezik meg újra általában...). A frissítés egyébként nem TTL időnként, hanem annál sűrűbben történik, DNS resolver/kliens default vagy egyéáni beállítás függvényében.
Emiatt nincs olyan, hogy a cache értelmetlen, mert kicsi a TTL. Ha kicsi a TTL, akkor számítani lehet arra, hogy gyakran váltzik a rekord, nem értemes tovább érvényesnek tekinteni. A resolver szépen frissítgeti a TTL alapjána sajáét gyorstárát, a kliens meg midnig jó választ kap plusz internet forgalom genrálása nélkül. Ha ritkán változik, akkor hosszabb is szokott a TTL lenni (ez ugye nem zónánként, hanem RR-enként állítható...). A cache itt azt szolgálja, hogy a már egyszer keresett rekordok helyből megválaszolhatóak legyenek (és azok is). A DNS cache azért van, hogy az egyes DNS kérések ne fussanak végig a teljes érintett DNS struktúrán minden egyes alkalommal amikor valakit értedel a tartalma...

Az OPNsense doksija lehetne alaposabb valóban, de sokszor látom azt, hogy olyan hiányokat rónak fel sokan, ami hekkelés kategória, nem normál funkcionalitás/működés köre. Az OPNsense (ahogyan a pfSense meg a DDWRT, TrueNAS, OpenMediaVault, Proxmox VE és társaik) szerintem inkább appliance-ok, nem egy alap, szabadon piszkálható OS, rátelepítve némi GUI-val. Emiatt, amit nem tud a GUI-n, azt úgy kell tekinteni, hogy nem tudja... Lehet az issue tracker-ben feature-t kérni, amit ha kellően sokak éreznek hasznosnak, akkor megvalósul. Vagy meg lehet írni saját kezűleg, és egy PR keretében be lehet adni a közösbe.
Ilyen közösségi igényre való reakció volt pl. az, hogy az ACME plugin automatizációjába bekerült a frissített cert-ek másik gépre másolásának, és másik gép szolgáltatásának újraindítási lehetősége (mert sokan csinálják azt, hogy az OPNsense kezeli az LE certeket és teríti a belső hálózaton az érintett gépekre, amik valamiért nem tehetők HAproxy mögé). Szóval ha van olyan igényed, ami úgy tűnik többeknél felmerült de jelenleg nem megoldható a GUI-n keresztül, akkor ennél a projektnél van esélye a megvalósulásnak (sok szerencsét ugyan erre a pfSense esetében...).

A pfSense annyival jár előrébb doksi terén (látszólag), hogy nagyobb a követői bázisa, és nagyságrendekkel több "megoldás" kerül fel a netre a felmerülő problémákkal kapcsolatban. Namost tapasztalatom szerint ennek jó része vagy kapásból hibás (egy rossz megoldást szajkóz sok ember kipróbálás nélkül különböző felületeken), vagy csak bizonyos verzióra működő hekkelés. Összességében 6 év pfSense majd 8 év OPNsense használat után nem jelenteném ki kategorikusan, hogy utóbbi doksija érezhetően rosszabb/hányosabb lenne az előzőénél. (Ez egymáshoz viszonyítás, abszolut értékben azért hiányosak mindketten, vagy benne van csak nem elég érthetően/részletesen leírva.)

Én még eddig mindenre kaptam választ a doksiból, ami pedig ott nem volt elég részletes számomra (több plugin esetében van ilyen pl.), azt az eredeti szoftver doksija és az OPNsense felületen kint lévő opciók alapán meg tudtam oldani.

A konfig állományok kézi átirkálása valami cél érdekében egyik ilyen middleware által menedzselt rendszernél sem szokott jóra vezetni, nem csak az OPNsense esetén.

De, hogy a kérdésedre érdemi választ/megoldási lehetőséget mondjak, az OPNsense System/Settings/General lapon be lehet állítani, hogy "Do not use the local DNS service as a nameserver for this system", és akkor maga az OPNsense (és így a DDClient plugin) nem a helyi Unbound-ot használja DNS feloldásra, hanem a (ugyanezen lapon) beállított, vagy az ISP-től kapott névszervereket. Így el tudod érni azt az állapotot, hogy a klineseid az Unbound-tól a megtrükközött extra TTL-lel kezelt válaszokat kapják, ellenben maga az OPNsense hiteles DNS válaszokkal dolgozzon, a valódi TTL-ek alapján történő frissítésekkel.

Elfogadok mindent, igazad is van mindenben. De ne legyél már Raynes-zeller hibrid ;)

Csak annyit szeretnék, hogy hozzáadjak 3-4 db zónát az unbound konfighoz, és minden más menjen nagy TTL-el. Ha szar lesz tőle a netem, azonnal tudni fogom h. én voltam a hülye, és visszaveszem az override-ot. De a lehetőséget hagy kapja már meg az ember.

Opnsense doksik, meg filozófia kapcsán: összeraktak egy freebsd alapú disztribet, amihez csináltak egy többé-kevésbbe intuitív webes gui-t (megnézném hány ember restartolja véletlenül egy tetszőleges szervízt amikor refreshelni akarná annak a szervíznek a státusz oldalát, de megint csak én vagykk a hülye h. gui usability failure-nek gondolom a zöld play gombot), konfig menedzsmentet, package repository-t. Innentől kezdve ez sajnos egy ugyanolyan blackbox, mintha egy fortinet, checkpoint, palo alto, cisco, juniper vagy bármelyik másik cég tűzfalas dobozos termékét használnád. Kivéve h. ebből van free tier. Ha meg úgy akarod, ebből vehetsz fizetőset is, ahol kapsz majd supportot.

A gond ott van a blackbox szemlélettel, hogy onnantól ha nem szoftverfejlesztő mellette az ember, hanem csak használni akarná, akkor egyedül a doksira van utalva, ha bármit is szeretne rajta belőnni. Itt meg jön a falnak ütközés, mert nagyon sok minden olyan elnagyoltan van leírva (sokszornodabasznak 4-5 screenshotot, magxarázat meg nulla), hogy a blackbox működés semmis lesz: muszáj az unbound project leírásait magamévá tennem. Muszáj a strongswan borzalmaiban elmélyedni. Muszáj a pf doksijait felkutatni meg vmi jól megírt 600 oldalas paper book-ot megvenni hozzá, mert az opnsense tűzfal legfőbb komponenséről pont olyan ócska a leírás, mintha az a nyamvadt tűzfal komponens csak egy szükséges minimalista megvalósítás lenne benne, nem pedig ez lenne a lényege miért állít valaki üzembe egy opnsense-t futtató dobozt!

Röviden, muszáj az összes összelegózott toldozott-foldozott színfal mögé benézni, ha szinte bármit akarsz csinálni benne. Innentől meg bukott az alaposan összeintegrált egész, hanem az egyedi építőkockák típusát kell kideríteni, és aztán egyesével mindegyikhez keresni könyvet, ha boldogulni akarsz. Mert az opnsense.com leírásai a 2-eshez is édeskevesek.

Én csak 4,5 éve használom, de az opnsense doksik közül amik kritikusan szar állapotban vannak, a 4,5 év alatt szinte 1 sorral nem bővültek. Max ha jött egy major update, pl. ipsec-hez 23.1 óta vmi konfigfile átvariálás történt, arról került be egy nyulfarknyi bekezdés. Az meg h. site-2-site vagy roadwarrior leírások talán 2017-bem íródtak, mióta millió dolog változott, az meg látszólag senkit nem zavar. De nem akarok itt senkit megzavarni a valósággal, higgyen mindenki abba amilyen vallása van.

Sokszor olvasom ezt ettől-attól, de én sose tudom, hogy aki ezt látja, az miből rakja össze, hogy melyik user milyen. Mintha profilt építene a user-ekről sok másik user és a neve alapján azonnal meglenne a profil jellemző viselkedése. Én nem tudom sem Raynes sem zeller stílusát így felidézni, így nem tudom pontosan mely tulajdonságaik elegyét testesítem meg. :-D

Az open source projektek már csak azért sem lehetnek fekete dobozok, mert nyílt forrású komponensekből nyílt forrású rendszer van összerakva. Akit érdekel, belenézhez. Aki nem ért hozzá annyira, hogy belenézzen, annak meg mindegy, hogy OPNsense vagy TP-Link router, annyit használ belőle, amennyi a GUI-n van.

Az amit szeretnél - szerintem - teljesen felesleges. Azt gondolom, hogy ezért is nincs ilyen lehetőség az OPNsense felületén. Sőt, most, hogy beszélünk róla, már csak érdekesség okán is rákerestem a neten, hogyan és mivel is lehetne megvalósítani. Namost, ha egy üres FreeBSD vagy Debian rendszerem van, akkor sem tudnám gyorsan és egyszerűen megcsinálni amit írsz, kézi konfig szerkesztéssel, annyira nem "hétköznapi" igényed.

De amit írtam, hogy az OPNsense host tud a rajta futó Unbound-tól függetlenül névfeloldást végezni, az egy megoldás a konkrét problémára. Szóval valójában a kívánt eredmény mégis elérhető a GUI-n keresztül.

Az tény, hogy a restart gomb ott és abban a formában nagyon megtévesztő. Ennyi év után is olykor megnyomom frissítést várva...

A doksiról: persze kinek mi az elégséges és kinek mi a kevés. Nekem támpont kell, meg források, és összerakom magamnak fejben. De mivel nyílt forrású, simán lehet doksi fejlesztéssel is hozzájárulni a projekthez. Egy nyílt forrású projektnél, amit sok közreműködő a szabadidejében, ingyen (azaz inkább nem közvetlen anyagi haszonért) fejleszt, azon problémázni, hogy nem jó a doksi, nekem fura... Ki kell egészíteni, szívesen fogják venni szerintem. Persze nem kötelező ha nincs rá indíttatásod, de valójában nincs kinek a szemére hányni egy nyílt projektnél, amit ingyen használhatunk akár pénzkeresési célból is, hogy hiányos. Akinek tetszik, használja, akinek nem az vagy javít rajta, vagy keres egy jobban tetszőt. Ettől lesz jó annak aki használja, mert munkadíjban tudja realizálni a szükséges hozzáadott tudását (szomszéd Pistike nem tudja összekattintgatni, mint amit a Windows-ról hisznek, hogy össze tudják), amit a másik kifizet a jól dokumentált gyártói megoldásért.

De érdemes lenne megnézned egy Stormshield tűzfal dokumentációját, ami egy drága, zárt forrású, egyedi hardverrel szállított termékhez tartozik. Az a közös pont, hogy FreeBSD pf-re épül az alaprendszere. Na annak a doksija olyan, hogy "A 'felhasználói név' mezőbe kell írni a felhasználói nevet"... És ez az összes létező ablak össze lehetőségére ilyen szinten van leírva. Semmi kiegészítés, semmi magyarázat. Majd jól kifizeted a hozzáértést a terméket forgalmazó VAR-nak...
Szóval a doksi az IT azon területe amin sokszor a pénz sem segít, szar és használhatatlan ingyen is, meg drágán is. Így muszáj beleásni magad, vagy perkálni valaki másnak ugyan ezért.

Én pl. a GLPI-t szeretném használni osTicket helyett, de csapnivaló a magyar fordítása. Ami viszont elengedhetetlen, ha ügyfél felé is látszik. Így nekiálltam a magyarításnak, pontosabban anak javításának. Regeltem a megfelelő oldalon és szépen a GUI-t nézve írom át ami nincs lefordítva, vagy nem jól van lefordítva. Persze írhattam volna a dev listára, hogy szar a magyarítás, de valószínű ettől nem tudnám hamarabb használatba venni.

Az OPNsense pont azért lett forkolva a pfSense-ről, mert az szó szerint toldozott-foltozott (volt akkor, nem tudom most már jobb-e). Az elsődleges cél az UI elválasztása volt a működéstől (ugye a pfSense mennyi olalon írja ki, hogy ne menj más oldalra amíg a művelet fut, mert akkor megszakad...). Aztán szerintem mostanra jobban fejlődik mi a szülő projekt. A frissítése pl. köröket ver rá. A doksi valóban olyan amilyen, de gondolom jelenleg több programozó dolgozik rajta, mint doksi író, azért van így.

Most vettem észre, hogy anno nem válaszoltam. Köszönöm, hasznos volt a válaszod!

Végül a 8080-as porta is sikerült a port forward, a megoldás az volt, hogy a Firewall: Rules: LAN oldalon is engedélyezni kellett a LAN net irányból a 8080/TCP portot (a 80/TCP már korábban engedélyezve volt).