Kami adalah penyedia layanan terkelola yang menjalankan jaringan berukuran kecil di pusat data tunggal di Sydney. Kami baru-baru ini menyebarkan POP antar negara di Melbourne (keduanya berada di pantai timur Australia), dan untuk pertama kalinya saya harus menghadapi tantangan dunia nyata dalam hal rekayasa lalu lintas. Harapan saya adalah saya bisa mendapatkan panduan di sini tentang cara mendapatkan beberapa tingkat kendali atas jalur iBGP saya.
Saya mungkin akan memposting beberapa pertanyaan yang saling terkait, tetapi dalam kasus ini saya secara khusus prihatin tentang rekayasa lalu lintas internal. Saya merasa sangat sulit untuk mengetahui bagaimana cara mendapatkan iBGP untuk membuat keputusan routing yang optimal.
Tujuan utama bagi saya adalah bahwa perlu menemukan cara untuk memberikan iBGP beberapa konsep batas dan jarak per POP. Jadi saya bisa membedakan antara POP yang ada di kota yang sama, vs yang inter-state, vs yang yang timur vs pantai barat. Kemudian optimalkan inbound / outbound routing berdasarkan ini.
Saya tahu bahwa akan ada banyak skenario kasus per kasus, tapi saya berharap saya dapat mengembangkan strategi perutean iBGP yang bekerja mungkin 80% dari waktu dan sisanya saya harus berurusan dengan kasus tepi khusus di konfigurasi
Konteks
- Kami baru saja membeli 4x ASR 1001-Xs untuk bertindak sebagai perangkat tepi kami di masing-masing POP (2x per POP tetapi karena keterbatasan pergantian perangkat keras, saya hanya fokus pada penggunaan perangkat 1 tepi di Melbourne untuk saat ini)
- Kami juga menggunakan Juniper untuk berpindah perangkat keras. EX4500 sebagai "switch inti" dan EX4200 kami di lapisan akses.
- Kami sekarang memiliki penyedia transit 2x. Kami hanya melakukan interkoneksi ke masing-masing penyedia dalam satu keadaan.
- AS 1000 adalah agregator dan menggunakan AS 4000 sebagai salah satu upstreams utama di Sydney.
- Ini menimbulkan sedikit tantangan karena semua jalur yang diterima melalui AS 1000 biasanya lebih panjang 1 daripada yang kita dapatkan dari AS 4000.
- Saya menggunakan Ansible untuk membuat konfigurasi iOS menggunakan templat Jinja2. Jadi bukan masalah untuk menghasilkan banyak per-logika peer-map peer map iBGP untuk menyelesaikan sesuatu.
Tujuan saya
Pada dasarnya, saya ingin dapat mencapai perutean yang optimal antara POPs saat kami menyebarkannya. Tetapi saat ini saya tidak dapat mencapai tingkat kontrol apa pun atas cara iBGP memilih jalurnya.
Desain saya saat ini
- Saat ini saya memiliki 2x ASR1K yang bertindak sebagai router tepi dengan tabel penuh di Sydney, dan satu di Melbourne.
- Kedua POP menggunakan penyedia transit yang berbeda.
- Kami memiliki sirkuit titik ke titik antara dua POP yang diakhiri di kedua sisi oleh perangkat tepi pada sub-antarmuka dot1q.
- Kami menjalankan OSPF melalui tautan ini di antara semua perangkat tepi, dan biaya tautan meningkat sehingga ini adalah jalur OSPF preferensi terendah.
- Kami memiliki area OSPF tunggal 0 di kedua POP.
- Perangkat tepi lebih merupakan inti / tepi konvergen - sakelar inti kami tidak banyak menghasilkan L3 karena tidak dapat menangani tabel penuh.
- Dalam setiap POP ASR1K bertindak sebagai reflektor rute untuk perangkat BGP lain dalam POP tersebut - firewall, sakelar inti, LNSes, dan sebagainya.
- Masing-masing memiliki ID-cluster mereka sendiri - tidak per POP. Mencari perubahan ini menjadi per-POP.
- Setiap ASR1K menghasilkan rute default ke klien reflektor rute melalui BGP.
- Semua ASR1K berada dalam jala iBGP.
- Semua transit memiliki preferensi lokal yang sama di semua situs.
Contoh routing sub-optimal
- Jika saya memiliki semua transit Melbourne dan Sydney online, routing keluar berfungsi dengan baik. Lalu lintas Sydney keluar melalui Sydney dan Melbourne keluar melalui Melbourne.
- Masalahnya adalah hanya dengan menonaktifkan admin transit utama Sydney saya, transit Melbourne saya sekarang secara otomatis lebih disukai. Alih-alih transit Sydney sekunder saya melalui router BDR02 di Sydney.
- Jadi, saya sering berakhir dengan skenario di mana lalu lintas akan melambung ke Melbourne karena melakukan backhaul kami, keluar di Melbourne, lalu kembali ke Sydney. Jalur yang muncul <1ms sekarang sekitar 30 ms.
Lebih buruk lagi, dalam skenario khusus ini saya tidak tahu mengapa Melbourne lebih disukai.
- Berat identik
- Pre lokal identik
- AS Path sama panjangnya
- Tidak ada jalan yang berasal sendiri.
- Keduanya memiliki IGP sebagai asal.
- Keduanya memiliki metrik (MED?) Dari 0.
- Keduanya merupakan jalur iBGP dari sudut pandang router ini.
- Metrik IGP Saya akan berpikir berkorelasi dengan biaya tautan OSPF karena kami menggunakan OSPF sebagai IGP kami.
- Saya telah mengkonfirmasi bandwidth referensi 100G diatur di semua perangkat OSPF.
EDIT: 30/01: Saya pikir saya salah tentang bagaimana biaya IGP dihitung dan mungkin mereka saat ini sama? Semua rute OSPF saya adalah tipe E2. Jika biaya IGP adalah sama maka saya kira masuk akal pemilihan jalur terbaik terjadi berdasarkan RID, yang dalam hal ini RID dari MEL BDR akan lebih rendah dari SYD.
Saya telah menetapkan biaya tautan OSPF antara Sydney hingga 15.000 jauh lebih tinggi dari standar. Saya telah menghitung ini agar dapat bekerja dengan baik dengan bandwidth referensi 100 Gbps kami.
Dalam hal biaya tautan OSPF - ini adalah preferensi OSPF untuk setiap hop berikutnya dari rute BGP:
bdr-01-syd#sh ip route x.x.201.73 (AS 4000 next hop)
Routing entry for x.x.201.72/30
Known via "ospf 1", distance 110, metric 20, type extern 2, forward metric 15000
Last update from x.x.13.51 on Port-channel1.1125, 14:57:17 ago
Routing Descriptor Blocks:
* x.x.13.51, from x.x.13.66, 14:57:17 ago, via Port-channel1.1125
Route metric is 20, traffic share count is 1
bdr-01-syd#
bdr-01-syd#sh ip route x.x.31.5 (AS 1000 next hop)
Routing entry for x.x.31.4/30
Known via "ospf 1", distance 110, metric 20, type extern 2, forward metric 5
Last update from x.x.216.67 on Port-channel1.36, 1d00h ago
Routing Descriptor Blocks:
* x.x.216.67, from x.x.216.163, 1d12h ago, via Port-channel1.36
Route metric is 20, traffic share count is 1
bdr-01-syd#
x.x.201.73 is the next hop to 139.130.4.4 via the Melbourne path.
x.x.13.51 is the other end of the inter-state Point to Point. x.x.13.66 is BDR-01-MEL.
x.x.31.5 is the next hop to 139.130.4.4 via the Secondary Sydney transit in the same POP as the primary transit - via BDR-02-SYD.
x.x.216.67 is the local OSPF VLAN for the Sydney POP that both BDR01 and BDR02 are in.
x.x.216.163 is the BDR-02-SYD router.
Dalam hal pilihan OSPF ini, saya dapat melihat "metrik maju" OSPF yang lebih pendek diambil. Saya akan berpikir bahwa BGP harus memilih jalur Sydney berdasarkan ini.
Anda dapat melihat dari jejak ini bahwa kami segera melompat ke Melbourne melalui Backhaul karena lompatan pertama adalah 13ms: (139.130.4.4 disiarkan dan memiliki jalur di kedua negara bagian).
bdr-01-syd#traceroute 139.130.4.4
Type escape sequence to abort.
Tracing the route to 139.130.4.4
VRF info: (vrf in name/id, vrf out name/id)
1 x.x.13.51 13 msec 13 msec 13 msec
2 x.x.201.73 14 msec 14 msec 14 msec
3 x.x.196.54 [AS 4000] [MPLS: Label 25049 Exp 0] 14 msec 14 msec 14 msec
4 x.x.196.51 [AS 4000] 14 msec 14 msec 14 msec
5 139.130.110.29 [AS 1221] 14 msec 15 msec 14 msec
6 203.50.11.113 [AS 1221] 16 msec 14 msec 16 msec
7 139.130.4.4 [AS 1221] 13 msec 14 msec 14 msec
bdr-01-syd#
bdr-01-syd#sh ip route 139.130.4.4
Routing entry for 139.130.0.0/16
Known via "bgp 5000", distance 200, metric 0
Tag 4000, type internal
Last update from x.x.201.73 06:06:14 ago
Routing Descriptor Blocks:
* x.x.201.73, from x.x.13.66, 06:06:14 ago
Route metric is 0, traffic share count is 1
AS Hops 2
Route tag 4000
MPLS label: none
bdr-01-syd#
bdr-01-syd#sh ip bgp regexp ^1000 1221$
BGP table version is 11307146, local router ID is x.x.216.161
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
t secondary path,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
...
* i 139.130.0.0 x.x.31.5 0 100 0 1000 1221 i
...
Versus the path via AS 4000:
bdr-01-syd#sh ip bgp regexp ^4000 1221$
*>i 138.130.0.0 x.x.201.73 0 100 0 4000 1221 i
bdr-01-syd#
Dalam keluaran ini, transit Sydney sekunder adalah jalur yang valid, demikian pula transit Melbourne. Melbourne dipilih sebagai yang terbaik.
bdr-01-syd#sh ip bgp 139.130.4.4
BGP routing table entry for 139.130.0.0/16, version 10794227
Paths: (2 available, best #2, table default)
Advertised to update-groups:
66
Refresh Epoch 1
1000 1221, (received & used)
x.x.31.5 (metric 20) from x.x.216.163 (x.x.216.163)
Origin IGP, metric 0, localpref 100, valid, internal
Community: 1000:65110 5000:1000 5000:1001 5000:1002
rx pathid: 0, tx pathid: 0
Refresh Epoch 2
4000 1221, (received & used)
x.x.201.73 (metric 20) from x.x.13.66 (x.x.13.66)
Origin IGP, metric 0, localpref 100, valid, internal, best
Community: 4000:5307 4000:6100 4000:53073 5000:1000 5000:1030 5000:1031
rx pathid: 0, tx pathid: 0x0
bdr-01-syd#
Apa yang saya coba
Saya mencoba menambahkan biaya tautan OSPF sebesar 15.000 yang saya hitung sebagai angka aman berdasarkan bandwidth ref saya 100 Gbps karena selalu menjadi biaya OSPF yang paling tidak disukai. Saya pikir ini akan dianggap sebagai "biaya IGP" namun BGP masih lebih memilih jalur Melbourne untuk beberapa alasan.
Setelah ini tampaknya tidak berdampak apa pun, rencana utama saya adalah menggunakan AS PATH yang tergantung pada iBGP. Rencananya adalah saya akan memiliki peer-groups per POP. Dan dalam templating saya, saya akan menentukan berapa banyak prepends yang harus dilakukan, berdasarkan seberapa jauh jarak keduanya. Saya pikir ini adalah tipe tujuan yang cukup umum.
Sebagai contoh:
- 0 prepends jika intra-POP
- 1 ditambahkan jika POP intra-negara
- 2 ditambahkan jika POP antar negara
- 3 menambahkan jika POP pantai timur-barat
Saya pikir ini akan bekerja dengan sempurna, menjadi solusi yang cukup elegan, dan merupakan jenis solusi yang saya harapkan. Saya menulis konfigurasi dalam beberapa jam dan dikerahkan. Tetapi saya menggaruk-garuk kepala sampai saya menyadari bahwa iBGP tidak mendukung jalur AS.
- https://routerjockey.com/2011/02/28/bgp-essentials-the-art-of-path-manipulation/
- https://lists.gt.net/nsp/juniper/3870
- http://blog.ipspace.net/2008/02/bgp-essentials-as-path-prepending.html
Bahkan jika saya bisa mendapatkan ini berfungsi, sepertinya itu tidak akan pernah menjadi solusi yang didukung.
Apa yang saya pertimbangkan
- Tautan terakhir @ ipspace.net menyebutkan bahwa Anda dapat menggunakan local-pref karena tetap ada di dalam AS. Tapi saya sudah membuat kebijakan pre-local untuk memilih rute pelanggan hilir, IXes, yang biasa ... Sepertinya menggunakan localpref untuk ini tidak akan tercampur dengan baik. Dan Ivan tidak menyarankannya!
- Saya memang mempertimbangkan untuk menggunakan Konfederasi BGP - tetapi ini sepertinya banyak pekerjaan tambahan untuk jaringan kecil kami. Dan saya juga membaca bahwa itu tidak menambahkan jalur AS melompat antara AS terkonsentrasi pula. Jadi saya mungkin akan berakhir di tempat yang sama.
- Saya akan mempertimbangkan menggunakan MPLS (saya pikir MPLS TE?) Tapi saya sangat hijau ketika datang ke MPLS dan sudah memiliki banyak tantangan di depan saya. Jadi saya ingin menghindari kompleksitas yang ditambahkan, kecuali itu adalah solusi yang baik untuk masalah saya.
Saya akan menambahkan rincian lebih lanjut besok. Untuk saat ini, inilah diagram yang menggambarkan pengaturan kami saat ini.