ForeFront TMG 2010 und WPAD.DAT


Wer in der Vergangenheit auf seinem ISA 2006 die Funktion der Verwendung einer WPAD.DAT Datei eingesetzt hat, wird nach einer Migration auf den neuen TMG 2010 diese Funktion sicher auch weiter gern nutzen wollen.

So ging es auch einem meiner Kunden und die “Überraschung” war groß, als ich feststellen musste, dass diese Funktion zwar innerhalb des TMG 2010 sehr schön unterstützt wird…

image

…jedoch nicht wirklich sauber läuft.

Die im Bild dargestellte Eigenschaft – Dialogbox zeigt die Einstellungsmöglichkeiten innerhalb TMG 2010 für die zentrale Einstellung der Browser Settings von internen Clients (WebProxy Settings). Das funktioniert leider nur solange, wie man im internen Netz keine VPN Verbindungen zulässt. Wer kann schon sagen, dass das NIEMALS der Fall sein wird ?

Dann verhält sich TMG 2010 nämlich eigenartig. Hat man im TMG im Register “ForeFront TMG Client” den Proxyserver als WPAD Server eingestellt…

 

image

…und den Namen als FQDN angegeben, so sollte man annehmen, dass die Autodiscover Funktion auch den FQDN bei Anfragen von Clients liefert. Das tut diese Funktion leider nicht. Stattdessen wird die IP Adresse des Servers als Proxy Server Adresse geliefert.Wie bereits erwähnt, funktioniert das, solange noch keine VPN Verbindung von externen Clients über den TMG 2010 angebunden wurden. Sobald dies einmal geschieht, bezieht der VPN Client eine IP Adresse zumeist aus dem dedizierten oder internen DHCP Bereich des Netzes. Diese Adresse wird dann über das automatische Script zur Generierung des WPAD.DAT Files als Proxy Adresse des Netzwerkes eingetragen. Resultat ist, dass eine Verbindung ins Internet nicht mehr funktioniert.

Das ist ein “Known Issue”

(http://social.technet.microsoft.com/Forums/en/ForefrontedgeIA/thread/2c4e342f-0ab7-4cd7-b007-0f2b0c559704)

Aber es gibt auch eine Lösung dafür. Ein CScript ermöglicht das Verhalten des TMG 2010 zu beeinflussen und dem TMG 2010 beizubringen, den FQDN Namen des TMG 2010 als Proxy Server bei Autodiscover Anfragen zu liefern.

Da das Script leider nicht mehr unter den anzutreffenden Links verfügbar ist, hier das Script im Quelltext:

cnssystem.js
var iOK                  = 0;
var iNotFound            = 0x80070002;
var iNTD                 = 0xffffffff;
var fpcNameSystem_DNS    = 0;
var fpcNameSystem_WINS   = 1;
var fpcNameSystem_IP     = 2;
main();
function main()
{
    var oFpc = new ActiveXObject( "FPC.Root" );
    var oArray = oFpc.GetContainingArray();
    var oWebProxy = oArray.ArrayPolicy.WebProxy;
var arrNameSystem = new Array( "DNS", "WINS", "IP" );
    var szOption = WScript.Arguments.Named.Item( "Set" );
    var iOption = FindInSet( arrNameSystem, szOption );
if( "undefined" == typeof( szOption ) ||
        iNotFound == iOption )
    {
        ShowUsage();
        ShowCarpNameSystem( oWebProxy, arrNameSystem );
        return iOK;
    }
    ShowCarpNameSystem( oWebProxy, arrNameSystem );
    if( iNTD == SetCarpNameSystem( oWebProxy, arrNameSystem, iOption ) )
    {
        return iNTD;
    }
    oArray.Save();
    ShowCarpNameSystem( oWebProxy, arrNameSystem );
    WScript.Echo( "\r\nYou must restart the firewall service for this change to take effect." );
    return iOK;
}
function ShowCarpNameSystem( oWebProxy, arrNameSystem )
{
    var iCarpNameSystem = oWebProxy.CarpNameSystem;
    var szCarpName = (fpcNameSystem_IP == iCarpNameSystem)? " addresses": "-based names";
    WScript.Echo( "Array members are included in the WPAD script using " +
                  arrNameSystem[ iCarpNameSystem ] + szCarpName + "." )
}
function SetCarpNameSystem( oWebProxy, arrNameSystem, iCarpNameSystem )
{
    var szCarpName = (fpcNameSystem_IP == oWebProxy.CarpNameSystem)? " addresses": "-based names";
    if( iCarpNameSystem == oWebProxy.CarpNameSystem )
    {
        WScript.Echo( "Specified option is the same as the current setting; nothing to do." );
        return iNTD;
    }
    oWebProxy.CarpNameSystem = iCarpNameSystem;
    return iOK;
}
function FindInSet( arrRef, szItem )
{
    var iState = iNotFound;
    if( "undefined" == typeof(szItem) )
    {
        return iState;
    }
    for( var inx in arrRef )
    {
        if( szItem.toUpperCase() == arrRef[ inx ] )
        {
            iState = parseInt( inx );
            break;
        }
    }
    return iState;
}
function ShowUsage()
{
var szUsage = "-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-\r\n\r\n" +
"Script Actions:\r\n\r\n" +
"This script performs two general tasks:\r\n" +
                  "    1. reads and displays the current CarpNameSystem configuration\r\n" +
                  "    2. sets and displays the CarpNameSystem configuration\r\n\r\n" +
"Usage:\r\n\r\n" +
"    1. display only\r\n" +
                  "       cscript cnssystem.js \r\n" +
                  "    2. change the setting\r\n" +
                  "       cscript cnssystem.js /set:[DNS | WINS | IP]\r\n\r\n" +
"-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-\r\n\r\n";
    WScript.Echo( szUsage );
}

Das Script lässt sich mit Adminrechten an einer Eingabeaufforderung des TMG 2010 mit folgender Syntax starten:

Umschalten auf FQDN Namen

cscript cnssystem.js /set:DNS

Umschalten auf IP-Adresse

cscript cnssystem.js /set:IP

An dieser Stelle danke ich Herrn Ingo Jansen von “http://www.component-design.de/” ganz herzlich für den Quelltext, die Hilfe und die Erlaubnis dies hier zu beschreiben. Zwinkerndes Smiley

Hier finden sich noch ein paar weiter Quellen zum Problem:

http://social.technet.microsoft.com/Forums/en-US/ForefrontedgeVPN/thread/b4edb424-da6e-46e2-b1e3-19bdec0875e1/

http://blogs.technet.com/b/isablog/archive/2008/06/26/understanding-by-design-behavior-of-isa-server-2006-using-kerberos-authentication-for-web-proxy-requests-on-isa-server-2006-with-nlb.aspx

 

–Martin Schlenker

Advertisements

I am an independent IT Consultant focussing an Microsoft based technologies, mainly MS SharePoint MS Active Directory MS Office365 Training

Veröffentlicht in TMG2010

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: