On Tue, 02 Dec 2014 15:56:28 +0100
Petr Spacek <pspa...@redhat.com> wrote:

> On 1.12.2014 17:12, Simo Sorce wrote:
> > On Mon, 01 Dec 2014 16:17:54 +0100
> > Petr Spacek <pspa...@redhat.com> wrote:
> > 
> >> On 14.11.2014 17:31, Petr Spacek wrote:
> >>> On 14.11.2014 02:22, Simo Sorce wrote:
> >>>> On Tue, 11 Nov 2014 16:29:51 +0100
> >>>> Petr Spacek <pspa...@redhat.com> wrote:
> >>>>
> >>>>> Hello,
> >>>>>
> >>>>> this thread is about RFE
> >>>>> "IPA servers when installed should register themselves in the
> >>>>> external DNS" https://fedorahosted.org/freeipa/ticket/4424
> >>>>>
> >>>>> It is not a complete design, just a raw idea.
> >>>>>
> >>>>>
> >>>>> Use case
> >>>>> ========
> >>>>> FreeIPA installation to a network with existing DNS
> >>>>> infrastructure + network administrator who is not willing to
> >>>>> add/maintain new DNS servers "just for FreeIPA".
> >>>>>
> >>>>>
> >>>>> High-level idea
> >>>>> ===============
> >>>>> - Transform dns* commands from FreeIPA framework to equivalent
> >>>>> "nsupdate" commands and send DNS updates to existing DNS
> >>>>> servers.
> >>>>> - Provide necessary encryption/signing keys to nsupdate.
> >>>>>
> >>>>>
> >>>>> 1) Integration to FreeIPA framework
> >>>>> ===================================
> >>>>> First of all, we need to decide if "external DNS integration"
> >>>>> can be used at the same time with FreeIPA-integrated DNS or not.
> >>>>> Side-question is what to do if a first server is installed with
> >>>>> external-DNS but another replica is being installed with
> >>>>> integrated-DNS and so on.
> >>>>
> >>>> I think being able to integrate with an external DNS is
> >>>> important, and not just at the server level, being able to
> >>>> distribute TSIG keys to client would be nice too, though a lot
> >>>> less important, than getting server integration..
> >>>
> >>> Using TSIG on many clients is very problematic. Keep in mind that
> >>> TSIG is basically HMAC computed using symmetric key so:
> >>> a) Every client would have to use the same key - this is a
> >>> security nightmare. b) We would have to distribute and maintain
> >>> many keys for many^2 clients, which is an administrative
> >>> nightmare.
> >>>
> >>> For *clients* I would rather stay with GSS-TSIG which is much more
> >>> manageable because we can use Kerberos trust and Keytab
> >>> distribution is already solved by ipa-client-install.
> >>>
> >>> Alternative for clients would be to use FreeIPA server as proxy
> >>> which encapsulates TSIG keys and issues update requests on behalf
> >>> of clients. This would be FreeIPA-specific but any
> >>> TSIG-distribution mechanism will be FreeIPA-specific anyway.
> >>>
> >>> TSIG standard explicitly says that there is no standardized
> >>> distribution mechanism.
> >>>
> >>>>> In other words, the question is if current "dns.py" plugin
> >>>>> shipped with FreeIPA framework should be:
> >>>>>
> >>>>> a) Extended dns.py with dnsexternal-* commands
> >>>>> ----------------------------------------------
> >>>>> Disadvantages:
> >>>>> - It complicate FreeIPA DNS interface which is a complex beast
> >>>>> even now.
> >>>>> - We would have add condition to every DNS API call in
> >>>>> installers which would increase horribleness of the installer
> >>>>> code even more (or add another layer of abstraction...).
> >>>>
> >>>> I agree having a special command is undesirable.
> >>>>>
> >>>>> - I don't see a point in using integrated-DNS with external-DNS
> >>>>> at the same time. To use integrated-DNS you have to get a
> >>>>> proper DNS delegation from parent domain - and if you can get
> >>>>> the delegation then there is no point in using external DNS ...
> >>>>
> >>>> I disagree on this point, it makes a lot of sense to have some
> >>>> zones maintained by IPA and ... some not.
> >>>>
> >>>>> Advantages:
> >>>>> - You can use external & integrated DNS at the same time.
> >>>>
> >>>> We can achieve the same w/o a new ipa level command.
> >>>
> >>> This needs to be decided by FreeIPA framework experts ...
> >>>
> >>> Petr^3 came up with clever 'proxy' idea for IPA-commands. This
> >>> proxy would provide all ipa dns* commands and dispatch user-issued
> >>> commands to appropriate FreeIPA-plugin (internal-dns or
> >>> external-dns). This decision could depend on some values in LDAP.
> >>>
> >>>>> b) Replace dns.py with another implementation of current
> >>>>> dnszone-* & dnsrecord-* API.
> >>>>> ---------------------------------------------------------------------
> >>>>> This seems like a cleaner approach to me. It could be shipped as
> >>>>> ipa-server-dns-external package (opposed to "standard"
> >>>>> ipa-server-dns package).
> >>>>>
> >>>>> Advantages:
> >>>>> - It could seamlessly work with FreeIPA client installer because
> >>>>> the dns*->nsupdate command transformation would be done on
> >>>>> FreeIPA server and client doesn't need to know about it.
> >>>>> - Does not require re-training/not much new documentation
> >>>>> because commands are the same.
> >>>>>
> >>>>> Disadvantages:
> >>>>> - You can't use integrated & external DNS at the same time (but
> >>>>> I don't think it justifies the added complexity).
> >>>>
> >>>> I disagree.
> >>>>
> >>>> One of the reason to use a mix is to allow smooth migrations
> >>>> where zones are moved into (or out of) IPA one by one.
> >>>
> >>> Good point, I agree. I will focus on supporting both (internal and
> >>> external) DNS at the same time.
> >>>
> >>>>> Petr^3 or anyone else, what do you propose?
> >>>>
> >>>> I think what I'd like to see is to be able to configure a DNS
> >>>> zone in LDAP and mark it external.
> >>>> The zone would held the TSIG keys necessary to perform DNS
> >>>> updates.
> >>>>
> >>>> When the regular ipa dnsrecord-add etc... commands are called,
> >>>> the framework detects that the zone is "external", fewttches the
> >>>> TSIG key (if the user has access to it) and spawn an nsupdate
> >>>> command that will perform the update against whatever DNS server
> >>>> is authoritative for the zone.
> >>>>
> >>>> Some commands may be disabled if the zone is external and
> >>>> appropriate errors would be returned.
> >>>
> >>> Correct, this will be inevitable.
> >>>
> >>>>> 2) Authentication to external DNS server/keys
> >>>>> =============================================
> >>>>> This is separate problem from FreeIPA framework integration.
> >>>>> We will have to somehow store raw symmetric keys (for DNS TSIG)
> >>>>> or keytabs (for DNS GSS-TSIG) and distribute them somehow to
> >>>>> replicas so every replica can update DNS records as necessary.
> >>>>
> >>>> For TSIG keys I think we should just store them in a LDAP record,
> >>>> see above.
> >>>
> >>> Without any encryption? Am I missing something?
> >>>
> >>>> For keytabs we can simply store them just like any  other
> >>>> kerberos key if we really need it (in a trust case for example,
> >>>> we may not need a new keytab, we may be allowed to use our own
> >>>> credentials through the trust. So we'll need to explore a bit
> >>>> how to properly express that in configuration. REtrieval ok
> >>>> keytabs is then just a matter of running ipa-getkeytab -r on the
> >>>> replica that needs it.
> >>>>
> >>>>> This will be the funny part because in case of AD trusts we have
> >>>>> chicken-egg problem. You need to establish trust to get ticket
> >>>>> for DNS/dc1.ad.example@AD principal but you can't (I guess)
> >>>>> establish trust until proper DNS records are in place ...
> >>>>
> >>>> No, in this case we should create the records at trust
> >>>> establishment time using the admin credentials we have been
> >>>> provided. NO chicken-egg issue.
> >>>
> >>> Sorry, we surely *have* a chicken-egg issue because
> >>> ipa-server-install is completely separate step from from
> >>> ipa-adtrust-install which is completely separate from ipa
> >>> trust-add. (And there is nothing which forces user to establish AD
> >>> trust right after ipa-server-install finished.)
> >>>
> >>> Also, in some cases it is not possible to use the same credentials
> >>> for trust establishment and for DNS updates on AD. Think about
> >>> one-way trust or possibly two-way trust but established using
> >>> pre-shared trust secret (which is AFAIK not usable for kinit).
> >>>
> >>> Alexander, could you clarify if it is possible to create an AD
> >>> trust *without* DNS records for FreeIPA side of the trust?
> >>>
> >>> Another problem is that reliance on AD trusts would effectively
> >>> prevent interoperability with non-AD DNS servers (think Infoblox
> >>> or standard BIND).
> >>>
> >>> I tend to think that we will need to obtain credentials (AD
> >>> login/pass/keytab/TSIG key) as one of ipa-server-install
> >>> parameters so all DNS updates can be done right away. This would
> >>> allow us have ipa-server-install script which in fact produces
> >>> *working* FreeIPA domain. In other cases ipa-server-install would
> >>> end but the FreeIPA domain would not be functional because of
> >>> missing records in DNS.
> >>>
> >>>>> For 'experimental' phase I would go with pre-populated CCcache,
> >>>>> i.e. admin will manually do kinit Administrator@AD and then run
> >>>>> FreeIPA installer.
> >>>>
> >>>> We already to this, so there is no need to invent anything here
> >>>> IMO.
> >>>
> >>> Except for cases mentioned above ...
> >>>
> >>>>> Maybe we can re-use trust secret somehow? I don't know, I will
> >>>>> reach out to AD experts with questions.
> >>>>>
> >>>>> This area needs more research but for now it seems feasible to
> >>>>> re-use DNSSEC key distribution system for TSIG keys and keytabs
> >>>>> so "only" the chicken-egg problem is left.
> >>>>>
> >>>>> This will need new LDAP schema but I will propose something when
> >>>>> I'm done with investigation.
> >>>>
> >>>> Please let me know if you agree with a new zone type as a way to
> >>>> "forward" updates.
> >>>
> >>> Generally I agree, it was my plan too. My main concern is not
> >>> about LDAP structure but about FreeIPA framework and about
> >>> workflow in general. It will be fun to extend the spaghetti code
> >>> we have ...
> >>
> >> Ping :-) I would like to move the discussion forward.
> >>
> >> Alexander, could you please comment on authentication to AD
> >> mentioned above?
> >>
> >> Simo and everybody else, what do you think about client use-case,
> >> i.e. forwarding DNS updates from FreeIPA clients to external DNS
> >> infrastructure? What about security implications (keeping in mind
> >> that TSIG keys are symmetric)?
> >>
> >> Would it be feasible to use FreeIPA server as XML-RPC->DNS proxy
> >> instead of nsupdate command (to hide TSIG key behind FreeIPA)?
> > 
> > Remind me this, when a client tries to update the DNS, does it
> > always contact its own DNS server first, or does it try to go
> > straight to the authoritative DNS server?
> 
> It should go straight to authoritative servers listed in NS records.
> 
> > I do not like the XML-RPC->DNS approach as it requires a special
> > client, leaving out the majority of clients.
> 
> Yes, it is an option of last resort (because I don't see a way how to
> be compatible with standard clients, see the point above).
> 
> > Also, I am thinking that we only _need_ to set infrastructure
> > relevant names (like IPA servers SRV records), but if someone
> > decides not to use IPA for the DNS we may decide that it is not our
> > responsibility to provide a full end-to-end client dns update
> > solution.
> 
> If we can agree on that then I'm fine with it.

