{"id":34900,"date":"2024-08-20T10:25:53","date_gmt":"2024-08-20T03:25:53","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/08\/20\/configure-ip-failover-over-bgp-using-frr-advanced\/"},"modified":"2024-08-20T10:25:53","modified_gmt":"2024-08-20T03:25:53","slug":"configure-ip-failover-over-bgp-using-frr-advanced","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/08\/20\/configure-ip-failover-over-bgp-using-frr-advanced\/","title":{"rendered":"C\u1ea5u h\u00ecnh IP failover qua BGP s\u1eed d\u1ee5ng FRR (n\u00e2ng cao)"},"content":{"rendered":"<p class=\"has-background\" style=\"background-color:#74f78c33\">Kh\u00f4ng ph\u1ea3i t\u1ea5t c\u1ea3 c\u00e1c trung t\u00e2m d\u1eef li\u1ec7u \u0111\u1ec1u h\u1ed7 tr\u1ee3 \u0111\u1ecbnh c\u1ea5u h\u00ecnh chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng IP qua BGP. Xem l\u1ea1i ph\u1ea7n \u0110\u1ecbnh c\u1ea5u h\u00ecnh chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng tr\u00ean phi\u00ean b\u1ea3n \u0111i\u1ec7n to\u00e1n \u0111\u1ec3 t\u00ecm hi\u1ec3u th\u00eam v\u1ec1 t\u00ednh kh\u1ea3 d\u1ee5ng c\u1ee7a Chia s\u1ebb IP\/chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng IP trong m\u1ed7i trung t\u00e2m d\u1eef li\u1ec7u.<\/p>\n<p>H\u01b0\u1edbng d\u1eabn n\u00e0y tr\u00ecnh b\u00e0y c\u00e1ch s\u1eed d\u1ee5ng c\u00f4ng c\u1ee5 FRRouting (FRR) m\u00e3 ngu\u1ed3n m\u1edf \u0111\u1ec3 \u0111\u1ecbnh c\u1ea5u h\u00ecnh chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng gi\u1eefa hai Phi\u00ean b\u1ea3n \u0111i\u1ec7n to\u00e1n. FRR l\u00e0 d\u1ecbch v\u1ee5 \u0111\u1ecbnh tuy\u1ebfn s\u1eed d\u1ee5ng BGP \u0111\u1ec3 gi\u00e1m s\u00e1t v\u00e0 x\u1eed l\u00fd l\u1ed7i c\u00e1c th\u00e0nh ph\u1ea7n trong c\u1ea5u h\u00ecnh c\u00f3 t\u00ednh s\u1eb5n s\u00e0ng cao. C\u00e1c h\u01b0\u1edbng d\u1eabn n\u00e0y b\u1ed5 sung cho h\u01b0\u1edbng d\u1eabn Chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng \u0111\u1ecbnh c\u1ea5u h\u00ecnh chung tr\u00ean phi\u00ean b\u1ea3n \u0111i\u1ec7n to\u00e1n v\u00e0 nh\u1eb1m m\u1ee5c \u0111\u00edch thay th\u1ebf n\u00e2ng cao cho leastic khi c\u1ea7n nhi\u1ec1u quy\u1ec1n ki\u1ec3m so\u00e1t v\u00e0 t\u00f9y ch\u1ec9nh h\u01a1n.<\/p>\n<p><strong>Gi\u1edbi thi\u1ec7u:<\/strong><\/p>\n<p>Tr\u01b0\u1edbc khi l\u00e0m theo h\u01b0\u1edbng d\u1eabn n\u00e0y, h\u00e3y \u0111\u1ea3m b\u1ea3o r\u1eb1ng nh\u1eefng \u0111i\u1ec1u sau \u0111\u00e3 \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n tr\u00ean m\u1ed7i Compute Instance \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong chi\u1ebfn l\u01b0\u1ee3c chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng IP c\u1ee7a b\u1ea1n.<\/p>\n<ul>\n<li>\u0110\u1ecdc qua h\u01b0\u1edbng d\u1eabn C\u1ea5u h\u00ecnh chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng tr\u00ean m\u1ed9t compute instance \u0111\u1ec3 t\u00ecm hi\u1ec3u th\u00eam v\u1ec1 c\u00e1ch chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng \u0111\u01b0\u1ee3c tri\u1ec3n khai trong \u0111i\u1ec7n to\u00e1n \u0111\u00e1m m\u00e2y Akamai.<\/li>\n<\/ul>\n<ul>\n<li>\u0110\u1eb7t t\u00ean m\u00e1y ch\u1ee7 v\u00e0 c\u1eadp nh\u1eadt t\u1ec7p hosts cho m\u1ed7i Compute Instance.<\/li>\n<\/ul>\n<ul>\n<li>X\u00e1c minh Python3 \u0111\u00e3 \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t. Xem t\u00e0i li\u1ec7u ch\u00ednh th\u1ee9c c\u1ee7a FRR \u0111\u1ec3 t\u00ecm hi\u1ec3u v\u1ec1 c\u00e1c ph\u1ee5 thu\u1ed9c Python c\u1ee7a FRR.<\/li>\n<\/ul>\n<p><strong>chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng<\/strong><\/p>\n<p>C\u00e1c h\u01b0\u1edbng d\u1eabn n\u00e0y cho ph\u00e9p b\u1ea1n c\u1ea5u h\u00ecnh chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng b\u1eb1ng FRR, c\u00f3 th\u1ec3 c\u1ea5u h\u00ecnh r\u1ea5t cao v\u00e0 c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 tri\u1ec3n khai chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng n\u00e2ng cao. H\u01b0\u1edbng d\u1eabn n\u00e0y ph\u1ee5 thu\u1ed9c v\u00e0o h\u01b0\u1edbng d\u1eabn chung v\u1ec1 C\u1ea5u h\u00ecnh chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng tr\u00ean phi\u00ean b\u1ea3n t\u00ednh to\u00e1n cho nhi\u1ec1u b\u01b0\u1edbc.<\/p>\n<p>\u0110\u1ec3 c\u1ea5u h\u00ecnh chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng, h\u00e3y ho\u00e0n th\u00e0nh t\u1eebng ph\u1ea7n theo th\u1ee9 t\u1ef1 hi\u1ec3n th\u1ecb:<\/p>\n<p>T\u1ea1o v\u00e0 chia s\u1ebb \u0111\u1ecba ch\u1ec9 IP \u0111\u01b0\u1ee3c chia s\u1ebb<br \/>\u0110\u1ed1i v\u1edbi m\u1ed7i Phi\u00ean b\u1ea3n t\u00ednh to\u00e1n:<br \/>&#8211; Th\u00eam IP \u0111\u01b0\u1ee3c chia s\u1ebb v\u00e0o c\u1ea5u h\u00ecnh m\u1ea1ng<br \/>&#8211; C\u00e0i \u0111\u1eb7t FRR<br \/>&#8211; C\u1ea5u h\u00ecnh FRR<br \/>&#8211; Ki\u1ec3m tra chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng<\/p>\n<p><strong>C\u00e0i FRR<\/strong><\/p>\n<p>Ph\u1ea7n n\u00e0y cung c\u1ea5p h\u01b0\u1edbng d\u1eabn c\u00e0i \u0111\u1eb7t FRR tr\u00ean h\u1ec7 th\u1ed1ng Debian, Ubuntu v\u00e0 CentOS th\u00f4ng qua tr\u00ecnh qu\u1ea3n l\u00fd g\u00f3i g\u1ed1c c\u1ee7a ch\u00fang. N\u1ebfu b\u1ea1n \u0111ang s\u1eed d\u1ee5ng b\u1ea3n ph\u00e2n ph\u1ed1i kh\u00e1c ho\u1eb7c mu\u1ed1n c\u00e0i \u0111\u1eb7t FRR t\u1eeb ngu\u1ed3n, h\u00e3y l\u00e0m theo h\u01b0\u1edbng d\u1eabn c\u00e0i \u0111\u1eb7t ch\u00ednh th\u1ee9c c\u1ee7a FRR \u0111\u1ec3 c\u00e0i \u0111\u1eb7t FRR b\u1eb1ng git.<\/p>\n<p><strong>Debian and Ubuntu<\/strong><\/p>\n<p>Supported distributions: Ubuntu 20.04, 18.04, and 16.04 | Debian 11, 10, and 9<\/p>\n<ul>\n<li>Set the FRR environment variable to the version you would like to install. The possible values are frr-6, frr-7, frr-8, and frr-stable, though it is recommended to use frr-stable to install the latest stable version.<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>FRRVER=\"frr-stable\"<\/code><\/pre>\n<ul>\n<li>Th\u00eam kho l\u01b0u tr\u1eef RPM c\u1ee7a FRR v\u00e0o h\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n:<\/li>\n<\/ul>\n<p><strong>CentOS\/RHEL 8<\/strong><\/p>\n<div class=\"is-layout-constrained wp-block-group\">\n<div class=\"wp-block-group__inner-container\">\n<blockquote class=\"wp-block-quote\">\n<p>curl -O https:\/\/rpm.frrouting.org\/repo\/$FRRVER-repo-1-0.el8.noarch.rpm <\/p>\n<p>sudo dnf install .\/$FRRVER*<\/p>\n<\/blockquote>\n<\/div>\n<\/div>\n<p><strong>C\u00e0i \u0111\u1eb7t FRR<\/strong><\/p>\n<p><strong>CentOS\/RHEL 8<\/strong><\/p>\n<pre class=\"wp-block-code\"><code>sudo dnf install frr frr-pythontools<\/code><\/pre>\n<p><strong>CentOS\/RHEL 7<\/strong><\/p>\n<pre class=\"wp-block-code\"><code>sudo yum install frr frr-pythontools<\/code><\/pre>\n<p><strong>C\u1ea5u h\u00ecnh FRR<\/strong><\/p>\n<p>Sau khi c\u00e0i \u0111\u1eb7t FRR, gi\u1edd b\u1ea1n c\u00f3 th\u1ec3 c\u1ea5u h\u00ecnh \u0111\u1ec3 b\u1eadt IP failover.<\/p>\n<ul>\n<li>FRR ho\u1ea1t \u0111\u1ed9ng b\u1eb1ng nhi\u1ec1u giao th\u1ee9c kh\u00e1c nhau. V\u00ec ch\u00fang ta \u0111ang s\u1eed d\u1ee5ng FRR \u0111\u1ec3 h\u1ed7 tr\u1ee3 BGP, b\u01b0\u1edbc ti\u1ebfp theo l\u00e0 b\u1eadt bgpd daemon m\u1ed9t c\u00e1ch r\u00f5 r\u00e0ng. S\u1eed d\u1ee5ng tr\u00ecnh so\u1ea1n th\u1ea3o v\u0103n b\u1ea3n theo l\u1ef1a ch\u1ecdn c\u1ee7a b\u1ea1n, b\u1eadt bgpd daemon b\u1eb1ng c\u00e1ch c\u1eadp nh\u1eadt gi\u00e1 tr\u1ecb c\u1ee7a n\u00f3 th\u00e0nh yes trong t\u1ec7p c\u1ea5u h\u00ecnh daemon FRR:<\/li>\n<\/ul>\n<blockquote class=\"wp-block-quote\">\n<p># The watchfrr and zebra daemons are always started. <\/p>\n<p># bgpd=yes<\/p>\n<\/blockquote>\n<ul>\n<li>Thu th\u1eadp c\u00e1c th\u00f4ng tin sau \u0111\u00e2y, c\u1ea7n thi\u1ebft cho b\u01b0\u1edbc ti\u1ebfp theo:<\/li>\n<\/ul>\n<p><strong>\u0110\u1ecba ch\u1ec9 IP hared<\/strong> ([SHARED_IP]): \u0110\u1ecba ch\u1ec9 IPv4 b\u1ea1n \u0111\u00e3 chia s\u1ebb ho\u1eb7c \u0111\u1ecba ch\u1ec9 t\u1eeb ph\u1ea1m vi IPv6 m\u00e0 b\u1ea1n \u0111\u00e3 chia s\u1ebb. B\u1ea1n c\u00f3 th\u1ec3 ch\u1ecdn b\u1ea5t k\u1ef3 \u0111\u1ecba ch\u1ec9 n\u00e0o t\u1eeb ph\u1ea1m vi IPv6. V\u00ed d\u1ee5: trong ph\u1ea1m vi 2001:db8:e001:1b8c::\/64, \u0111\u1ecba ch\u1ec9 2001:db8:e001:1b8c::1 c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng.<br \/><strong>Ti\u1ec1n t\u1ed1 ([PREFIX]):<\/strong> \u0110\u1ed1i v\u1edbi \u0111\u1ecba ch\u1ec9 IPv4, h\u00e3y s\u1eed d\u1ee5ng 32. \u0110\u1ed1i v\u1edbi \u0111\u1ecba ch\u1ec9 IPv6, h\u00e3y s\u1eed d\u1ee5ng 56 ho\u1eb7c 64 t\u00f9y thu\u1ed9c v\u00e0o k\u00edch th\u01b0\u1edbc c\u1ee7a ph\u1ea1m vi b\u1ea1n \u0111ang chia s\u1ebb.<br \/>Giao th\u1ee9c ([PROTOCOL]): S\u1eed d\u1ee5ng ipv4 khi chia s\u1ebb \u0111\u1ecba ch\u1ec9 IPv4 v\u00e0 ipv6 khi chia s\u1ebb \u0111\u1ecba ch\u1ec9 IPv6.<br \/>T\u00ean m\u00e1y ch\u1ee7 ([HOSTNAME]): T\u00ean m\u00e1y ch\u1ee7 \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh tr\u00ean Compute Instance m\u00e0 b\u1ea1n \u0111ang \u0111\u1ecbnh c\u1ea5u h\u00ecnh (v\u00ed d\u1ee5: atl-bgp-1).<br \/><strong>Vai tr\u00f2 ([ROLE]): <\/strong>Vai tr\u00f2 c\u1ee7a Compute Instance n\u00e0y trong chi\u1ebfn l\u01b0\u1ee3c chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng c\u1ee7a b\u1ea1n.<br \/>primary: T\u1ea5t c\u1ea3 c\u00e1c y\u00eau c\u1ea7u \u0111\u01b0\u1ee3c \u0111\u1ecbnh tuy\u1ebfn \u0111\u1ebfn Compute Instance n\u00e0y, mi\u1ec5n l\u00e0 n\u00f3 c\u00f3 th\u1ec3 truy c\u1eadp \u0111\u01b0\u1ee3c.<br \/>secondary: N\u1ebfu primary instance kh\u00f4ng th\u00e0nh c\u00f4ng, t\u1ea5t c\u1ea3 c\u00e1c y\u00eau c\u1ea7u \u0111\u01b0\u1ee3c \u0111\u1ecbnh tuy\u1ebfn \u0111\u1ebfn Compute Instance n\u00e0y, mi\u1ec5n l\u00e0 n\u00f3 c\u00f3 th\u1ec3 truy c\u1eadp \u0111\u01b0\u1ee3c.<br \/><strong>Data center ID ([DC_ID]):<\/strong> ID c\u1ee7a trung t\u00e2m d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n. Xem m\u1ee5c IP Sharing availability \u0111\u1ec3 bi\u1ebft ID t\u01b0\u01a1ng \u1ee9ng.<\/p>\n<ul>\n<li>Ch\u1ec9nh s\u1eeda t\u1ec7p \/etc\/frr\/frr.conf v\u00e0 th\u00eam c\u00e1c d\u00f2ng sau. \u0110\u1ea3m b\u1ea3o b\u1ea1n thay th\u1ebf m\u1ecdi phi\u00ean b\u1ea3n c\u1ee7a [SHARED_IP], [HOSTNAME], [ROLE] v\u00e0 [DC_ID] nh\u01b0 \u0111\u00e3 n\u00eau \u1edf tr\u00ean.<\/li>\n<\/ul>\n<div class=\"is-layout-constrained wp-block-group\">\n<div class=\"wp-block-group__inner-container\">\n<blockquote class=\"wp-block-quote\">\n<p>hostname [HOSTNAME]<\/p>\n<p>router bgp 65001<br \/>no bgp ebgp-requires-policy<br \/>coalesce-time 1000<br \/>bgp bestpath as-path multipath-relax<br \/>neighbor RS peer-group<br \/>neighbor RS remote-as external<br \/>neighbor RS ebgp-multihop 10<br \/>neighbor RS capabilities extended-nexthop<br \/>neighbor 2600:3c0f:[DC_ID]:34::1 peer-group RS<br \/>neighbor 2600:3c0f:[DC_ID]:34::2 peer-group RS<br \/>neighbor 2600:3c0f:[DC_ID]:34::3 peer-group RS<br \/>neighbor 2600:3c0f:[DC_ID]:34::3 peer-group RS<br \/>neighbor 2600:3c0f:[DC_ID]:34::4 peer-group RS<\/p>\n<p>address-family [PROTOCOL] unicast<br \/>network [SHARED_IP]\/[PREFIX] route-map [ROLE]<br \/>redistribute static<br \/>exit-address-family<\/p>\n<p>route-map primary permit 10<br \/>set community 65000:1<br \/>route-map secondary permit 10<br \/>set community 65000:2<\/p>\n<p>ipv6 nht resolve-via-default<\/p>\n<\/blockquote>\n<\/div>\n<\/div>\n<p>Kh\u1edfi \u0111\u1ed9ng l\u1ea1i FRR<\/p>\n<p><code>sudo systemctl restart frr<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kh\u00f4ng ph\u1ea3i t\u1ea5t c\u1ea3 c\u00e1c trung t\u00e2m d\u1eef li\u1ec7u \u0111\u1ec1u h\u1ed7 tr\u1ee3 \u0111\u1ecbnh c\u1ea5u h\u00ecnh chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng IP qua BGP. Xem l\u1ea1i ph\u1ea7n \u0110\u1ecbnh c\u1ea5u h\u00ecnh chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng tr\u00ean phi\u00ean b\u1ea3n \u0111i\u1ec7n to\u00e1n \u0111\u1ec3 t\u00ecm hi\u1ec3u th\u00eam v\u1ec1 t\u00ednh kh\u1ea3 d\u1ee5ng c\u1ee7a Chia s\u1ebb IP\/chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng IP trong m\u1ed7i<\/p>\n","protected":false},"author":1,"featured_media":35662,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[87],"tags":[],"class_list":["post-34900","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-networking-compute"],"_links":{"self":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34900","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/comments?post=34900"}],"version-history":[{"count":0,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34900\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/35662"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=34900"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=34900"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=34900"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}