BGP in the Data Centerを読みました (3/6) : Chapter 3 - Building an Automatable BGP Configuration
今回は3章についてまとめました。 内容はIP ClosネットワークにおけるeBGP設定の自動化です。
データセンタネットワーク全般については、”Cloud-Native Data Center Networking” を読むのがおすすめです。 筆者が同じ方で、 "BGP in the Data Center" に記載されている内容も含まれています。 この本はCumulus Networksにより無償で公開されています。 ぜひ読んでみてください。
Download your copy of latest book by Dinesh Dutt, "Cloud Native Data Center Networking." It's a 400-page must-read for all network architects, developers and operators. Don't miss out! #CumulusResources https://t.co/JwAAiOHh1f pic.twitter.com/nVJUZyw67Z
— CumulusNetworks (@CumulusNetworks) 2020年1月13日
各Chapterまとめ
- Chapter 1 - Introduction to Data Center Networks
- Chapter 2 - How BGP Has Been Adapted to the Data Center
- Chapter 3 - Building an Automatable BGP Configuration
- Chapter 4 - Reimagining BGP Configuration
- Chapter 5 - BGP Life Cycle Management
- Chapter 6 - BGP on the Host
2章ではDC内に適したeBGP設定について見ていきました。 実環境では、その設定作業の効率化のために自動化する必要があります。 3章では、Ansible等のツールで自動化しやすいBGP設定について見ていきます。
3章はIPv4でのClosネットワーク構築を前提にしています。設定するルーティングスイートはFRRoutingです。 RFC 5549のextended nexthop等については4章で触れます。
Chapter 3 - Building an Automatable BGP Configuration
設定自動化の指針
1. パターンの発見
自動化するには、まずパターンを見つける必要があります。 パターンが見つからない場合はそもそも自動化が困難です。
2. パターン内の重複を排除
パターンを見つけるだけでは自動化はできません。 設定パターンの中に重複がある場合、重複箇所全てで変更が必要になってしまいます。 安全に変更できるように、重複を排除する必要があります。
DC内IP ClosネットワークのeBGP設定の自動化
図のような2層IP Closネットワークトポロジにおける設定自動化について見ていきます。
本記事では、ESXi 6.7上のCumulusVX 3.7.7で試しました。 試した環境でのノードのインタフェース名は、leafでは左からswp3, swp4、spineでは左からswp1, swp2, swp3, swp4です(Cumulusで使われるインタフェース名の命名規則がswpXです。swpはswitch portの略らしいです)。
各leafは、配下に図のIPプレフィックスを持つサーバが接続されているものとします。
今回はサーバは用意せず、leafのVLANインタフェースにIPプレフィックスを割り当てるのみとしました。
NCLUにより、
各leaf0X (X = 1, 2, 3, 4) にVLANインタフェース (VLAN ID = X * 10) とIPプレフィックス 10.1.X.1/26
を割り当てました。
# leaf01のVLANインタフェース設定 cumulus@dc-leaf01:~$ net add vlan 10 ip address 10.1.1.1/26 cumulus@dc-leaf01:~# cat /etc/network/interfaces auto bridge iface bridge bridge-vids 10 bridge-vlan-aware yes auto vlan10 iface vlan10 address 10.1.1.1/26 vlan-id 10 vlan-raw-device bridge
まずは従来どおりにeBGPを設定してみて、そこから自動化用の設定を探ります。
従来どおりにeBGPを設定
先ほどのネットワークトポロジにおけるleaf01とleaf02のBGP設定を、横に並べて比較すると次のとおりです。
次の4項目以外はleaf01とleaf02の設定が同じです。
なお、BGPの各設定項目の説明は次のとおりです。
# leaf01の設定 (/etc/frr/frr.confより抜粋) frr defaults datacenter # DC用の設定がデフォルトで有効化 hostname dc-leaf01 # ホスト名 router bgp 4200000001 # 自身のASNを指定 (4-byte ASN) bgp router-id 10.0.254.1 # BGPノードを識別する一意のID no bgp default ipv4-unicast # BGPの接続状態に変化があればログ出力 bgp bestpath as-path multipath-relax # 異なるASNリストを持つAS_PATHでマルチパスを有効化 neighbor ISL peer-group # BGP設定でISLというテンプレートを作成 neighbor ISL bfd # ISLテンプレートでBFDを有効化 neighbor ISL timers connect 5 # ISLテンプレートでconnect timerを5秒に設定 neighbor 169.254.1.0 remote-as 4200000000 # BGPセッションを確立したいIPアドレスとASNを指定 (この場合はspine01) neighbor 169.254.1.0 peer-group ISL # ネイバーにISLテンプレートを適用 neighbor 169.254.1.0 remote-as 4200000000 # BGPセッションを確立したいIPアドレスとASNを指定 (この場合はspine02) neighbor 169.254.2.0 peer-group ISL # ネイバーにISLテンプレートを適用 ! address-family ipv4 unicast # BGPがマルチプロトコル対応のため、利用するアドレスファミリを指定 network 10.0.254.1/32 # アドバタイズするIPプレフィックスを指定 (この場合は自身のloopback IPアドレス) network 10.1.1.0/26 # アドバタイズするIPアドレスを指定 (この場合は配下のサーバのIPプレフィックス) neighbor ISL activate # アドバタイズすることを明示的に設定する必要がある maximum-paths 64 # 可能であればIPプレフィックスに対して複数のパスを利用 exit-address-family # 利用するアドレスファミリに関する設定ブロックを終了 !
FRRoutingではfrr defaults datacenter
によってDC向けのデフォルト値が設定されています。
connect timerのデフォルト値は10秒ですが、
今回は5秒に上書きしました。
leaf01
で明示的に設定しなかった項目は次のとおりです。
# FRRoutingのDC向けデフォルト値設定 bgp log-neighbor-changes # BGPのネイバーの状態変化をログに出力 timers bgp 3 9 # keepalive timerを3秒, holdtimerを9秒に設定 neighbor ISL advertisement-interval 0 # ネイバーのadvertisement intervalを0秒に設定
重複の排除
コーディングでコードの重複を避けることは、DRY原則 (Don't repeat yourself) として知られています。 同じ情報がコードの複数箇所にある場合、1つの変更が複数箇所に波及してしまいます。 変更に手間がかかるだけでなく、変更漏れが発生する恐れもあります。
BGPのconfigについても、同じことが言えます。
ネイバーで共通の設定は、 neighbor ISL peer-group
でISLテンプレートにまとめることで重複を排除しています。
また、 FRRoutingのDC向けのデフォルト値についても設定を省略しています。
仮に peer-group
およびFRRoutingのデフォルト値を利用しない場合、設定行数は多くなります。
# leaf01のBGP設定においてpeer-groupおよびデフォルト値を使用しない場合 router bgp 4210000001 bgp router-id 10.0.254.1 bgp log-neighbor-changes no bgp default ipv4-unicast bgp bestpath as-path multipath-relax timers bgp 3 9 neighbor 169.254.1.0 advertisement-interval 0 neighbor 169.254.2.0 advertisement-interval 0 neighbor 169.254.1.0 bfd neighbor 169.254.2.0 bfd neighbor 169.254.1.0 timers connect 5 neighbor 169.254.2.0 timers connect 5 neighbor 169.254.1.0 remote-as 4200000000 neighbor 169.254.2.0 remote-as 4200000000 ! address-family ipv4 unicast network 10.0.254.1/32 network 10.1.1.0/26 neighbor 169.254.1.0 activate neighbor 169.254.2.0 activate maximum-paths 64 exit-address-family !
先ほど示したleafおよびspineのBGP設定では、 bgp router-id X.X.X.X
と network X.X.X.X/32
で /32
の有無の違いはあるものの重複しています。
# leaf01のBGP設定からrouter-idとnetworkを抜粋 router bgp 4200000001 bgp router-id 10.0.254.1 # 10.0.254.1 ! address-family ipv4 unicast network 10.0.254.1/32 # 10.0.254.1 network 10.1.1.0/26 exit-address-family !
また、network
ステートメントでは、自身のloopback IPアドレスおよび、leafの配下にある /26
のプレフィックスをアドバタイズするよう指定しています。
VLANにより配下のサーバのプレフィックスが複数存在する場合、 それらを個々に設定する必要があります。
なお、リンク間の 169.254.0.0/16
はDCネットワーク全体では不要なためアドバタイズしません。
これにより、BGPメッセージやルーティングテーブルのオーバヘッドを削減できます。
spineのBGP設定も、leafとほぼ同様です。 spineの場合は、2章で触れたpath hunting防止のために同じASNを割り当てています。 また、自身のloopback IPアドレスのみをアドバタイズします。
設定したeBGPの状態をspine01で確認しておきます。 leaf01からleaf04とBGPセッションを確立し、IPプレフィックスを2つ学習しています。
cumulus@dc-spine01:~$ net show bgp ipv4 unicast summary BGP router identifier 10.0.254.254, local AS number 4200000000 vrf-id 0 BGP table version 25 RIB entries 17, using 2584 bytes of memory Peers 4, using 77 KiB of memory Peer groups 1, using 64 bytes of memory Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd dc-leaf01(169.254.1.1) 4 4210000001 720 714 0 0 0 00:34:46 2 dc-leaf02(169.254.1.3) 4 4210000002 720 714 0 0 0 00:34:46 2 dc-leaf03(169.254.1.5) 4 4210000003 720 714 0 0 0 00:34:46 2 dc-leaf04(169.254.1.7) 4 4210000004 720 714 0 0 0 00:34:46 2 Total number of neighbors 4
cumulus@dc-spine01:~$ net show route bgp RIB entry for bgp ================= Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR, > - selected route, * - FIB route B>* 10.0.254.1/32 [20/0] via 169.254.1.1, swp1, 00:39:04 B>* 10.0.254.2/32 [20/0] via 169.254.1.3, swp2, 00:39:04 B>* 10.0.254.3/32 [20/0] via 169.254.1.5, swp3, 00:39:04 B>* 10.0.254.4/32 [20/0] via 169.254.1.7, swp4, 00:39:03 B>* 10.1.1.0/26 [20/0] via 169.254.1.1, swp1, 00:39:04 B>* 10.1.2.0/26 [20/0] via 169.254.1.3, swp2, 00:39:04 B>* 10.1.3.0/26 [20/0] via 169.254.1.5, swp3, 00:39:04 B>* 10.1.4.0/26 [20/0] via 169.254.1.7, swp4, 00:39:03
cumulus@dc-spine01:~$ net show bgp neighbor 169.254.1.1 routes BGP table version is 25, local router ID is 10.0.254.254 Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, i internal, r RIB-failure, S Stale, R Removed Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 10.0.254.1/32 169.254.1.1 0 0 4210000001 i *> 10.1.1.0/26 169.254.1.1 0 0 4210000001 i Displayed 2 routes and 9 total paths
ここからは、自動化を想定したBGPの設定について見ていきます。
自動化を想定したBGPの設定
Redistribute Routes
全てのルーティングプロトコルには、あるプロトコルから学習したプレフィックスを再配布するオプションが用意されています。
このオプションを用いて、BGPの network
ステートメントでのプレフィックス指定を排除します。
FRRoutingやCisco、Arista等の多くのルーティングスイートでは、 redistribute
で設定します。
Junosの場合には policy-options policy-statement
を使います。
redistribute PROTOCOL route-map ROUTE-MAP-NAME
FRRoutingの場合、PROTOCOLには次の内容を指定します。
protocol | 経路の内容 |
---|---|
static |
スタティックに設定した経路 |
connected |
インタフェースのIPプレフィックスに関連する経路 |
kernel |
Linux kernelに設定された経路 (zebraを介さずnetlinkで設定) |
ospf |
OSPFで学習した経路 |
bgp |
BGPで学習した経路 |
rip |
RIPで学習した経路 |
OSPFで学習した経路をBGPで再配布するなど、 redistirbute
はDC内のeBGP以外でも使われているオプションです。
leaf配下のサーバのIPプレフィックスおよび自身のloopback IPアドレスへの経路は、connected routeに該当します。
そのため、IPプレフィックスごとに書いていた network
ステートメントを、単一の redistribute connected
に置き換えることができます。
redistribute
を使うと、leaf01の設定は次のようになります。
frr defaults datacenter ! router bgp 4200000001 bgp router-id 10.0.254.1 no bgp default ipv4-unicast bgp bestpath as-path multipath-relax neighbor ISL peer-group neighbor ISL remote-as external neighbor ISL bfd neighbor ISL timers connect 5 neighbor 169.254.1.0 remote-as 4200000000 neighbor 169.254.2.0 remote-as 4200000000 ! address-family ipv4 unicast neighbor ISL activate redistribute connected # network指定をredistributeに置換 maximum-paths 64 exit-address-family !
redistribute
では、インタフェースに誤設定してしまったIPアドレスをアドバタイズしてしまう懸念があります。
この問題を回避するために、ルーティングポリシーを指定します。
Routing Policy ( route-map
)
ルーティングポリシーはif-then-elseの構文で構成されます。 マッチの条件と条件に一致したときのアクションからなります。 ルーティングポリシーのシンプルな使い方が、経路のacceptとrejectです。 それ以外にも複雑な使い方として、BGPのMED等のメトリックやcommunityの変更等ができます。
ルーティングポリシーは次のような経路に適用できます。
- ピアからアドバタイズされた経路
- ピアにアドバタイズした経路
redistribute
で再配布された経路
また、ルーティングポリシーの記述方法は2種類あります。安全なのは前者です。
connected routeが再配布される (redistribute connected
) 設定で実施すべきポリシーは、
「DC内ネットワークに属する経路をacceptして、それ以外をrejectする」ことです。
先ほどのネットワークにおいて使われているIPプレフィックスは次の3種類です。
- サーバが収容されるサブネット:
10.1.0.0/16
から/26
以上が払い出されている - ルータのループバックIPアドレス:
10.0.254.0/24
から各ルータに/32
が払い出されている - インタフェース間のリンクローカルIPアドレス:
169.254.0.0/16
から各リンクに/31
が払い出されている
このうち、インタフェース間のリンクローカルIPアドレスは広報する必要がないのでrejectします。 これにより、Forwarding Information Base (FIB) のサイズを削減することができます。 ルーティングポリシーの擬似コードは次のとおりです。
if (prefix equals 10.1.0.0/16 and address mask is greater than equal to 26) then accept else if (prefix belongs to 10.0.254.0/24 and address mask equals to 32) then accept else reject
このルーティングポリシーですが、多くのルーティングスイートでは route-map
で設定します。
Junosの場合には policy-options policy-statement
を使います。
BIRDの場合には固有のプログラミング言語を使います。
構文は次のとおりです。
route-map ROUTE-MAP-NAME (permit | deny) [SEQUENCE-NUMBER] match CLASSIFIER set ACTION
- [sequence_number]: route-mapで実行される句の順序を決定
- (permit | deny)
- permit: classifierにmatchしたときにset ACTIONを実行
- deny: classifierにmatchしないときにset ACTIONを実行
route-mapを定義する前にまずは一致の条件を決めるclassifierを定義する必要があります。 FRRoutingでは次のようなclassifierが使えます (一部のみ抜粋) 。
classifier | matchさせる内容 |
---|---|
as-path |
BGPのAS_PATH |
community |
BGPのcommunity attribute |
interface |
インタフェース名 |
ip , ipv6 |
IPアドレス, ネクストホップ, 送信元等のIP情報 |
peer |
BGPセッションのピア情報。ピアのインタフェース名やIPアドレス |
ここまで見てきたDC内のプレフィックスを、 DC_LOCAL_SUBNET
という名前のclassifierで定義します。
ip prefix-list DC_LOCAL_SUBNET seq 5 permit 10.1.0.0/16 ge 26 ip prefix-list DC_LOCAL_SUBNET seq 10 permit 10.0.254.0/24 ge 32
seq <number>
はmatchの順序を決めるために使用します。
今回は特に必要ありませんが、今後間にclassifierの設定を追加できるように、順序を表す seq <number>
は間隔を5空けて設定しました。
ge
は "greater than or equal to" = 「以上」です。
サーバのプレフィックスは /26
以上、loopback IPアドレスは /32
以上つまり /32
のプレフィックス長に対する一致として機能します。
このclassifierを用いてroute-mapを定義します。
route-map ACCEPT_DC_LOCAL
は次のとおりです。
classifierでの一致に対して permit
を設定しています。
なお今回は permit
以外に実行すべき内容がないため、 set ACTION
は書きません。
route-map ACCEPT_DC_LOCAL permit 10
match ip address prefix-list DC_LOCAL_SUBNET
設定した route-map
を redistribute connected
に適用するには次のように書きます。
redistribute connected route-map ACCEPT_DC_LOCAL
先ほどのclassifierの表に記載したとおり、route-mapのclassifierにはIPプレフィックスの代わりにインタフェース名を指定することもできます。
# ループバックインタフェース lo のIPプレフィックスをアドバタイズ route-map ADV_LO permit 10 match interface lo redistribute connected route-map ADV_LO
このように書くと、IPアドレスを変更してもBGP設定を変更する必要がありません。 なお、誤ったIPアドレスをインタフェースに設定してもアドバタイズされてしまう点については注意が必要です。
また、一般的なルーティングスイートでは、route-mapで swp1 - swp49
(swp1からswp49までの全インタフェース) のような構文が使えません。
ルータの多数のインタフェースがサーバと接続されていても、収容するサブネットの数が少ないなら、IPプレフィックスを指定した方が設定が短くなります。
インタフェース名でネイバーを指定
ここまで見てきたBGP設定では、ネイバーの指定にIPアドレスとASNを使っていました。
neighbor 169.254.1.0 remote-as 4200000000 neighbor 169.254.1.0 peer-group ISL
インタフェースに /31
や /30
のIPプレフィックスを使用する場合、ピアのIPアドレスは明示しなくても特定できます。
- 例1) リンクで
169.254.1.0/31
を使用- IPアドレスは
169.254.1.0
か169.254.1.1
の2つのみ - 一方のインタフェースが
169.254.1.0
の場合、もう一方のインタフェースは169.254.1.1
に決まる
- IPアドレスは
- 例2) リンクで
169.254.1.0/30
を使用 ( RFC 3021に対応していれば/31
の方がIPアドレス空間の利用効率がよい)- ネットワークアドレス
169.254.1.0
とブロードキャストアドレス169.254.1.3
は使用しない - IPアドレスは
169.254.1.2
か169.254.1.3
の2つのみ
- ネットワークアドレス
FRRoutingでは、このトリックを使い
neighbor
ステートメントでインタフェース名が指定できます。
なお、インタフェースのIPv4アドレスが /30
や /31
でない場合BGPセッションは確立できません。
ネイバーのIPアドレスの次に、ASNについても見ていきます。 ASNの指定は、次のような意味があります。
- (1) eBGPかiBGPであることの検出
- (2) 異なる管理ドメイン間の接続であることを明示
(1) については、eBGPであることを明示的に指定できるため不要です。 (2) については、異なる管理ドメイン間の接続では必要でした。しかし、DC内ネットワークは単一の管理ドメインのため不要です。
IPアドレスとASNの代わりにインタフェース名を使用すると、BGPのネイバー設定は
neighbor 169.254.1.0 remote-as 4200000000 # 自身のASNと異なるASNをピアに指定することで間接的にeBGPを指定 (BGP OPENメッセージでeBGPであることを識別) neighbor 169.254.1.0 peer-group ISL
から
neighbor ISL remote-as external # ASNの代わりにeBGPであることを明示的に指定
neighbor swp3 peer-group ISL
に変わります。
ネイバーをインタフェース名で指定することで、設定の重複を削減できます。 また、設定がシンプルになるため、自動化用のコードのロジックからエラーの発生要因を減らせます。 また、IPアドレスとASNをBGP設定から隠蔽することで、他のPodや他のDC等でも自動化用のコードが再利用できます。
Chapter 3の最終的なBGP設定
これまでの変更を反映した、最終的なleaf01とspine01のBGP設定は次のとおりです。 leafとspineのBGP設定はほぼ同じになっています。
# leaf01 frr defaults datacenter hostname dc-leaf01 ! router bgp 4210000001 bgp router-id 10.0.254.1 no bgp default ipv4-unicast bgp bestpath as-path multipath-relax neighbor ISL peer-group neighbor ISL remote-as external neighbor ISL bfd neighbor ISL timers connect 5 neighbor swp3 interface peer-group ISL neighbor swp4 interface peer-group ISL ! address-family ipv4 unicast redistribute connected route-map ACCEPT_DC_LOCAL neighbor ISL activate maximum-paths 64 exit-address-family ! ip prefix-list DC_LOCAL_SUBNET seq 5 permit 10.1.0.0/16 ge 26 ip prefix-list DC_LOCAL_SUBNET seq 10 permit 10.0.254.0/24 ge 32 ! route-map ACCEPT_DC_LOCAL permit 10 match ip address prefix-list DC_LOCAL_SUBNET !
# spine01 frr defaults datacenter hostname dc-spine01 ! router bgp 4200000000 bgp router-id 10.0.254.254 no bgp default ipv4-unicast bgp bestpath as-path multipath-relax neighbor ISL peer-group neighbor ISL remote-as external neighbor ISL bfd neighbor ISL timers connect 5 neighbor swp1 interface peer-group ISL neighbor swp2 interface peer-group ISL neighbor swp3 interface peer-group ISL neighbor swp4 interface peer-group ISL ! address-family ipv4 unicast redistribute connected route-map ADV_LO neighbor ISL activate maximum-paths 64 exit-address-family ! route-map ADV_LO permit 10 match interface lo !
leaf01ではroute-mapのclassifierとしてprefix-list
を使用し、spine01では interface
を使用しました。
なお、leaf01でclassifier interface
を使用する場合、route-mapは次のようになります。
route-map ACCEPT_DC_LOCAL permit 5 match interface lo route-map ACCEPT_DC_LOCAL permit 10 match interface vlan10
spine01にてBGPの状態を確認してみます。
ネイバーの表記がIPアドレスからインタフェース名に変わりました。
cumulus@dc-spine01:~$ net show bgp ipv4 unicast summary BGP router identifier 10.0.254.254, local AS number 4200000000 vrf-id 0 BGP table version 9 RIB entries 17, using 2584 bytes of memory Peers 4, using 77 KiB of memory Peer groups 1, using 64 bytes of memory Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd dc-leaf01(swp1) 4 4210000001 148 146 0 0 0 00:06:55 2 dc-leaf02(swp2) 4 4210000002 150 146 0 0 0 00:06:55 2 dc-leaf03(swp3) 4 4210000003 148 146 0 0 0 00:06:55 2 dc-leaf04(swp4) 4 4210000004 150 146 0 0 0 00:06:55 2 Total number of neighbors 4
BGPの経路は同じです。
cumulus@dc-spine01:~$ net show route bgp RIB entry for bgp ================= Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR, > - selected route, * - FIB route B>* 10.0.254.1/32 [20/0] via 169.254.1.1, swp1, 00:08:30 B>* 10.0.254.2/32 [20/0] via 169.254.1.3, swp2, 00:08:30 B>* 10.0.254.3/32 [20/0] via 169.254.1.5, swp3, 00:08:30 B>* 10.0.254.4/32 [20/0] via 169.254.1.7, swp4, 00:08:30 B>* 10.1.1.0/26 [20/0] via 169.254.1.1, swp1, 00:08:30 B>* 10.1.2.0/26 [20/0] via 169.254.1.3, swp2, 00:08:30 B>* 10.1.3.0/26 [20/0] via 169.254.1.5, swp3, 00:08:30 B>* 10.1.4.0/26 [20/0] via 169.254.1.7, swp4, 00:08:30
neighborをインタフェース名で指定して経路を表示できます。 なお、以前と同様にIPアドレスで指定することもできます。
cumulus@dc-spine01:~$ net show bgp neighbor swp1 routes BGP table version is 25, local router ID is 10.0.254.254 Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, i internal, r RIB-failure, S Stale, R Removed Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 10.0.254.1/32 169.254.1.1 0 0 4210000001 ? *> 10.1.1.0/26 169.254.1.1 0 0 4210000001 ? Displayed 2 routes and 9 total paths
以上により、BGP設定からIPアドレスの指定を隠蔽できました。 しかし、依然としてリンク間のインタフェースにはIPアドレスの設定が必要なままです。 この問題の解決策については4章で触れています。