|
| 1 | + |
| 2 | +# Segment Routing IPv6 Examples |
| 3 | + |
| 4 | +- **vpn-v4-per-ce**: IPv4 L3VPN [T.Encaps, End, End.DX4] |
| 5 | +- **vpn-v6-per-ce**: IPv6 L3VPN [T.Encaps, End, End.DX6] |
| 6 | +- **vpn-v4-per-vrf**: IPv4 L3VPN [T.Encaps, End, End.DT4] (WIP) |
| 7 | +- **vpn-v6-per-vrf**: IPv6 L3VPN [T.Encaps, End, End.DT6] |
| 8 | +- **l2vpn**: L2VPN [T.Encaps.L2, End, End.DX4] (XXX) |
| 9 | +- **transit**: Transit Function Test with FRR, [T.Encaps, T.Insert, End, End.X] |
| 10 | +- **vrf-redirect**: End.T Evaluation linux only without FRR, [End.T] (XXX) |
| 11 | +- **binding-sid**: End.B6,End.B6.Encaps Evaluation. [End.B6, End.B6.Encaps] (WIP End.B6.Insert) |
| 12 | +<!-- - **sfc**: Service Chaining with End.AM --> |
| 13 | + |
| 14 | +## Functions I want to test on linux |
| 15 | +- [x] T.Insert: I don't understand how-to-use |
| 16 | +- [x] T.Encaps |
| 17 | +- [x] T.Encaps.L2: I don't understand how-to-use |
| 18 | +- [x] End |
| 19 | +- [x] End.X |
| 20 | +- [ ] End.T: linux kernel can't perform End.T fine. (XXX) |
| 21 | +- [x] End.DX6 |
| 22 | +- [x] End.DX4 |
| 23 | +- [x] End.DX2 |
| 24 | +- [x] End.DT6 |
| 25 | +- [ ] End.DT4: linux kernel isn't support yet |
| 26 | +- [x] End.B6: linux kernel isn't working fine..? or I don't understand how-to-use. |
| 27 | +- [x] End.B6.Encaps |
| 28 | +- [ ] End.AM: linux kernel isn't support yet. **srext only** masquerading proxy |
| 29 | +- [ ] End.AD: linux kernel isn't support yes. **srext only** dynamic proxy |
| 30 | +- [ ] End.AS2: linux kernel isn't support yes. static proxy |
| 31 | +- [ ] End.AS4: linux kernel isn't support yes. static proxy |
| 32 | +- [ ] End.AS6: linux kernel isn't support yes. static proxy |
| 33 | + |
| 34 | +## Funcに関しての説明 |
| 35 | +- **T.Encaps:**<br> |
| 36 | + この操作はトランジットノード |
| 37 | + (すなわち、パケットを通してSRv6をサポートするルーターですが、 |
| 38 | + ノード自体はSegmentリストにありません)で実行され、 |
| 39 | + IPv6ヘッダーとSRHヘッダーをパケットの外側の層に追加し、 |
| 40 | + 新しいものを定義できます。セグメントのリスト。 |
| 41 | + パケットは、新しいIPv6ヘッダーのSRHに従って最初に転送されます。 |
| 42 | +- **End:**<br> |
| 43 | + この操作では、Segment Leftを0(最後のホップではない) |
| 44 | + にする必要があります。これにより、Segment Leftが1減少し、 |
| 45 | + IPv6パケットの宛先アドレスが最も一般的なSRv6操作である次の |
| 46 | + Segmentに更新されます。SR MPLSのプレフィックスSIDと同等です。 |
| 47 | +- **End.X:**<br> |
| 48 | + この操作は基本的にEnd操作と同じですが、 |
| 49 | + 処理したパケットを指定したネクストホップアドレスに |
| 50 | + 送信できる点が異なります。 |
| 51 | + SR MPLSのAdj-SIDと同じです。 |
| 52 | +- **End.DX4:**<br> |
| 53 | + この操作ではSegment Leftが0であり、 |
| 54 | + パケットがIPv4パケットをカプセル化しているため、 |
| 55 | + 外側のIPv6ヘッダーは削除され、内部のIPv4パケットは |
| 56 | + 指定されたネクストホップアドレスに転送されます。 |
| 57 | + VPNv4のCEごとのラベルに相当します。 |
| 58 | +- **End.DX6:**<br> |
| 59 | + この操作では、Segment Leftを0にしてIPv6パケットを |
| 60 | + パケットにカプセル化し、外側のIPv6ヘッダーを削除して、 |
| 61 | + 内部IPv6パケットを指定されたネクストホップアドレスに転送します。 |
| 62 | + VPNv6 Per-CEラベルと同等です。 |
| 63 | +- **End.B6:**<br> |
| 64 | + 既存のSRHに基づいて新しいSRHを挿入し、 |
| 65 | + 新しいSegment listを定義すると、挿入された新しいSRHに |
| 66 | + 従ってデータパケットが最初に転送されます。Binding-SIDと同等です。 |
| 67 | +- **End.B6.Encaps:**<br> |
| 68 | + この操作は基本的にEnd.B6と同じですが、違いは、 |
| 69 | + この操作では単にSRHルーティングヘッダーを追加するのではなく、 |
| 70 | + 新しいIPv6ヘッダーとSRHをパケットの外側のレイヤーに追加することです。 |
| 71 | + |
| 72 | +## 参照 |
| 73 | + |
| 74 | +**Funcの概要に関してはこれらの画像がわかりやすい.(thx kamataさん)**<br> |
| 75 | + |
| 76 | +| Function | Location | Description | Works-for | |
| 77 | +| :------- | :------- | :---------- | :-------- | |
| 78 | +| End | Core | DestとSRHを書き換えて, Next-hopをRIBから探して送る | Prefix-SID | |
| 79 | +| End.X | Core | DestとSRHを書き換えて, 決められたNextHopへ送る | Adjacency-SID | |
| 80 | +| End.T | Core | DestとSRHを書き換えて, NextHopを指定したRIBから探して送る | Multi-table Operation | |
| 81 | +| End.DX2 | Edge | SRHを外して, 決められた送信IFへ送る (NH=59) | L2VPN | |
| 82 | +| End.DX6 | Edge | SRHを外して, 決められたIPv6 NextHopへ送る (NH=41) | VPNv6 Per-CE Label | |
| 83 | +| End.DX4 | Edge | SRHを外して, 決められたIPv4 NextHopへ送る (NH=4) | VPNv4 Per-CE Label | |
| 84 | +| End.DT6 | Edge | SRHを外して, IPv6 NextHopを指定したRIBから探して送る (NH=41) | VPNv6 Per-VRF Label | |
| 85 | +| End.DT4 | Edge | SRHを外して, IPv4 NextHopを指定したRIBから探して送る (NH=4) | VPNv4 Per-VRF Label | |
| 86 | +| End.B6 | Edge | SRHは触らず, 新しいSID List(SRH)を挿入して, その先頭に送る | Binding SID | |
| 87 | +| End.B6.Encaps | Edge | SRHを書き換えて, 新しいSID List(OuterHdr)でEncapして, その先頭に送る | Binding SID (Encap) | |
| 88 | +| End.BM | Edge | DestとSRHを書き換えて, Labelを付与して, その先頭に送る | SRv6/SR-MPLS Binding | |
| 89 | +| End.S | Core | 一番最後(or複数)のSIDでTable検索し, NextHopを探して送る | ICN | |
| 90 | +| End.AS | Core | OuterHdrを外して, 決められた送信IFへ送る. <br>決められた受信IFに入ってきたPktにOuterHdrを付与し, その先頭へ送る| Service-Chaining (Proxy) | |
| 91 | +| End.AM | Core | DestとSRHを書き換えて, 決められた送信IFへ送る. <br>決められた受信IFに入ってきたPktにSRHを付与し, その先頭に送る. | Service-Chaining (Masq) | |
| 92 | +| T | Core | 通常のIPv6 Routing | - | |
| 93 | +| T.Insert | Core | 新しいSRHを挿入して, その先頭に送る | - | |
| 94 | +| T.Encaps | Core | 新しいIPv6 Hdr(SRHつき)を挿入して, その先頭に送る(L3)| - | |
| 95 | +| T.Encaps.L2 | Core | 新しいIPv6 Hdr(SRHつき)を挿入して, その先頭に送る(L2)| - | |
| 96 | + |
| 97 | +**iproute2 CLIに関してはこれらがわかりやすい.(thx ebikenさん)**<br> |
| 98 | +``` |
| 99 | +# ip -6 route add <segment> encap seg6local action <action> <params> (dev <device> | via <nexthop>) [table localsid] |
| 100 | +# ip -6 route add fc00::1/128 encap seg6local \ |
| 101 | + action End via 2001:db8::1 |
| 102 | + action End.X nh6 fc00::1:1 via 2001:db8::1 |
| 103 | + action End.T table 100 via 2001:db8::1 |
| 104 | + action End.DX2 oif lxcbr0 via 2001:db8::1 |
| 105 | + action End.DX4 nh4 10.0.3.254 via 2001:db8::1 |
| 106 | + action End.DX6 nh6 fc00::1:1 via 2001:db8::1 |
| 107 | + action End.DT6 table 100 via 2001:db8::1 |
| 108 | + action End.B6 srh segs beaf::1,beaf::2 via 2001:db8::1 |
| 109 | + action End.B6.Encaps srh segs beaf::1,beaf::2 via 2001:db8::1 |
| 110 | +
|
| 111 | +# ip -6 route add <prefix> encap seg6 mode <encapmode> segs <segments> [hmac <keyid>] (dev <device> | via <nexthop>) |
| 112 | +# ip -6 route add fc00:b::10/128 encap seg6 mode inline segs fc00:3::11,fc00:3::12,fc00:3::13 via fc00:a::a |
| 113 | +# ip -6 route add fc00:b::10/128 encap seg6 mode encap segs fc00:3::11,fc00:3::12,fc00:3::13 via fc00:a::a |
| 114 | +
|
| 115 | +# ip sr tunsrc set <addr> |
| 116 | +# ip sr hmac set <keyid> <algorithm> |
| 117 | +``` |
| 118 | + |
| 119 | +- https://www.sdnlab.com/22842.html |
| 120 | +- https://www.janog.gr.jp/meeting/janog40/application/files/2415/0051/7614/janog40-sr-kamata-takeda-00.pdf |
| 121 | +- https://www.slideshare.net/kentaroebisawa/zebra-srv6-cli-on-linux-dataplane-enog49 |
| 122 | +- http://www.segment-routing.net/open-software/linux/ |
| 123 | +- http://www.segment-routing.net/open-software/vpp/ |
| 124 | + |
0 commit comments