Exchange 2010 RC touches AdminSDHolder

I was just pointed to the blog of David Loder who’s pointing out that the Release Candidate of Exchange 2010 is changing the permissions enforced by AdminSDHolder to critical groups to allow Exchange Organizational Admins to change the group memberships of Enterprise Admins, Schema Admins, Domain Admins a.s.o.

OK, one of Microsoft Program Managers already responded, and I do agree that this is not a released product and pre-release versions are there for finding those bugs.

I’d just like to say:

@Ross: This is not that hard to fix:

  • for existing OUs stamp it on their ACE (preferably top-level – if inheritance is blocked on lower levels check and point to an KB
  • for new OUs change the defaultNtSecurityDescriptor of the OU-Class in the schema
  • don’t touch adminSdHolder 😉

The first one will make sure that existing OUs allow Exchange Admins to control Group memberships (actually I’d even like to discuss if this is necessary – usually group membership administration is not done in the same instance where groups are mail enabled – the first one would be a generic help-desk task, the second a Exchange-Admin task).

I’d also prefer – if OUs are touched – that if the organization decided to block security inheritance at one point that a new version of some software shouldn’t go beyond that point but respect the design but warn them about the consequences.

The second suggestion makes sure that new OUs will get the permissions by default when creating the OU.

The third suggestion makes me think about two things:

  • is there no process for infrastructure critical changes as changing the adminSdHolder (I’d think that the Active Directory Product Group should be involved if something as this is happening, how should they ensure security if other groups are mangling around with their mechanisms)?
  • why is this coming up in RC? If a product is at Release Candidate Level, it’s mostly finished and usually there are not this many changes approved afterwards (unless they are critical). I hope that this will be fixed!

Thanks David for finding this one, very interesting, and I hope it’ll be fixed!

See Davids Blog for his post

See my blog-post about AdminSdHolder


And since I wanted to mention this: if you are in Europe (or want to come), The Experts Conference (TEC) is in Berlin next week and it is THE place for Active Directory and Exchange.

Windows 7 and Windows Server 2008 R2 are finished

Windows Server 2008 R2 and Windows 7 were RTMd yesterday (June 22nd). Products are finished now, the code won’t be changed and the preparations for making them available via Download as well as producing the DVDs has started. Read the announcements on the official blogs:

The products will be available soon, depending on which channels:


  • MSDN/Technet: W7 Aug 6, R2 Aug 14
  • Partner Network: W7 Aug 16, R2 Aug 19
  • Action Pack: Aug 23 (W7 & R2)
  • Volume Licensing (SA): W7 Aug 7, R2 Aug 19

The Evaluation-Version of Windows Server 2008 will be available on August 20th on the following page:

Win7 will be available in stores Oktober 22nd, R2 on September 14th. The pre-order of Win7 is already running for a couple weeks.

Windows 7 will only be available in English on the Dates above, additional languages will follow early October. WS08R2 will be available in a couple languages such as English, German, Spanish,… and additional languages will be made available later in September.


I’m very excited to get the final version of both products, I’ve loved and used them in Production using the Release Candidate and can’t wait to install the final version instead! Congrats Microsoft!!! What a release!

Windows Server 2008 R2 (and Windows 7) availability

Hyper-Excited: Windows Server 2008 R2 and Windows 7 will be finalized in the second half of July, which is when they will become available for Partners and MSDN a.s.o., and broadly available (Stores, on new PCs a.s.o.) at the End of October!!!

Windows Server Division Weblog:

Windows 7 Teamblog:


A funny / sad comment about the economy

At TechEd USA in Los Angeles last week, Bill Veghte, Senior Vice President of Windows Business at Microsoft, made a comment which was funny but also sad:

I’m a technologist, so I can’t tell you where the economy will be in 6 month. A bad message is – a economist can’t tell you either.

Contacts displayed as containers

At TechEd I was staffing the Windows Server 2008 R2 Active Directory-Booth. We had a lot of interesting questions, scenarios and discussions there.

One interesting issue was a customer who asked us why his contacts in Active Directory are being displayed as containers and how he can take it off. Actually this took us some time to look into it. He had two forests – when he was targeting Active Directory-Users and –Computers against one forest, his contacts were displayed as containers (meaning there was a plus-symbol right next to it and you were able to see it in the tree, with no objects underneath). On the other forest the contacts weren’t displayed as container.

So we had to figure out what’s going on there. And what I’ve actually found is quite interesting, and I believe that more companies are running into this, so I found it worth documenting it on the web.

So what’s going on is that we found out the one forest was extended with the Windows Server 2008 Schema (adprep /forestprep) but the customer is still running Windows Server 2003 DCs. In the Schema of Windows Server 2003 by default there are not any objects who can be “underneath” a contact [1]. In the Windows Server 2008 Schema there are two new objects, which can be underneath a contact. Those are ms-net-ieee-80211-grouppolicy and ms-net-ieee-8023-grouppolicy. You can check this by querying the attribute allowedChildClassesEffective on a contact – this is a constructed attribute which is telling you which objects may be underneath the current object, more specifically which attributes the currently logged on user can create underneath the current object (taken permissions into credit). [2]

dsquery * “cn=My Contact,ou=…,dc=…” –scope base –properties allowedChildClassesEffective

In Powershellv2 (which ships with Windows Server 2008 R2 and in RSAT for Win7 (need to install, see [3]) you can use the following command (make sure that the Active Directory-Module is loaded, either use the shortcut or import-module ActiveDirectory):

get-adobject -identity "cn=My Contact,ou=…,dc=…" -properties allowedChildClassesEffective

In Active Directory-Users and –Computers there is an option in the view-menu which allows you to specify whether you’d like to see users, computers and groups as containers or not. In the version which ships with Windows Server 2008 (or is in the Remote Server Administration Tools of Vista and above) this setting is extended to behave on contacts as well. This setting is local to the computer and overrides any settings in the schema.

So apparently Active Directory-Users and –Computers is querying the schema, sees that contacts may contain other objects and is displaying them as containers, whether you’ve set the view-option or not (in Windows Server 2003 R2 and before) because is doesn’t apply to contacts. This is fixed with the versions which are shipping in Windows Server 2008 or RSAT for Vista and higher.

So if you extended the schema to Windows Server 2008 (R2), but your management consoles are still running on Windows Server 2003 (R2) / Windows XP and prior you’ll see contacts as containers.

There would be a workaround – there is a setting in the display specifiers which is modifying this behavior. It’s in cn=contact-display,cn=409,cn=display specifies,cn=configuration,dc… (your forest-root domain DN, you’ll also have to exchange the 409 with your language version, where 409 equals US-English, 407 would be German a.s.o.). So the workaround is to navigate to the contact-display object, then change the Value for the “treatAsLeaf”-attribute to TRUE (by default it’s <not set>) [4].

While this workaround will work, I wouldn’t actually recommend it, in my eyes the “bug” is not annoying enough that you’d change something in the configuration context. On the other hand, this setting is quite unimportant. So it’s up to you, however as soon as you start working with the Windows Server 2008 (R2) Management Consoles this wont annoy you anymore. So keep migrating 😉


[1] It’s actually not defined in the object what kind of objects can be underneath, but on the child-objects what possible superior it may have.

[2] IMHO Scripting or Programming Best-Practice would mean to query an object prior to creating a child-object for allowedChildClassesEffective to make sure that the current user has the right to create the object.

image[3] The Remote Server Administration Tools for Windows 7 include the Powershell Module for Active Directory. If you open the generic Powershell-Windows you’ll have to import-module ActiveDirectory first (there’s a shortcut installed in Administrative Tools which starts Powershell with this module loaded instead. Note that the PS-Provider relies on the Active Directory Webservice (ADWS), so you need one Windows Server 2008 R2 Domain Controller. ADWS is also announced to be available as Out-of-band Release/Hotfix for Windows Server 2003 and 3008, however this is currently not available. Win7 and WS2k8R2 are also just Release Candidates at this point, however I already want to mention how to do things using PSv2 since we have to get used to this in the AD-World (and it’s pretty impressive actually what you can do with it easily).

[4] Boolean Values in Active Directory are kind of weird – there are three states as opposed to two – either TRUE, FALSE or <not set> if the attribute is empty. Also the reason for a boolean value in general is to keep space limited, you only need one bit usually. However in AD the String of the Word TRUE or FALSE is stores.

Windows 7 and Windows Server 2008 R2 availability announced for the holiday season

image I do have to say that I’m super-excited – or as Mark Russinovich tries to introduce the term … “Hyper-Excited” (Mark: would this be Hyper-E? – just kidding).

Bill Veghte (Sr. Vice President, Windows Business, Microsoft) and Ian McDonald (General Manager for Windows Server at MS) have introduced this morning at TechEd in Los Angeles the availability for Windows 7 and Windows Server 2008 R2 before the holiday season, meaning that Ian’s kids will be able to get the server for christmas [;)].

I do love those OSs and their new features, working with them on all my machines and not using anything else anymore (apart from customer machines where they make me too). So I’ll blog more about this, and about TechEd especially during the week.

Can’t wait for Christmas now!

Rumors about AD-Snapshots

I’ve recently heard /read some rumors about AD-Snapshots. As I wrote before in Timetraveling Active Directory the new feature of Active Directory in Windows Server 2008 – AD-Snapshots or “the Database Mounting Tool” (how Microsoft calls the technology) how to look at a snapshot / backup can help you recovering data from older states of your Active Directory. I’ve also spoken about this and demoed it in my “A Directory Services Geek’s View on Active Directory Recovery in Windows Server 2008” which was so far presented at TechEd Europe 2007 in Barcelona, the German Windows Server 2008 Launch in Frankfurt, the Directory Experts Conference 2008 in Chicago, TechEd US 2008 in Orlando, and which will pre presented at ICE-Lingen (in Lingen [;)] at the end of August. I’ve also wrote articles about this in the IT-Administrator in March and April this year.

So some rumors:

  • a mounted Database will show you all partitions, however Microsoft only supports the domain partition, the other partitions are not supported.
  • As far as I know it is not supported to recover from snapshots at all, however it works but you have to script. As I mentioned the process is:
    1. Creating a snapshot with NTDSUtil (ntdsutil -> snapshot -> Activate Instance NTDS -> Create)
      Backing up the systemstate (wbadmin start systemstaterecovery -backuptarget:s:)
    2. Mounting a snapshot in the filesystem (ntdsutil -> snapshot -> list all -> mount xyz)
      Restoring the systemstate to an alternative location (wbadmin start systemstaterecovery –version:07/07/2008-14:41 –recoveryTarget:e:\recovery\)
    3. Starting the snapshot / restored NTDS.dit as Read-only directory (dsamain -dbpath c:\$snap…\ntds\ntds.dit -ldapport 10000)
    4. Reanimating the tombstone of the user(s) in question
    5. Getting back additional data out of the snapshot and into production using scripts or ldifde.exe, see my post about converting the LDIF: Converting LDIF-Files
    6. Fixing backlinks: This is not easily done using LDIFs. Remember that Backlinks are not writeable, so you have to retrieve the backlink, then update the forward-link in question. Using LDIFDE this would be hard to accomblish. Most of the time we mostly care about Group Memberships, then we can also use a one-line commandline:
    7. dsget user cn=Ulf,ou=Demo,dc=xyz,dc=com -s localhost:10002 -memberof 
      | dsmod group -addmbr cn=Ulf,ou=Demo,dc=xyz,dc=com
  • you could retrieve information from other partitions, but you’ll also have to script it and be aware that it’s not supported from Microsoft
  • One rumor I’ve recently read: Using ntdsutil to perform an authoritative restore without rebooting in Directory Service Restore Mode. This is also not supported. The only supported way to perform an authoritative restore is in DSRM. However I’ve talked to some of the developers, and they said it’ll work as long as you are rebooting instantly after performing the authoritative restore (to make sure that caches and everything is cleaned), so you can do it without DSRM (stopping AD, performing the non-authoritative and the authoritative restore, then rebooting the machine without restarting AD prior). However it’s not supported!!!!
  • There are tools out there to help you recovering from a snapshot:

If you speak German and you are unable to attend ICE you can see my session at the German Launchevent Online. If you attend ICE come there, the session has been updated [;)].

How many Infrastructure Masters do you have?

There are certain roles in Active Directory – which is a multi-master directory (meaning that every DC can write if he’s member of the domain) – which need a “single-master”, someone who takes care that certain things are only performed once and they are unique.

As we should know, there are five of those “Flexible Single Master Operations”-Masters (FSMOs) (however let’s not get into the discussion why they are called “Flexible” – back in the NT5-beta-days (beta of Windows 2000) they were even called “Floating”). Two which are unique in the forest, and three which are unique in the domain.

FSMOs per forest:

  • Schema-Master: guess what – someone has to be responsible updating the schema and making sure that it’s unique. What a surprise!
  • Domain Naming Master: Same for certain names in the forest, which need to be unique.

FSMOs per domain:

  • PDC-Emulator: the most complex and most important role. Not only reliable to replicate AD-content to NT4-BDCs (not in Windows Server 2008 anyways), but the PDC-Emulator is also the last instance of password changes, he’s targeted by the Group Policy Object Editor, takes care of AD-integrated DFS-Namespace, the PDC-E of the forest-root-domain is responsible for providing the right time to all members of the forest, a.s.o. He’s important, and you need him even if you don’t have NT4 in your domain anymore (hopefully – it’s gray-haired by now).
  • RID-Master: My favorite role, since he reminds me on your account managers at the Octoberfest. Every year we take a lot of customers to the Octobeerfest [;)]. Someone is assigned per table to get beer-coupons for everyone. If he’s running out he has to go to the account manager responsible to get another stack. The RID-Master is doing the same. He’s making sure that RID (the last part of the security-identifier) is unique per domain by giving every DC a stack of RIDs to issue, and if he’s running out of RIDs (meaning that his stack is half-empty / half-full) he’s requesting the next RID-Pool.
  • Infrastructure-Master: He’s the one who makes sure that cross-domain memberships are being taken care of (what a sentence). So what he’s really doing is comparing group-memberships and other cross-domain links against other domains (in the GC), and if some link is targeted at another domain in the forest he’s taking care to create a phantom so that all DCs know what the link-target is. Why is that – lets get out of the “bullet-points”.

