Professional Documents
Culture Documents
Ý Tư NG Và Nguyên Lý Ho T Đ NG C A BGP
Ý Tư NG Và Nguyên Lý Ho T Đ NG C A BGP
BGP là một giao thức định tuyến dạng path-vector nên việc chọn lựa đường đi tốt nhất thông thường
dựa trên một tập hợp các thuộc tính được gọi là ATTRIBUTE. Do sử dụng metric khá phức tạp, BGP
được xem là một giao thức khá phức tạp. Nhiệm vụ của BGP là đảm bảo thông tin liên lạc giữa các AS,
trao đổi thông tin định tuyến giữa các AS, cung cấp thông tin về trạm kế cho mỗi đích đến. BGP sử dụng
giao thức TCP cổng 179. Như các các giao thức nhóm distance vector thường quảng bá thông tin hiện
có đến các router láng giềng, còn path vector chỉ ra chính xác danh sách toàn bộ đường dẫn đến đích.
Ngoài ra các giao thức định tuyến hoạt động dùng path vector giúp việc xác định vòng lặp trên mạng rất
tốt bằng cách xem xét các con đường mà các router khác gửi về xem có chính bản thân AS trong đó hay
không, nếu có sẽ biết được ngay là lặp, và sẽ loại bỏ.
BGP hỗ trợ cho các địa chỉ CIDR (Classless Interdomain Routing). BGP cho phép dùng xác thực và
BGP có các cơ chế keepalive định kỳ nhằm duy trì quan hệ giữa các BGP peers. Trong giai đoạn ban
đầu của của phiên thiết lập quan hệ BGP, toàn bộ các thông tin routing-update sẽ được gửi. Sau đó, BGP
sẽ chuyển sang cơ chế dùng trigger-update. Bất kỳ một thay đổi nào trong hệ thống mạng cũng sẽ là
nguyên nhân gây ra trigger-update.
Một trong các đặc điểm khác biệt nhất của BGP là trong các routing-update của nó. BGP đảm bảo rằng
lớp transport đã truyền các update và các cơ sở dữ liệu về đường đi đã được đồng bộ. Khi dùng BGP để
kết nối các AS khác nhau, BGP được gọi là eBGP. Còn dùng BGP để kết nối trong một AS được gọi là
iBGP.
Trong một AS ta sử dụng giao thức định tuyến nội IGP (ví dụ như RIP, ISIS, EIGRP, OSPF) nhưng khi
ra ngoài một AS thì phải sử dụng một giao thức khác. Vấn đề ở đây chính là mục đích của các IGP và
EGP không giống nhau. Các IGP thực hiện định tuyến gói đi từ nguồn đến đích mà không cần quan tâm
đến chính sách định tuyến (policy). Trong khi ra khỏi phạm vi một AS thì chính sách định tuyến lại là
vấn đề quan trọng.
- Giải pháp thứ nhất: phân phối lại các tuyến BGP vào IGP để thỏa mãn qui luật đồng bộ,
nhưng phương pháp này không nên sử dụng trong các mạng core của ISP do số tuyến trên
Internet rất lớn, các IGP được thiết kế không phải để có thể quản lý số tuyến quá lớn như vây,
ngoài ra, nếu dùng phương pháp này thì khi có sự thay đổi về 1 tuyến trên Internet sẽ làm các
IGP phải thực hiện giải thuật tìm đường dẫn đến chiếm nhiều CPU và bộ nhớ gây mất ổn định.
- Giải pháp thứ hai: các BGP peer được full-mesh để đảm bảo các router đều có đủ thông tin định
tuyến để forward packet. Khi này có thể tắt chức năng đồng bộ của IBGP. Nhưng full-mesh dẫn
đến việc khó quản lý, tốn băng thông để cập nhật định tuyến, tốn CPU,mem. Có 2 cách để giải
quyết vần đề này:
o Route Reflector: thay đổi qui luật split-horizon của IBGP. Các RR có thể gửi các tuyến
IBGP đến các BGP peer khác. Để chống lặp vòng, các RR thêm vào các thuộc tính:
cluster-id và originator.
o Confederation: thay đổi cách xử lý AS-PATH của IBGP: Chia một AS thành nhiều
member-AS. BGP giữa các BGP peer thuộc các member-AS khác nhau sẽ là EBGP (tức
là sẽ thêm member-AS vào AS-PATH để chống loop) nhưng các thuộc tính khác như
Local Preference, MED, Next-hop sẽ không thay đổi. Ưu điểm của giải pháp này là các
member-AS có thể được quản lý độc lập, tăng khả năng chính sách định tuyến routing.
Các member-AS có thể sử dụng các IGP khác nhau. Nhưng quản lý một Confederation
thì có thể sẽ rất phức tạp do đó nó chỉ thích hợp cho các ISP cực lớn hoặc các công ty
đa quốc gia cần có sự linh động và độc lập giữa các thành phần của hệ thống.
Để lựa chọn tuyến cho các Incoming traffic, có thể sử dụng các cách sau:
- MED: cách này ít sử dụng do MED là một thuộc tính yếu và non-transitive.
- AS-Prepend: phương pháp này được sử dụng thông dụng hơn do có thể làm việc tốt trong tất cả
các mô hình. Nhưng một điều cần phải nhớ, quyết định tuyến cho Incoming traffic rất khó thực
hiện chính xác do các AS khác có thể thay đổi các attribute.
RTC học được route 128.213.1.0 từ RTZ với next hop là 1.1.1.1 do RTC nhận được route
128.213.1.0 đến từ láng giềng RTZ bởi next hop 1.1.1.1, khi nó cập nhật sang RTA thì next hop
ip address không có thay đổi, do dó RTA có next hop là 1.1.1.1.Như chúng ta có thể thấy đối
với RTA thì next hop là 1.1.1.1 là không thể đến được. Để RTA có thể đến được 128.213.1.0/24
thì ở RTC phải thay đổi next-hop-self tới RTA.
Như hình R1 sẽ thiết đặt weight cho những prefixes xuất phát từ AS65020 học từ R2 giá trị weight
150 và những prefixes còn lại thì thiết đặt weight 100. Như vậy, từ R1 đến các prefixes AS65020 sẽ đi
qua R2.
Bây giờ cấu hình cho RTC, RTD sử dụng route map để thiết lập
Local Preference chỉ cho những prefixes từ AS34.
RTC(config)#ip as-path access-list 1 permit _34$
RTC(config)#route-map LP permit 10
RTC(config-route-map)#match as-path 1
RTC(config-route-map)#set local-preference 200
RTC(config)#route-map LP permit 20
RTC(config)#router bgp 256
RTC(config-router)#neighbor 1.1.1.1 remote- as
100
RTC(config-router)#neighbor 1.1.1.1 route-map
LP in
Ta thiết đặt tất cả prefixes xuất phát từ AS34 ở RTD với LP : 300 và RTC với LP : 200 . Như vậy
traffic đi từ AS256 đến AS34 đều đi qua AS300.
Trong ví dụ này thì ta thấy route 172.16.10.0/24 được khởi tạo từ AS1 và được truyền đi qua AS2, AS3,
AS4 và truyền ngược trở lại AS1. Nhận thấy rằng mỗi AS truyền route này qua external peer thì nó thêm
số AS của nó vào đầu danh sách AS_path. Khi route truyền ngược trở lại AS1, thì BGB border router
sẻ nhận ra rằng route này đã từng qua nó và không chấp nhận route này.
BGP dựa trên giá trị của các thuộc tính để quyết định chọn tuyến.
Khi gặp nhiều route đến cùng một đích, thì BGP sẽ chọn route tốt
nhất để truyền tải đến đích. Quá trình chọn route như sau:
- Next Hop không đến được thì route sẽ bị loại bỏ.
- BGP router sẽ chọn path nào có weight lớn nhất.
- Nếu các route có weight đều giống nhau thì BGP router sẽ
chọn route có Local Preference lớn nhất.
- Nếu Local Preference có giá trị như nhau thì BGP router sẽ
chọn route có AS_path ngắn nhất.
- Nếu AS_path có chiều dài bằng nhau, thì router BGP sẽ
chọn route có loại origin thấp nhất.
- Nếu loại origin giống nhau, BGP router sẽ chọn route có
MED nhỏ nhất.
- Nếu MED có giá trị giống nhau thì BGP sẽ chọn route theo
cách sau. External(EBGP) sẽ được ưu tiên hơn
confederation external, nó lại được ưu tiên hơn so với
IBGP.
- Nếu tất cả những thuộc tính đã xét đến đều giống nhau, thì
BGP sẽ chọn route mà có thể đến được theo đường của IGP
láng giềng gần nhất. Xét đến path để đến đích theo path
ngắn nhất đến next hop.
- Nếu tất cả cũng đều giống nhau thì BGP sẽ chọn route đến
từ router có ID nhỏ nhất. Router ID thường là địa chỉ IP cao
nhất của router hay là địa chỉ của cổng loopback.
BGP Communities
Thuộc tính communites là thuộc tính transitive optional . Giá trị của nó có 32 bit .
Có 4 kiểu loại communities phổ biến :
INTERNET : quảng bá prefix tới tất cả BGP neighbors.
NO-ADVERTISE : không quảng bá prefix tới BGP neighbors.
NO-EXPORT : không quảng bá prefix tới EBGP neighbors.
LOCAL-AS : không quảng bá prefix ra ngoài khỏi Sub-AS BGP Confederations.
Ta có thể sử dụng route map để thiết lập các thuộc tính community.
Lệnh route-map có cú pháp như sau:
Router(config)#route-map communitymap
Router(config-route-map)#match ip address 1
Router(config-route-map)#set community no-advertise
Router(config-router)# neighbor 10.1.12.2 route-map communitymap out
or
Router(config)#route−map setcommunity
Router(config-route-map)#match as-path 1
Router(config-route-map)#set community 200 additive
Router(config-router)# neighbor 10.1.12.2 route-map setcommunity out
Nếu không thêm lệnh additive đi sau, giá trị 200 sẽ thay thế các giá trị community khác đang tồn
tại; nếu ta sử dụng additive thì 200 sẽ được thêm vào community. Ngay cả khi chúng ta thiết
lập thuộc tính community, thuộc tính này không được gửi đến các láng giềng theo mặc định. Để gửi
thuộc tính này ta sử dụng lệnh sau:
BGP Filtering
Lọc tuyến cho BGP có thể được vì nhiều lý do khác nhau. Nó có thể được sử dụng để thao tác thuộc
tính của một tuyến BGP. Lọc tuyến cũng có thể được sử dụng để cho phép hay từ chối những tuyến
được quảng bá bởi BGP speaker khác.
Lọc tuyến có thể là lọc tuyến vào (Ingress filtering) hay lọc tuyến ra (Egress filtering).
Lọc tuyến vào: Có thể xảy ra khi một tuyến được nhận bởi BGP speaker và đưa tới chính sách đầu vào.
Tại điểm này, quản trị hệ thống có thể tạo một cách thức mà nó sẽ đồng ý hay từ chối những tuyến nào
đó. Quản trị hệ thống cũng có thể thiết lập các cách thức nào đó, mà nó sẽ thao tác thuộc tính của tuyến
BGP.
Lọc tuyến ra: Xảy ra khi một tuyến được đưa tới chính sách đầu ra. Chức năng của lọc ra tương tự như
lọc vào. Chỉ có sự khác biệt là BGP-speaker đưa ra quyết định những tuyến sẽ được quảng bá tới láng
giềng của nó và thao tác những thuộc tính của những tuyến đó.
Các BGP update có thể được kiểm soát. Nhìn chung, trong các giao thức định tuyến, kiểm soát các cập
nhật là một việc tốt. Việc kiểm soát các cập nhật giúp cho đơn giản hoá hệ thống mạng và dể dàng bảo
trì. Việc thiết kế các thông tin định tuyến được chuyển đi như thế nào cũng được xem là một tác vụ cơ
bản của bảo mật mạng và điều này giúp cho giảm nguy cơ bị routing-loop.
Access-list cho AS_PATH
Được dùng để lọc các AS. Một ACL được dùng trong BGP sẽ lọc các update được gửi từ một router
peer trên AS path.
R1(config)#ip as-path access-list 4 deny _300_
R1(config)#ip as-path access-list 4 permit .*
R1(config)#router bgp 100
R1(config-router)#neighbor 10.1.12.2 filter-list 4 in
Định nghĩa ra as-path từ chối tất cả tuyến đi qua AS 300. Các tuyến còn lại sẽ được cho phép. Như vậy,
R1 sẽ sử dụng as-path access-list để lọc các tuyến học R2.
Prefix list
Được dùng để lọc các prefix, đặc biệt trong quá trình redistribution. Cơ chế dùng prefix-list dựa trên
prefix của một địa chỉ.
R1(config)#ip prefix-list list1 seq 5 deny 3.0.0.0/8
R1(config)#ip prefix-list list1 seq 10 permit 0.0.0.0/0 le 32
R1(config)#router bgp 100
R1(config-router)#neighbor 10.1.12.2 prefix-list list1 in
Định nghĩa ra prefix-list với tên list1, prefix-list này thực hiện từ chối prefix 3.0.0.0/8 được quảng bá
bởi R3. Còn lại tất cả các prefix sẽ được chấp nhận. R1 sẽ sử dụng prefix-list để lọc các prefix được
quảng bá sang bởi R2.
Distribute list
Distribute-list được dùng để lọc các cập nhật. Mặc dù distribute-list thường được dùng trong
redistribution, công cụ này không chỉ dành riêng cho quá trình redistribution. Cả prefix-list và distribute-
list đều lọc dựa trên địa chỉ mạng chứ không như dùng AS_PATH.
R1(config)#access-list 10 deny 3.0.0.0 0.255.255.255
R1(config)#access-list 10 permit any
R1(config)#router bgp 100
R1(config-router)#neighbor 10.1.12.2 distribute-list 10 in
Thực hiện tạo ACL 10 để từ chối mạng 3.0.0.0/24 và cho phép tất cả mạng còn lại. R1 áp dụng distribute-
list với số 10 là acl-number để lọc tất cả mạng được quảng bá sang bởi R2.
Route map
Route map được dùng để định nghĩa chính sách định tuyến. Một route-map là một công cụ phức tạp qua
đó router hoạt động khi một match được nhận dạng. Route map được dùng trong BGP để thiết lập các
thuộc tính của BGP để chọn ra đường đi tốt nhất và đồng thời nó cũng dùng để lọc tuyến.
R1(config)#ip as-path access-list 1 deny _300$
R1(config)#ip as-path access-list 1 permit .*
R1(config)#route-map Route_Filter permit 10
R1(config-route-map)#match as-path 1
R1(config)#router bgp 100
R1(config-router)#neighbor 10.1.12.2 route-map Route_Filter in
Sử dụng as-path acl chỉ từ chối mạng được quảng bá bởi AS 300 và cho phép các mạng còn lại. Route-
map sẽ kết hợp với as-path acl và mệnh đề trong route-map là permit nên tất cả các mạng thỏa mãn yêu
cầu as-path sẽ được học bởi R1.
BGP Advance
Mặc dù BGP là một giao thức ngoại vùng, nó có hai kiểu : iBGP và eBGP. Sự khác nhau phụ thuộc vào
chức năng của giao thức định tuyến. Router sẽ xác định khi nào thì một BGP sẽ là eBGP hoặc là một
iBGP bằng cách kiểm tra giá trị AS được gửi trong thông điệp open-message. eBGP sẽ tương thích với
các yêu cầu chung của một giao thức ngoại vùng. eBGP sẽ gửi các thông tin định tuyến giữa các AS
khác nhau. Vì vậy, router ở biên giới các AS là eBGP router. iBGP được dùng trong một AS. IBGP
chuyển các thông tin đến tất cả các BGP router bên trong domain và đảm bảo rằng tất cả các router có
chung một hiểu biết về các mạng hiện có. IBGP được dùng giữa các router trong cùng một AS.
Để thiết kế và triển khai BGP chính xác, có một vài đặc điểm của BGP cần phải được hiểu. iBGP không
nhất thiết phải kết nối trực tiếp về mặt vật lý. Không giống như RIP hoặc OSPF hoặc IPv6, các router
chạy iBGP không cần phải kết nối trực tiếp trên cùng một hạ tầng mạng. Một số giao thức khác, chẳng
hạn như OSPF sẽ định tuyến các gói BGP giữa các iBGP router.
Thông qua các kết nối logic, TCP sẽ route các gói đi qua các router bởi các bảng định tuyến được duy
trì bởi OSPF. Để BGP có thể truyền các thông tin định tuyến vào bên trong AS, nó có thể dùng
redistribute từ BGP vào IGP. Quá trình redistribute này có thể rất phức tạp.
Một route được truyền bởi router bằng một trong những phương thức sau:
- Thông qua lệnh network
- Được redistribute từ một IGP
- Được redistribute từ tuyến đường tĩnh
Aggregate Address
Khi bạn cấu hình aggregate-address mà không dùng thêm một tùy chọn nào, route được sinh ra sẽ không
kế thừa bất cứ một attribute nào của từng specific route như AS_PATH hoặc community. Có thể sử
dụng thêm các option :
- Summary-only : chỉ quảng bá aggregate route và ngưng không quảng bá các route con.
- Suppress-map : kết hợp với route-map để ngưng không quảng bá các route con.
- AS-Set : aggregate route sẽ được kế thừa từ AS-PATH từ các route con.
R3(config)#router bgp 34
R3(config-router)#aggregate-address 200.0.0.0 255.255.252.0
Router R2 quảng bá mạng 200.0.2.0/24. Router R1 quảng bá mạng 200.0.1.0/24 . Trên router R3 thực
hiện việc summary những mạng của R1, R2 thành mạng 200.0.0.0/22.
Luật BGP split horizon nói rằng mặc dù các router không cần kết nối trực tiếp, nó cần phải fully-mesh.
Điều kiện này nhằm đảm bảo các mạng phải thấy nhau. Để tránh routing-loop, giao thức BGP phải tuân
theo luật split horizon rằng không có update nào học từ một peer có thể gửi đến một peer khác. Điều
này có nghĩa rằng, một network khi được nhận sẽ không phân phối đến các router iBGP khác. Các mạng
này chỉ được truyền đến các router BGP trong các AS khác, còn gọi là eBGP peer.
BGP duy trì các thông tin cập nhật bằng cách gửi các update trên các kết nối TCP. Các kết nối TCP này
là một cách để đảm bảo tính chính xác của thông tin, nhưng nhược điểm của nó là tốn nhiều tài nguyên
hệ thống. Số kết nối càng lớn, tài nguyên yêu cầu càng nhiều. Một công thức đơn giản như sau:
Sẽ cần n (n – 1) / 2 kết nối TCP trên một mạng gồm n router BGP.
Như vậy một mạng gồm 10 router sẽ yêu cầu 10 (10 – 1) / 2 = 10 * 9 / 2 = 45 phiên làm việc. Công
thức này chấp nhận được trong môi trường có một vài kết nối, tuy nhiên nếu hệ thống mạng là một ISP
thì thiết kế trên không phù hợp.
Cũng có những chi phí quản lý trong việc duy trì các mạng kết nối fully-mesh. Ví dụ, mỗi lần có một
router BGP mới thêm vào, số kết nối phải thiết lập cũng sẽ tăng lên nhiều lần tương ứng. Đối với TCP,
không chỉ phải duy trì các kết nối rất tốn tài nguyên mà còn là các updates phải đi trên các kết nối này.
Nếu tất cả các router kết nối với tất cả các router khác, một số lượng lớn thông tin sẽ được gửi đi trùng
lắp.
Thiết kế và cấu hình một mạng iBGP
Vấn đề hạn chế khả năng mở rộng trong một mạng fully meshed iBGP có thể được giải quyết bằng các
giải pháp thiết kế. Các giải pháp về cấu hình sẽ cho phép ta bỏ qua các iBGP phải được full mesh. Các
lệnh mới này cho phép ta phát triển một mạng hub-and-spoke để đơn giản hóa các kết nối TCP. Giải
pháp được trong phần này là giải pháp dùng route reflector.
Route Reflectors
Một route reflector là một router được cấu hình để chuyển những routing update đến các router láng
giềng hoặc các router chạy BGP bên trong một AS. Các router iBGP cần phải được chỉ ra như là client
trong khi cấu hình. Khi một client gửi một update đến route reflector, nó sẽ chuyển update đó đến các
router client khác. Route reflector và client sẽ đòi hỏi một quan hệ peer đầy đủ bởi vì route reflector sẽ
gửi các cập nhật từ các client khác nhưng việc thiết lập peer giữa các client là không cần thiết.
Một route reflector sẽ kết nối đến các peers mà nó không đẩy route đến. Từ quan điểm của route reflector,
các neighbor này được gọi là non clients. Các router nonclients phải được kết nối fully-meshed với các
route reflector và với các non client khác. Khi một router đã cấu hình như một route reflector, nó sẽ đẩy
những đường đi được học từ các iBGP khác chỉ đến các route reflector clients và tới các iBGP/eBGP
neighbors. Điều này có nghĩa là một thiết kế hub-and-spoke có thể được triển khai trong một AS giữa
các iBGP peers, như vậy giảm thiểu số session giữa các routers. Cả route reflector và các client của nó
hình thành nên một đơn vị để chia sẽ thông tin. Đơn vị này gọi là cluster.
Một Autonomous System có thể được chia ra thành các cluster, trong các các cluster sẽ có các route
reflector được chỉ định và cấu hình. Phải có ít nhất một route reflector trong mỗi cluster. Nếu một route
reflector kết nối đến các route reflector khác, route reflector phải được fully-meshed. Điều này nhằm
đảm bảo các bảng iBGP routing là đầy đủ. Khi một route reflector chuyển đi một update, thuộc tính
Originator_ID sẽ được thiết lập. Đây là BGP routerID của router đã tạo ra đường đi. Nếu router này
nhận lại bản update đó, router sẽ thấy ID của chính nó và sẽ bỏ qua packet. Điều này nhằm ngăn ngừa
khả năng routing loop. Nếu có nhiều route reflector trong cluster, các router sẽ phân biệt với nhau bằng
clusterID. Thông số này phục vụ cùng một mục đích như thuộc tính Originator_ID để ngăn ngừa routing
loops.
Với cách dùng route reflector, router đóng vai trò route reflector sẽ tốn nhiều tài nguyên hơn. Nếu cấu
hình route reflector không chính xác, nó có thể gây ra routing-loop. Có nhiều mức route reflector có thể
được cấu hình bằng cách tạo ra các thiết kế theo thứ bậc. Các router không là thành phần của route
reflector sẽ không bị ảnh hưởng trong những thay đổi về thiết kế và những thay đổi về quá trình truyền
các cập nhật. Thay vào đó, các router này sẽ không nhận biết được bất cứ thay đổi nào vì nó vẫn nhận
được các update mà nó cần. Bản thân các routing update cũng không bị thay đổi bởi vì không có sự thay
đổi nào trong giá trị các thuộc tính được mang trong các routing update.
Chính vì các đặc điểm trên, quá trình chuyển đổi thiết kế một hệ thống mạng nào đó sang dạng dùng
route reflector thì rất dễ dàng. Một thiết kế quan trọng là bản thân các route reflector trong một AS cũng
phải fully-meshed. Ngoài ra, một route reflector này có thể là client cho một route reflector khác. Thiết
kế như vậy khá phức tạp và yêu cầu xem xét cẩn thận bởi vì khi các route reflector được cấu hình và
split horizon bị disable, không còn một cơ chế nào để bảo vệ routing loop.