Překlad jednoho doménového názvu na IP adresu bez DNS

Nedávno jsem řešil zapeklitý problém, jak překládat dva doménové názvy z vnitřní sítě na dvě různé IP adresy.

Situace byla taková, že v síti s doménou (Windows Server 2008 R2 a doména řekněme domena.local) běží IIS a web na lokální IP adrese, řekněme 192.168.0.1. Doménový název webu je např. abcd.domena.cz. Z internetu je na routeru nastavený port forwarding na tuto IP adresu, tzn., že když venku napíšete abcd.domena.cz (která je překládána na vnější veřejnou adresu routeru), tak router požadavek přesměruje do vnitřní sítě na IIS. ale jak jistě víte, z vnitřní sítě se přes vnější rozhraní routeru (a zároveň jeho veřejnou IP adresu) dovnitř prostě nepřeroutujete. Normálně se to řeší přidáním nové forward zóny do DNS, takže ke stávající zóně domena.local přidáte ještě domena.cz, kde si můžete hrát s doménami 3. řádu a vytvořit A záznam např. pro abcd (a tedy abcd.domena.cz) na lokální IP adresu (v našem případě 192.168.0.1) nebo např. A záznam pro www (a tedy www.domena.cz) na nějakou vnější IP adresu.

Teoreticky by bylo vše bez problémů, jenže specifikem této sítě byly právě dvě domény 3. řádu, kde každá míří na jinou IP adresu, např. domena.cz (potažmo www.domena.cz) ven na veřejnou IP adresu webhostingu a druhá, např. abcd.domena.cz do vnitřní sítě na IIS a tedy adresu 192.168.0.1.

V microsoftím DNS je to dost problém, protože to zkrátka korektně nefunguje, resp. fungovat by to mohlo a mělo (a na 2012 serveru to mám několikrát vyzkoušené). Každopádně na 2008 R2 to nefunguje. Vždy se správně překládal jen jeden z názvů. Na důvod jsem nepřišel.

Nakonec jsem to obešel takovou zvláštní oklikou. Novou zónu domena.cz jsem nevytvářel a tudíž se název domena.cz překládal na vnější adresu v pořádku a bylo třeba nějakým způsobem přeložit název abcd.domena.cz na lokální IP adresu 192.168.0.1.

Řešení jsem našel v jedné diskusi:

Hello, I know this post is old but it can be done via Computer GPO.

  1. Put your desired hosts file \\ServerName\ShareName with everyone read access.
  2. Just create ChangeHosts.bat batch file with the following 2 lines:

ren c:\windows\system32\drivers\etc\hosts C:\windows\system32\drivers\etc\hosts_original
copy \\ServerName\ShareName\Hosts c:\windows\system32\drivers\etc\ /Y

Create Computer GPO with start up script (Computer Start up GPO is better than User login script as the users will NOT need Administrative privileges)

Reboot the computer – the desired hosts file should be working after Computer GPO executes.

If you have to revert back to Original – use batch file „Reverthosts.bat“ with following contents

del c:\windows\system32\drivers\etc\hosts
ren  C:\windows\system32\drivers\etc\hosts_original c:\windows\system32\drivers\etc\hosts

Pointa je v tom, že jsem upravil Hosts soubor a ten jsem pomocí GPO „podstrčil“ všem počítačům v doméně, čímž jsem pro ten jeden doménový název obešel serverové DNS (postup je v postu kurzívou). Stačilo přidat jeden řádek:

192.168.0.1      abcd.domena.cz

Není to úplně systémově čisté řešení, každopádně je funkční a to je podstatné.