If we look at the AD-Database (which is not being replicated – AD does take care of replication – the database is the local store per domain controller) there are two major tables in the database: the data-table and the link-table. Every row in the data-table is a single object, which is referenced by the “Distinguished Name Tag (DNT)”. This is a unique ID for each object in the database (per domain controller – across domain controllers it is very unlikely that the same object has the same DNT – as I said – replication is on the application layer and not on the Database-Layer). However, there is the link-table. The Link-Table is taking care of all links. So all group-members vs. user-member-ofs a.s.o. are stored there with their DNT. If the DC needs to enumerate group members, he’s simply searching in the link-table for the “link-source” and enumerates their targets, if he’s looking for the member-of information of a user he’s searching for the link-destination and enumerates their sources. Sounds logical? Hopefully.

But remember that groups (such as other links) may contain objects of other domains. How would we be able to reference those, they don’t have a row and don’t have a DNT in the domain database. That’s where the Infrastructure-Master kicks in. He’s taking care to create phantom-objects of objects which are referenced in a domain but which are from a foreign domain. So those objects are being created as “small version of those objects” in the domain where they are referenced. They are even smaller than the partitial attribute set which makes it into the Global Catalog. I’ve already blogged about the Global Catalog vs. Infrastructure Master dependency, so for this discussion go there. Also you can look at the Knowledgebase-Article “KB 248047: Phantoms, tombstones and the infrastructure master” on TechNet. The last parts about cross-domain references are the interesting ones in this context.

