Alvast excuses voor de ietwat vage topictitel, en de grote muur van tekst maar laat ik beginnen met een situatieschets:
In het rack waar wij onze servers hosten, hing tot voorkort een enkele linux-based mailserver (Mailserver 1). Nu zit er een tweede linux-based mailserver (Mailserver 2) aan te komen. Daarnaast hangt er nog een Bind DNS-server in het rack die authorative is voor flink aantal domeinen.
De servers hebben intern een private (192.168.x.x) adres, die via statische NAT mappings in de PIX firewall naar een extern IP gemapped worden. Ze kunnen elkaar uitstekend intern onderling bereiken. Het nadeel is dat dit tevens de enige manier is om elkaar te bereiken, want wanneer ze elkaar via hun externe IP willen bereiken wordt deze loopback (van binnen naar buiten naar binnen) niet toegelaten door de firewall. Dit is naar wat ik begrepen heb over de Cisco firewalls by design omdat een firewall geen router is in de optiek van Cisco.
Wat is het probleem
Wanneer mailserver 1 mail wenst te verzenden naar een mailserver die buiten het interne netwerk staat, zoekt de mailserver hiervan de MX records op door een query naar de DNS server te sturen op zijn interne adres. Hier krijgt de mailserver een extern IP terug en gaat keurig naar buiten, waarna de mail wordt afgeleverd.
In het geval dat mail bestemd is voor mailserver 2, zal er eveneens een lookup gedaan worden naar de lokale DNS-server, hier komt een extern IP terug, mailserver gaat naar buiten, wil weer terug naar binnen (om mailserver 2 te bereiken) maar mag dat niet. Gevolg: de mail kan niet afgeleverd worden.
Hoe zorg ik ervoor dat dit wel mogelijk is?
Om een paar voor de hand liggende zaken voor te zijn:
Gebruik interne adressen in de DNS en laat het over aan DNS rewriting van de PIX
In een ander datacenter hebben we een secundaire DNS-server staan die repliceert. Dit gebeurt door middel van zone transfers die noodgedwongen via TCP verlopen, wat niet door de PIX rewritten wordt waarmee de secundaire DNS server niet-rewritten DNS-data krijgt, waar deze niks mee kan en dan dus foutieve informatie zou uitgeven.
Gebruik hostfiles op de mailservers om de lokale domeinen af te vangen
Geen idee of dit ook zal werken voor MX records, maar het idee om enkele honderden mail-enabled domeinen handmatig in een hostfile te moeten zetten en daarvoor een dubbele administratie te moeten bijhouden zie ik niet eens een klein beetje niet zitten.
Gebruik een externe DNS server voor lookups vanaf de mailserver
Heeft niet de voorkeur. Hiermee wordt een extra afhankelijkheid gecreeerd naar een andere locatie om lokale mail-aflevering mogelijk te maken. Dit in combinatie met DNS-rewriting in de PIX zou een oplossing kunnen zijn omdat binnenkomende externe DNS-replies vertaald worden naar het interne adres door de PIX.
Mijn voorkeursoplossing zou in de richting zijn van door middel van iets als iptables/netfilter/rewriting een vaste set IP's de DNS-replies op de server zelf translaten, maar ik heb geen idee hoe dat op een goede manier te realiseren valt. En een /32-route in de routetabel erbij hacken is ook niet mijn idee van netjes.
Iemand een inzichtje hierin hoe ik dit rechttrek?
Outside | | Cisco PIX 506 | | Mailserver 2 --- Switch --- DNS Server | | Mailserver 1
In het rack waar wij onze servers hosten, hing tot voorkort een enkele linux-based mailserver (Mailserver 1). Nu zit er een tweede linux-based mailserver (Mailserver 2) aan te komen. Daarnaast hangt er nog een Bind DNS-server in het rack die authorative is voor flink aantal domeinen.
De servers hebben intern een private (192.168.x.x) adres, die via statische NAT mappings in de PIX firewall naar een extern IP gemapped worden. Ze kunnen elkaar uitstekend intern onderling bereiken. Het nadeel is dat dit tevens de enige manier is om elkaar te bereiken, want wanneer ze elkaar via hun externe IP willen bereiken wordt deze loopback (van binnen naar buiten naar binnen) niet toegelaten door de firewall. Dit is naar wat ik begrepen heb over de Cisco firewalls by design omdat een firewall geen router is in de optiek van Cisco.
Wat is het probleem
Wanneer mailserver 1 mail wenst te verzenden naar een mailserver die buiten het interne netwerk staat, zoekt de mailserver hiervan de MX records op door een query naar de DNS server te sturen op zijn interne adres. Hier krijgt de mailserver een extern IP terug en gaat keurig naar buiten, waarna de mail wordt afgeleverd.
In het geval dat mail bestemd is voor mailserver 2, zal er eveneens een lookup gedaan worden naar de lokale DNS-server, hier komt een extern IP terug, mailserver gaat naar buiten, wil weer terug naar binnen (om mailserver 2 te bereiken) maar mag dat niet. Gevolg: de mail kan niet afgeleverd worden.
Hoe zorg ik ervoor dat dit wel mogelijk is?
Om een paar voor de hand liggende zaken voor te zijn:
Gebruik interne adressen in de DNS en laat het over aan DNS rewriting van de PIX
In een ander datacenter hebben we een secundaire DNS-server staan die repliceert. Dit gebeurt door middel van zone transfers die noodgedwongen via TCP verlopen, wat niet door de PIX rewritten wordt waarmee de secundaire DNS server niet-rewritten DNS-data krijgt, waar deze niks mee kan en dan dus foutieve informatie zou uitgeven.
Gebruik hostfiles op de mailservers om de lokale domeinen af te vangen
Geen idee of dit ook zal werken voor MX records, maar het idee om enkele honderden mail-enabled domeinen handmatig in een hostfile te moeten zetten en daarvoor een dubbele administratie te moeten bijhouden zie ik niet eens een klein beetje niet zitten.
Gebruik een externe DNS server voor lookups vanaf de mailserver
Heeft niet de voorkeur. Hiermee wordt een extra afhankelijkheid gecreeerd naar een andere locatie om lokale mail-aflevering mogelijk te maken. Dit in combinatie met DNS-rewriting in de PIX zou een oplossing kunnen zijn omdat binnenkomende externe DNS-replies vertaald worden naar het interne adres door de PIX.
Mijn voorkeursoplossing zou in de richting zijn van door middel van iets als iptables/netfilter/rewriting een vaste set IP's de DNS-replies op de server zelf translaten, maar ik heb geen idee hoe dat op een goede manier te realiseren valt. En een /32-route in de routetabel erbij hacken is ook niet mijn idee van netjes.
Iemand een inzichtje hierin hoe ik dit rechttrek?
i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512