[spring] 答复: SRv6 - SRH in encaps or base header - point 2

"Chengli (Cheng Li)" <chengli13@huawei.com> Mon, 05 November 2018 04:55 UTC

Return-Path: <chengli13@huawei.com>
X-Original-To: spring@ietfa.amsl.com
Delivered-To: spring@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 51984128CF2; Sun, 4 Nov 2018 20:55:26 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.601
X-Spam-Level:
X-Spam-Status: No, score=-2.601 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 8eSXhUcdJ5DW; Sun, 4 Nov 2018 20:55:23 -0800 (PST)
Received: from huawei.com (lhrrgout.huawei.com [185.176.76.210]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 59057128B14; Sun, 4 Nov 2018 20:55:23 -0800 (PST)
Received: from lhreml703-cah.china.huawei.com (unknown [172.18.7.108]) by Forcepoint Email with ESMTP id 5F87F88882329; Mon, 5 Nov 2018 04:55:20 +0000 (GMT)
Received: from DGGEML403-HUB.china.huawei.com (10.3.17.33) by lhreml703-cah.china.huawei.com (10.201.108.44) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 5 Nov 2018 04:55:21 +0000
Received: from DGGEML529-MBX.china.huawei.com ([169.254.6.70]) by DGGEML403-HUB.china.huawei.com ([fe80::74d9:c659:fbec:21fa%31]) with mapi id 14.03.0415.000; Mon, 5 Nov 2018 12:55:11 +0800
From: "Chengli (Cheng Li)" <chengli13@huawei.com>
To: "Darren Dukes (ddukes)" <ddukes@cisco.com>
CC: Joel Halpern <jmh@joelhalpern.com>, "spring@ietf.org" <spring@ietf.org>, "6man@ietf.org" <6man@ietf.org>, Lizhenbin <lizhenbin@huawei.com>, Mach Chen <mach.chen@huawei.com>
Thread-Topic: SRv6 - SRH in encaps or base header - point 2
Thread-Index: AQHUcIcsTbFeHZpwLku+NvhkEcQp5qU4pNnQgAOq8QCABFXpAA==
Date: Mon, 05 Nov 2018 04:55:11 +0000
Message-ID: <C7C2E1C43D652C4E9E49FE7517C236CB01A55ED5@dggeml529-mbx.china.huawei.com>
References: <42663f06-8fcc-4ca4-5e3c-368adcaaef86@joelhalpern.com> <A4FF775A-213D-46C3-93E5-180854097926@cisco.com> <69085e36-f091-44d5-590b-3550983ac4d7@joelhalpern.com> <AB652159-99AB-46C8-87B6-7A1020C1F880@cisco.com> <3e51b691-ae71-31ce-a094-db2d75d80ae0@joelhalpern.com> <728DADEC-AC49-4F16-93FB-4B5A6905DF59@cisco.com> <C7C2E1C43D652C4E9E49FE7517C236CB01A53E9D@dggeml529-mbx.china.huawei.com> <F607F766-6E9A-4B08-9F02-EECC1299FCCA@cisco.com>
In-Reply-To: <F607F766-6E9A-4B08-9F02-EECC1299FCCA@cisco.com>
Accept-Language: zh-CN, en-US
Content-Language: zh-CN
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-originating-ip: [10.126.175.168]
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-CFilter-Loop: Reflected
Archived-At: <https://mailarchive.ietf.org/arch/msg/spring/73esBV6CNYK669VpBC6Npk1h4qI>
Subject: [spring] 答复: SRv6 - SRH in encaps or base header - point 2
X-BeenThere: spring@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "Source Packet Routing in NetworkinG \(SPRING\)" <spring.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/spring>, <mailto:spring-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/spring/>
List-Post: <mailto:spring@ietf.org>
List-Help: <mailto:spring-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/spring>, <mailto:spring-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 05 Nov 2018 04:55:26 -0000

so how to use SRH insertion? Out of scope of this draft?

Cheng


-----邮件原件-----
发件人: Darren Dukes (ddukes) [mailto:ddukes@cisco.com] 
发送时间: 2018年11月3日 2:40
收件人: Chengli (Cheng Li) <chengli13@huawei.com>
抄送: Joel Halpern <jmh@joelhalpern.com>; spring@ietf.org; 6man@ietf.org; Lizhenbin <lizhenbin@huawei.com>; Mach Chen <mach.chen@huawei.com>
主题: Re: SRv6 - SRH in encaps or base header - point 2

Hello Cheng, thanks for the review!  Please see inline

> On Oct 30, 2018, at 11:41 PM, Chengli (IP Technology Research) <chengli13@huawei.com> wrote:
> 
> Hi Darren,
> 
> I think the text of encapsulating mode is clear for me. But I still have some questions of the insertion mode .
> 
> 1.1 :<dd> Node 9 has a choice, encapsulate to node 3 or not. 
> If node 9 does not encapsulate, it will inform the destination of the segments in the SRH and possibly leak them to intermediate nodes.
> 
> If there is not indicator to make a choice of encapsulating or not, how the node to make the choice? Local policy?  
> Or make it the same like the received packet? Encapsulate if received packet does, else, insert?

A host needs many things to determine how to add an SRH to a packet it is sending to a destination, at least it needs to learn SIDs for nodes and have some logic in place to determine how and when to use a particular segment list… That is well beyond this document and there is and will be more innovative ways of determining when to add a SRH to a packet sourced by a node.

Therefore I’ll say this question is not within scope for this document, it needs to be answered for specific use cases and applications of the SRH.

That said there is ongoing work to define how a node may learn an SR Policy:
PCEP https://www.ietf.org/id/draft-negi-pce-segment-routing-ipv6-03.txt,
BGP-TE https://www.ietf.org/id/draft-ietf-idr-segment-routing-te-policy-04.txt,
or “SDN” methods where some outside controller sets up a segment list via some REST, CLI, netconf/yang interface to satisfy specific use cases.

And when to use it:
BGP SRv6 services https://www.ietf.org/id/draft-dawra-idr-srv6-vpn-05.txt


> 
> 1.2 : How to inform the destination of the segments in the SRH?  Any indicator in SRH? Or through signaling? 
> 


Same answer as 1.1.  

> 2: Can a normal(non-SID) IPv6 address be added into SID list?
> 
> I prefer yes.
> 
> As section 4.3 says, it seems like we can do that.
> 
>   "When an SRv6-capable node receives an IPv6 packet, it performs a
>   longest-prefix-match lookup on the packets destination address.  This
>   lookup can return any of the following:
> 
>       A FIB entry that represents a locally instantiated SRv6 SID
>       A FIB entry that represents a local interface, not locally
>                                     instantiated as an SRv6 SID
>       A FIB entry that represents a non-local route
>       No Match
>      "
> Also, in section 5, we can see A9 can be added in SID list of a SR policy.
> 
> So for the packet from A9 to A1, the address of A1 can be added as the last entry of SID list, right? 
> 
> If yes, address of A1 is not an instantiated SID, so not PSP flavor can be enabled. So the packet will be sent out by carrying the SRH after A1 is updated to the IPv6 DA. 
> SRH will be leaked to outside of the SR domain, which will bring new security issues. 
> 

Yes as the last segment in a segment list, and as RFC8200 section 4.4 describes Routing Header processing when segments left is 0.

It is up to the specific use case to determine if informing the destination or intermediate nodes of the segment list used to reach it is a security risk. 

Certainly on the larger internet this is an issue that needs to be considered, but within an enterprise network or within a single providers network crossing multiple domains, or even between providers the disclosure may be acceptable or desired.

> 
> 3: For section 6.2,
>   Nodes outside the SR Domain cannot be trusted.  SR Domain Ingress
>   routers SHOULD discard packets destined to SIDs within the SR Domain
>   (regardless of the presence of an SRH) to avoid attacks on the SR
>   Domain as described and referenced in [RFC5095]. 
> 
>   As an additional
>   layer of protection, SR Segment Endpoint nodes SHOULD discard packets
>   destined to local SIDs from source addresses not part of the SR
>   Domain.
> 
> For a packet from A1 to A9,  the packet is (A1, A9). Node3 will not drop the packet since the destination is A9 not S9.
> 
> If node 3 insert a SRH in the original IPv6 packet, then the source Address will be A1. And the SID list can be  <A9, S6 >.
> In this case, the packet will be dropped by node 6, since the source address is not part of the SR domain.  [Section 6.2], right?
> 
> IMHO, there are some problems about insertion mode.

In the context of the SRH draft we do not make any mention or use of SRH insertion. I.e. node 3 does not insert an SRH, it encapsulates in an outer IPv6 header.

Darren

> 
> Thanks,
> Cheng
> 
> 
> 
> -----Original Message-----
> From: ipv6 [mailto:ipv6-bounces@ietf.org] On Behalf Of Darren Dukes 
> (ddukes)
> Sent: Wednesday, October 31, 2018 3:31 AM
> To: Joel Halpern <jmh@joelhalpern.com>
> Cc: spring@ietf.org; 6man@ietf.org
> Subject: Re: SRv6 - SRH in encaps or base header - point 2
> 
> I think we’re almost concluded so once more inline at <dd></dd>
> 
>> On Oct 26, 2018, at 2:28 PM, Joel Halpern <jmh@joelhalpern.com> wrote:
>> 
>> (resending, +spring as requested)
>> 
>> Thank you for the responses.  I will respond in line, marked <jmh></jmh>.  I fear it will shortly get too deep, but the context is important.
>> 
>> I will rephrase here an issue from another thread that I ahve not seen your comments on.  If Node 9 is sending traffic to Node 1 (for example, the reverse traffic for the traffic from 1 to 9 in the examples below), it presumably has an SR Policy to be applied. The issue I raised before is the leakage issue.  If 9 puts the SRH in its packet (as the document currently mandates), then it will not be possible for 3 to remove the SRH.  Thus, the SRH will leak.
>> 
>> Some have argued that is not a big deal.  It seems to matter to me.  But there is an additional problem.  A1 is not a SID.  Therefore, 9 can not put A1 into the SRH.  If it can not put A1 into the SRH, and it does not encapsulate the packet, where does it put A1.
> 
> <dd> Node 9 has a choice, encapsulate to node 3 or not. 
> If node 9 does not encapsulate, it will inform the destination of the segments in the SRH and possibly leak them to intermediate nodes.
> If node 9 does encapsulate, node 3 removes the outer header and node 1 would not learn the segment list.
> I think its choice should not be mandated in the draft. </dd>
> 
>> 
>> Yours,
>> Joel
>> 
>> On 10/26/18 1:29 PM, Darren Dukes (ddukes) wrote:
>>> Hi Joel, you’ve described sections titled “Intra SR Domain Packet”, “Transit Packet Through SR Domain”, and "SR Source Nodes Not Directly Connected”.
>>> I’ve parsed them inline to the sections of the draft defining them and given more context where needed.
>>>> On Oct 22, 2018, at 8:49 PM, Joel M. Halpern <jmh@joelhalpern.com> wrote:
>>>> 
>>>> Rephrasing using the example from 5.2.  Assuming that 8 and 9 are 
>>>> SR Hosts (not just hosts within the domain, they are capable of and 
>>>> expect to deal with SRHs, and therefore have local SIDs, ...)
>>>> 
>>>> For traffic from 8 to 9 that needs an SRH, the SRH goes in the IPv6 header sent my 8 to 9.  When 9 processes the packet, it seems that it is the last SID, figures out that there is no encapsulation, and send the TCP / UDP / QUIC information to its internal protocols stacks.
>>> Yes, this is Section 5.3.1 “Intra SR Domain Packet”.
>> <jmh>Agreed as far as it goes.  However,  the existence of S9 and A9 
>> points to a problem.  Node 8 is trying to put on an SRH going through 
>> Sx, Sy, whatever for some reason.  It can't put A9 into the SRH, as 
>> AH is not a SID, it is an address.  I presume node 8 got S9 from 
>> whatever provided him the SR Policy that it is using.  Does it simply 
>> use S9 as the address for node 9, rather than A9 that it got from 
>> DNS?  And does the TCP stack know that this substitution is being 
>> made?  (This is another example of a problem that goes away if we 
>> always encapsulate.) </jmh>
> 
> <dd>Section 4.3.2 covers these questions, i.e. A9 can be placed in the 
> SRH as the last segment, and this section describes how it’s 
> handled.</dd>
> 
>> 
>>>> 
>>>> For traffic from 1 to 9, where 3 adds an SRH, that SRH still presumably ends at 9.  9 Receives the IP packet.  Sees that it is addressed to itself.  Sees that the SRH is finished.  And then notices that the next-header is IPv6.  Unwraps the header, checks that the inner destination address is also itself, and passes the material carried by the inner header up to the appropriate stack.
>>> So node 1 sends a packet to node 9 (A1,A9) IF there is some steering 
>>> into an SR Policy at node 3 to reach node 9, this is identical to section 5.3.2 “Transit packet through SR domain”, except for destination of A9 via node 9  instead of A2 via node 4.
>> 
>>>> 
>>>> Thus, 9 needs to be able to check for both cases.  We at least need to tell implementors that.
>>> Well, 9 needs a SID S9 and Address A9.  That is shown in Section 5.1 SID and address representation.
>> <jmh>So, let us assume that 3 has an SR policy it wants to apply to 
>> the traffic from A1 to A9.  In this case, the S9 / A9 dichotomy is 
>> not a problem, I think.  Node 3 encapsualtes the packet from A1 to 
>> A9, uses S3 as the source address of the encapsulating header, and 
>> ends the SID list in the SRH with S9.  The unspecified part is that 
>> node 9 needs to be prepared to receive such packets and do the double 
>> processing.  It is reasonable double processing.  My only request 
>> here is that we tell folks they need to support it. </jmh>
> 
> <dd>Actually, node 3 uses A3 as its source address, but that’s minor.
> The double processing (lookup, do end processing, do another lookup) is documented in Section 4.3.
> Is there a need for more than what is currently specified? </dd>
> 
>>>> 
>>>> There is a further complication.  9 seems to need to have an address that is a valid SID, so it can be the last entry in the SRH from 8 to 9.
>>> As described in the draft, Section 5.1 a node k has an address Ak and SID Sk.  So node 9 has a valid SID.
>>> For traffic from 8 to 9, A9 is used as the destination as shown in section 5.3.1, 5.4 and 5.5.
>>>> However, if 1 were to send the packet to that SID for 9, router 3 would be required by the rules we discussed in the other thread to discard the packet as it is neither to prefix nor contains an HAMC.
>>>> And somehow, 8 and 1 need to each pick the right address to use for 9. (split DNS maybe?)  And 3 needs to be able to derive teh SID-formn address for 9 from the non-SID form of the address so that it (3) can build a proper SRH to get the packet to 9.
>> <jmh>I have retained your answer below for context, but I think that 
>> answers the wrong question.  I believe what is itnended is that only
>> A9 appears in DNS.  So Node 1 will see 9 as A9, and will use that.  
>> S9 will appear in SR Policies about traffic to node 9, but not in DNS.
>> That is what we need.  I wish it were clearer in the text. </jmh>
>> 
>> <jmh>If node 20 is generating SRHs with HMACs, then this is largely 
>> the same as the case from 8 to 9, except that whomever creates the SR 
>> Policy that 20 is using needs to also make sure that whatever the 
>> first SID is in teh list, it processes HMACs and is recognizable to 
>> node 3 as doing such processing. I am guessing that the reason for 
>> allowing internal nodes to do the processing is to move the 
>> verification load off the edge nodes.  It does create significant 
>> additional configuration complexity. </jmh>
> 
> <dd>We didn’t see a reason to restrict the HMAC processing to only 
> edge nodes when it was straight forward to define how they could be 
> processed at non-edge nodes.</dd>
> 
>> 
>>> This is incorrect.
>>> See Section 6.2.1 “SR Source Nodes Not Directly Connected” I will expand on the example from that section.
>>> Node 20 sends a packet to A9 with SR Policy <H7> and an HMAC 
>>> provided to node 20 by some yet to be defined method.  Resulting in 
>>> packet sent from node 20
>>>  P: (A20,H7)(A9;SL=1)(payload)
>>> Recall Hk is a SID at node k requiring HMAC verification, and it is covered by Prefix-H.
>>> Prefix-H is _not_ subject to ingress filtering at node 3.
>>> Therefore the packet P destined to H7 is not subject to ingress filtering at node 3.
>>> P is forwarded to node 7, where H7 is processed and the HMAC verified.
>>> If the HMAC can not be verified the packet is dropped, else it is forwarded to the next segment and destination, A9.
>>> Darren
>>>> 
>>>> Yours,
>>>> Joel
>>>> 
>>>> On 10/22/18 8:04 PM, Darren Dukes (ddukes) wrote:
>>>>> inline.
>>>>>> On Oct 22, 2018, at 7:21 PM, Joel M. Halpern <jmh@joelhalpern.com> wrote:
>>>> ..
>>>>>> 2) Now let us look at packets arriving at and actually destined for an SR Host in the SR Domain where that packet has an SRH.  If the packet is coming from another SR Host, the SRH will be in the base header, and the host can simply check it for any violations, and continue.  But, if the packet came from outside the domain, then it will have an encapsulating SRv6 header.  So the host has to detect this case, check and then peal off the encapsulating header, and then process the received packet. Yes, it can do so.  But nothing in teh document tells implementors they have to deal with both cases.
>>>>>> 
>>>>> Can you be more precise here.  Perhaps use the example from section 5.2 or 6.2.1?
>>>> ..
> 
> --------------------------------------------------------------------
> IETF IPv6 working group mailing list
> ipv6@ietf.org
> Administrative Requests: https://www.ietf.org/mailman/listinfo/ipv6
> --------------------------------------------------------------------