So how many FMSO-Role owners do we have in our forest?

  • There is one Schema-Master.
  • There is one Domain Naming Master.
  • The number of PDC-Emulators is the same than the number of domains.
  • The number of RID-Masters is the same than the number of domains.
  • The number of Infrastructure Masters is …

How many infrastructure masters do we have?

Most would say “as much as we have domains as well”. Wrong!

And that’s the interesting part – we do have one Infrastructure Master per domain, that’s correct. But – remember that Windows Server 2003 introduced Application Partitions? We would be able to have link-references (they could even be cross partitions, not even domains) in an application partition as well. However if the “Domain Infrastructure Master” wouldn’t hold a copy of the application partition (which has a separate and configurable replication scope – one of our customers has one application partition per site but cross-domain), how would he be able to take care of those cross-partition references? He wouldn’t be able to, there’s no way he could do this.

Therefor we have one infrastructure master per domain, plus one per application partition. So by default, if you have a Windows Server 2003 or higher forest with the default application partitions (for DNS, the forestDnsZones and domainDnsZones), let’s assume five domains, then you have:

  • 1 Schema Master
  • 1 Domain Naming Master
  • 5 PDC-Emulators
  • 5 RID-Masters
  • 11 Infrastructure Masters (5 Domain Infrastructure Masters + 1 for the forestDnsZones + 5 for the domainDnsZones of each domain – however they may reside on the same DC)

