SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network...
Transcript of SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network...
![Page 1: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/1.jpg)
SRv6Pipes: enabling in-network bytestream functions
Fabien Duchêne <[email protected]>David Lebrun <[email protected]>
Olivier Bonaventure <[email protected]>IFIP Networking 2018 - Zurich
![Page 2: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/2.jpg)
SRv6Pipes?
SRv6: IPv6 Segment Routing
Pipes : Unix pipeline
2
![Page 3: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/3.jpg)
IPv6 Segment Routing
- IPv6 flavor of a modern variant of the source routing paradigm
- Extension header, named Segment Routing Header (SRH)
- Each segment is an IPv6 address representing a node or link to traverse
3
![Page 4: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/4.jpg)
IPv6 Segment Routing
4
2001:1234::AAAA 2001:1234::BBBB
2001:1234::CCCC
![Page 5: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/5.jpg)
IPv6 Segment Routing
5
2001:1234::AAAA 2001:1234::BBBB
2001:1234::CCCC
![Page 6: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/6.jpg)
IPv6 Segment Routing
6
2001:1234::AAAA 2001:1234::BBBB
2001:1234::CCCC
IGP Path
SRv6 Path
![Page 7: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/7.jpg)
IPv6 Segment Routing Header (SRH)
2001:1234::AAAA
2001:1234::BBBB
2001:1234::CCCC
7
![Page 8: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/8.jpg)
IPv6 Segment Routing Header (SRH)
2001:1234::AAAA
2001:1234::BBBB
2001:1234::CCCC
2001:1234::AAAA
8
![Page 9: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/9.jpg)
IPv6 Segment Routing Header (SRH)
2001:1234::AAAA
2001:1234::BBBB
2001:1234::CCCC
2001:1234::BBBB
9
![Page 10: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/10.jpg)
IPv6 Segment Routing
10
2001:1234::AAAA 2001:1234::BBBB
2001:1234::CCCC
::CCCC
::BBBB
::AAAA
![Page 11: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/11.jpg)
IPv6 Segment Routing
11
2001:1234::AAAA 2001:1234::BBBB
2001:1234::CCCC
::CCCC
::BBBB
::AAAA
![Page 12: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/12.jpg)
IPv6 Segment Routing
12
2001:1234::AAAA 2001:1234::BBBB
2001:1234::CCCC
::CCCC
::BBBB
::AAAA
![Page 13: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/13.jpg)
Unix pipeline
13
![Page 14: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/14.jpg)
Unix pipeline
14
![Page 15: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/15.jpg)
Unix pipeline
15
![Page 16: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/16.jpg)
Unix pipeline
16
![Page 17: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/17.jpg)
Unix pipeline
17
![Page 18: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/18.jpg)
SRv6 + Pipes = SRv6Pipes !
Leverage IPv6 Segment Routing to allow the user to choose and apply a chain of functions to the payload.
18
![Page 19: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/19.jpg)
19
SRv6 + pipes = SRv6Pipes !
Encrypt Decrypt
My secret message ENCRYPTED My secret
message| |
This is a pipe :)
![Page 20: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/20.jpg)
Enabling in-network bytestream functions
Middleboxes can perform two different types of network functions:
- per-packet functions: operate on a per-packet basis- Network Address Translation (NAT), stateless firewall….- operate on the network and sometimes transport header- simple
- per-bytestream functions: operate on the payload of the TCP packets- compression, encryption, transcoding...- reorder the received TCP packets and often modify the payload of TCP packets- include an almost complete TCP implementation- complex
20
![Page 21: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/21.jpg)
Transparent TCP Proxy
21Proxy
BufferDogs
Dogs
Cats
receive() send()
Client -> Proxy
Proxy -> Server
TCP connections
CatsModify
![Page 22: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/22.jpg)
SRv6Pipes: almost ready!
22
2001:1234:5678:1234:AAAA:BCDE:FFFF 2001:1234:5678:1234:BBBB:BCDE:FFFF
2001:1234::CCCC
Encrypt Decrypt
Proxy Proxy
![Page 23: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/23.jpg)
SRv6Pipes : modular transformation
23
The client should be able to create any chain of functions.
How to represent a function ?
- One proxy per function is too expensive- One proxy should be able to perform several functions
The client must be able to inform the proxy about the function
![Page 24: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/24.jpg)
- We leverage the large addressing space available in IPv6.- Each proxy announces one or more IPv6 prefixes- Allocate a given amount of bits to encode the identifier of the function - The remaining low order bits are used to specify parameters of the function
2001:0123:4567:8901:2345:AAAA:BCDE:FFFF
- 2001:0123:4567:8901:2345/80 : Proxy range
- AAAA : Identifier of the function
- BCDE:FFFF : Parameters of the function
Encoding Functions and Parameters
24[1] C. filsfils et al. SRv6 Network Programming. IETF
![Page 25: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/25.jpg)
Encoding Functions and Parameters
Enc
rypt
Dec
rypt
Tran
scod
e
AAAA BBBB CCCC
Unmodified Payload
Modified Payload
Proxy
Lookup function ID
25 2001:0123:4567:8901:2345:AAAA:BCDE:FFFF
![Page 26: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/26.jpg)
SRv6Pipes: the big picture
26
2001:1234:5678:1234:AAAA:BCDE:FFFF 2001:1234:5678:1234:BBBB:BCDE:FFFF
2001:1234::CCCC
Encrypt Decrypt
Proxy Proxy
EndHost
Decrypt
Encrypt
![Page 27: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/27.jpg)
SRv6Pipes : other design points
27
How is the return traffic handled?
We insert a Type Length Value (TLV) object containing the return path in the original SRH.
How does the client get informations about the addresses of the proxies?
We modify the DNS resolver. This is detailed in [1].
[1] D. Lebrun et al. Software Resolved Networks: Rethinking Enterprise Networks with IPv6 Segment Routing. SOSR 18
![Page 28: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/28.jpg)
SRv6Pipes : implementation
28
Implementation details :
- Modification of the Linux kernel version 4.16.0- Modification of iproute2- Implementation of the proxy (~1000 C lines)
- Uses NFQUEUE to intercept the SYN and extract the SRH- Leverages TPROXY to establish and transparent connection- Uses ip6tables- Allows to load dynamic modules to support new functions
Runs on commodity hardware.
Code is available on: http://segment-routing.org/index.php/SRv6Pipes
![Page 29: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/29.jpg)
Implementation : performance evaluation
29
10Gbps 10Gbps
1Gbps 1Gbps 1Gbps
Client : 2,53Ghz Intel Xeon 16GB RAM - Debian Stretch - Kernel 4.16 - wrk 4.0.2-5Middleboxes/Server: 2,53Ghz Intel Xeon 8GB RAM - Debian Stretch - Kernel 4.16 - lighttpd 1.4.35
![Page 30: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/30.jpg)
Measurements Results : no loss/delay
30
- 1 middlebox acting as proxy/router
- 200 clients downloading web pages of a given size.
- For 10MB files : - Proxy : ~9840Mb/s- Router : ~9840Mb/s
- For 1KB files:- Proxy : 253Mb/s- Router : 272Mb/s
Cost of establishment.
![Page 31: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/31.jpg)
Measurements Results : with loss and delay
31
- Same setup- Loss: 1% per link- Delay 1% per link
- Our proxy acts as a Performance Enchancing Proxy (PEP)
Loss
![Page 32: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/32.jpg)
Measurements Results : no loss/delay - 2 proxies
32
- 2 proxies/routers- Applying a XOR function
- No significant overhead
![Page 33: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/33.jpg)
Conclusion
SRv6 pipes :
- Middleboxes are explicitly exposed- Flexibility for the Network Operators- In-network per-bytestream and per-packet functions- New use cases for IPv6 Segment Routing- Implemented in the Linux kernel and available today!
33
![Page 34: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/34.jpg)
Thank you!
Try it now! http://segment-routing.org/index.php/SRv6PipesFabien Duchêne <[email protected]> 34
![Page 35: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/35.jpg)
Measurements Results: CPU intensive functions
35
![Page 36: SRv6Pipes: enabling in-network - UCLouvainenabling+in-networ… · SRv6Pipes: enabling in-network bytestream functions Fabien Duchêne David Lebrun](https://reader033.fdocuments.net/reader033/viewer/2022050611/5fb26bf8aa76ba3dd0316bfd/html5/thumbnails/36.jpg)
Implementation details
36