Yes the more I think of it, the more I prefer to wait in trying to
solve the clients problem.

> > So I would concentrate on making it possible for IPA *Servers* to
> > use a private TSIG key to update infrastructure relevant names, and
> > possibly defer the clients side of the problem.
> 
> Speaking about native clients, two-way AD trust should nicely work
> with clients because clients could go straight to the AD and
> authenticate using host keytab from FreeIPA realm. It will not work
> in other cases but it is still better than nothing.

Yes, this has been accounted for.
 
> > We could use an internal bus on the server to allow the ipa
> > framework to use nsupdate w/o gaining direct access to the TSIG
> > key, this way admins can use ipa dnsrecod-add and friends w/o
> > exposing the key.
> 
> I agree with the idea but it depends on an authorization daemon you
> have proposed earlier (in different discussion). Do you see it as
> reasonable goal for FreeIPA 4.2 time-span?

I wouldn't say a definite no, but I am not confident we can.

> If the authorization daemon is too far away, would it be okay to
> support external DNS domains only for ipa* installers but do not
> support it for FreeIPA users? (I.e. basically store the key in HSM
> which is not accessible to users - that is what we do with DNSSEC
> keys now.)

Yes I think it would be fine as a first step.

Simo.

-- 
Simo Sorce * Red Hat, Inc * New York

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to