Where can I see the application partitions infrastructure masters?

To see where the IMs of the application partitions reside, you have to go into active directory with any tool like adsiedit.msc, ldp or whatever you prefer. Connect to the application partition, navigate to the cn=Infrastructure-object underneath the application partitions root, and look at the fSMORoleOwner-Attribute. It’s pointing to the NTDSSettings-Object of the server who currently holds the role. You can also use dsquery to do this:

dsquery * cn=Infrastructure,dc=domainDnsZones,dc=example,dc=com -attr fSMORoleOwner

If you want to figure out what partitions you have in the forest, you can use the following command:

dsquery * cn=partitions,cn=configuration,dc=example,dc=com -attr nCName

And if we only want application partitions, we add the filter (systemflags=5) which means that we are looking for all partitions which don’t replicate to the global catalog, which is the case for application partitions (Note: App-IMs may reside on GCs therefore [;)] ):

dsquery * cn=partitions,cn=configuration,dc=example,dc=com -filter "(systemflags=5)" -attr nCName

And for those of you who like small one-line commands, they can figure out who the infrastructure master is for all application partitions (as said, all in one line):

for /f %i in ('dsquery * "cn=partitions,cn=configuration,dc=example,dc=com"
-filter "(systemflags=5)" -attr nCName ^| find /v "nCName"') do
@echo %i && dsquery * cn=Infrastructure,%i -attr fSMORoleOwner

Have fun [;)]

But why do I care about application partitions infrastructure masters?

Actually I had a conversation about this in Redmond a couple years ago, that there’s a infrastructure master for every application partition. I had actually forgotten about this, until a collegue of mine told me about an issue when preparing your forest for Windows Server 2008 Read-Only Domain Controllers (RODCs).

If you want to prepare your forest for Windows Server 2008 Read-Only Domain Controllers, you have to run “adprep /rodcprep”. This command is setting permissions so that RODCs are able to replicate content. RODCs are not in the Domain Controllers Group, so by default they don’t have sufficient permissions. Since RODCs may hold Active Directory-integrated DNS-Zones, they are also required to have those permissions on the application partition. Since we cannot be sure that a certain DC holds all application partitions – for domainDnsZones that’s granted if you have multiple domains – and since it’s not granted that the domains Infrastructure Master holds the application partitions in this domain (e.g. if he’s not DNS-Server, he doesn’t hold the domainDnsZones of his own domain as well) Microsoft decided to target the IMs with this command (we are still at “adprep /rodcprep”).

Many companies have either reinstalled DCs or took DCs down. One of the DCs which has often been taken down is the first DC in the forest, either because he’s being updated from a previous OS or because it was old hardware, hardware-failures a.s.o. However, the first DC in the forest also holds the application partition infrastructure master (let’s introduce the acronym AP-IM and D-IM, second for the domains infrastructure master) for the forestDnsZones and for the domainDnsZones of the forest root domain. When administrators took down those DCs, they moved FSMOs because they know it’s the right thing to do. However, if you use either the MMCs or ntdsutil to move the FSMOs (KB 324801: How to view and transfer FSMO roles in Windows Server 2003 and KB 255504: Using Ntdsutil.exe to Seize or Transfer FSMO Roles to a Domain Controller) the AP-IM will not be moved automatically.

So it is very likely that a company has application partitions which do not have an infrastructure master, because the server is offline/removed and the role hasn’t been transferred.

Is it critical if the application partition infrastructure master is not available anymore?

No, in most cases it’s not. E.g. the default application partitions are used by DNS only, and only store the DNS-Zones and the dnsNode-Objects which reflect the records. They don’t use links, therefor there’s no need for an infrastructure master at those application partitions. However, you need to fix this for sure if you want to introduce Windows Server 2008 Read-Only Domain Controllers to be able to run “adprep /rodcprep”. You can either do this manually by simply changing the attribute fSMORoleOwner of the cn=Infrastructure,dc=<your-application-partitions-dn>-Object with the distinguishedName of the NTDSSettings-Object of the server who’s supposed to hold the role. The issue is also described in KB 949257: Error message when you run the “Adprep /rodcprep” command in Windows Server 2008: “Adprep could not contact a replica for partition DC=DomainDnsZones,DC=Contoso,DC=com” which also provides you with a VBScript to change the role owner.

IT-Administrator in Heidelberg

I’m writing for the German magazine IT-Administrator. Recently they’ve published an series about Windows Server 2008 and another about Active Directory-Recovery (in Windows Server 2008), and in August they’ll publish an article about Hyper-V from me.

Recently they’ve asked me if I could present a half-day Workshop in Heidelberg. Last Thursday we did this, and the day was exciting and interesting. A lot of good questions, a very interested audience, and I really enjoyed being there. Here are two pictures (and no – I wasn’t just sitting around – for some reason they took the pictures while I was demoing AD-Snapshots):

P1000044 (2) P1000046 P1000048

Why Clients don’t (need to) understand the concept of Read-Only Domain Controllers (RODC)

Hi There,


just back from TechEd, it’s time for some technical posts. So one of the questions I got very often is what you need in your infrastructure to deploy read-only Domain Controllers. Along with that question goes what Client-Version of the Operating System is needed that they are able to authenticate with an RODC.

What is a RODC?
The Read-Only Domain Controller is a new concept in Windows Server 2008. While a regular Domain Controller allows updates to the domain contents on each DC, an RODC is only receiving updates from Full DCs. He will not take any write requests. He is further not replicating any password or cached secrets. This distinguishes him from a NT4 Backup Domain Controller (BDC), who had all passwords stored locally. Also he is – in every other means – a full domain controller and LDAP-Server, also stores all GPOs in Sysvol. To allow offline operations (when the WAN to the RODC-Site is failing) Administrators are able to configure if certain users passwords are allowed to be cached, by putting them in a group which is in the allow list. There is also a group whos passwords are denied to be cached, even if they are in the allow list. List group contains by default certain administrative accounts, such as domain administrators, enterprise administrators, the operators groups a.s.o.
The RODC is built for the unsecured Branch-Office or for the DMZ/perimeter network, where you are either unable to ensure the physical security of a DC or where the environment is untrusted.

So the first thing you need is to prepare your existing infrastructure. The RODC is a Domain Controller, so you need to update the schema. Further the RODC needs some assistance from a Full-DC, so you need to deploy enough Full-DCs to allow replication to the RODCs. For most environments one Full DC should be sufficient (RODCs only replicate inbound, not outbound, which also increases performance and decreases replication traffic), however I’d always prefer a second one to allow redundancy. To prepare the schema you need to perform the forestprep and domainprep operations (adprep /forestprep and adprep /domainprep), if you want to deploy RODCs you also need to perform a adprep /rodcprep in every domain of the forest to allow a Global Catalog on the RODC. However you do not need a Windows Server 2008 DC in Domains where you don’t want to deploy RODCs. However two: there are other reasons why you should deploy Windows Server 2008 [;)].

But how do RODCs perform certain functions? They can take the role of a Global Catalog server and of a DNS-Server. If a client (member-servers might also be clients to Active Directory, even the domain controller itself – his OS – might be a client to AD) tries to write against an RODC the RODC is using LDAP write referrals to tell the Client that he is supposed to write to a different DC (a Full Windows Server 2008 DC). LDAP referrals have been defined e.g. in RFC 2551 back in 1997, so LDAP-applications should be able to follow them.

And how is a logon performed against the RODC? The user is actually performing the logon against the RODC. The RODC is looking in his local AD to verify whether or not he’s able to verify the users password. If he has no cached copy of the password he is forwarding the request to a full DC. Further he is requesting the full DC to replicate the password down to him, the full DC checks the allow- and deny-lists and decides whether or not to replicate the password down. The full DC further issues a kerberos ticket for the client. The RODC is informed that the client may log on, and the RODC is issuing his own kerberos ticket for the client. All other things of the logon process, such as compiling the token with group membership information and pulling down group policies is done against the RODC. If the user logs on another time, and the password is cached on the RODC, the RODC does not need to contact the full DC and is able to process the logon-request even if the WAN is offline.

The other thing are DNS updates. Clients in the Branch Office (or Remote Office how we prefer to call it nowadays) are supposed to use the local DNS-Server. However they might update their DNS-Records, which is totally acceptable. But if the RODC is not writeable, and DNS is stored in AD, and actually the DNS-Zones on a RODC are not writeable too, how are those updates performed. This answer is actually quite simple. We Windows Admins got spoiled over time, since our DNS-Servers – when the zone is stored in AD – allow updates on any DNS-Server which is also a DC and holds a copy of the AD-integrated Zone. However think back to the concepts of DNS. We always had a single primary DNS-Server who was able to write updates, and multiple secondaries who were just able to answer to queries. Clients who want to write in DNS had to request a SOA (start of authority) Record for the zone they want to write into. Full DCs who are DNS-Servers with an AD-integrated replica of the Zone were always answering with themselves as SOA (the SOA-Record only allows one Server, and there is only one SOA per Zone, as opposed to Nameserver (NS) Records where are multiple per DNS-Zone). RODCs don’t have an SOA for themselves, they hold a SOA which is stating the Name of a Full DC. So that is simple, Clients who want to write into DNS are still (same technology as in the 80th) querying the zone for it’s SOA, and then they are contacting the Server which is stated in the SOA to write the update. But RODCs provide some intelligence as well – if a client was contacting them for the SOA they wait for a moment to allow the client to update his record, then they are requesting a single-object-replication from the Full DC for the Clients DNS-Record so that the DNS-Information at the clients site is updated as soon as possible, while any other site will receive it with the regular replication.

So Clients / Memberservers and other machines should be able to run against RODCs. However, there are certain things which might affect this statement:

  • The Read-only partitial attribute set (RO-PAS): It is possible to define in the schema that certain attributes should not be replicated to RODCs. However the application needs to be aware of this, since those requests are not referred to a full DC.
  • Replication latencies: if an application is performing a write request it will be redirected to a full DC. If the application tries to read that data again before replication occurs, the RODC will still return the old data. If you want to make sure that your applications write against RODCs be aware of this issue, and look for a writeable DC when you perform write/readback-operations or make sure that you are not using write/readback (but stick against the RODC if you only perform read operations, otherwise you will slow down your application since it’s always crossing the WAN).
  • Firewalls: especially in DMZ-Scenarios your clients might not have a connectivity to a full DC, so write referrals will fail. Make sure that you don’t need write requests in those scenarios.
  • WAN-Offline: write operations will also fail in this scenario

I hope I was able to get some lights behind RODCs, theres a lot of more information available online, e.g. look at the following page: Application Compatibility with RODCs