設定例集#17: BGP-4:2つのISPに対するマルチホーム(ASパス長の操作による負荷分散)
ドメイン間経路制御プロトコルBGP(Border Gateway Protocol)の設定例です。
ここでは、2つのISPに接続するマルチホームの構成例を示します。
BGPでは、経路情報にさまざまな「属性」を付加することにより、他ASの経路選択プロセスに影響を与えることができます。この例では、各ISPに通知する経路のAS_PATH(ASパス)属性を操作することにより、下りトラフィックの負荷分散を試みます。また、自AS宛でないトラフィックの通過(トランジットサービス)を行わないよう設定します。
構成

ここでは、上のような構成のネットワークを例に解説します。
AS 65030は3つのサブネット(プレフィックス)を持っており、ルーターAのeth1インターフェース経由でISP1(AS 65010)と、ルーターBのppp1インターフェース経由でISP2(AS 65020)と接続しています。
AS 65030では、各ISPからの下りトラフィックが次のように負荷分散されることを望んでいます。
- 192.168.10.0/24宛:ルーターA(ISP1)経由
- 192.168.20.0/24宛:ルーターB(ISP2)経由
これを実現するため、AS 65030は各ISPに対し、各プレフィックス(192.168.10.0/24と192.168.20.0/24)のAS_PATH(ASパス)属性を次のように操作してISPに通知します。
- ISP1(ルーターA側)とのeBGPセッション
- 192.168.10.0/24:AS_PATH=65030
- 192.168.20.0/24:AS_PATH=65030 65030 65030 65030(自AS番号を3つ余計に追加)
- ISP2(ルーターB側)とのeBGPセッション(IPsecにより保護)
- 192.168.10.0/24:AS_PATH=65030 65030 65030 65030(自AS番号を3つ余計に追加)
- 192.168.20.0/24:AS_PATH=65030
ASパスは、プレフィックスがどのASを通って通知されてきたかを示すAS番号のリストです。BGPが経路を選択する場合は、ASパスが最も短い経路を選択します。このことを利用して、特定のプレフィックス宛のトラフィックを受け取りたくない場合に、ASパスを意識的に長くして他のASに通知することができます。
またこの例では、自AS宛のトラフィックだけを受け取るため、自AS内のプレフィックスだけをISP1、ISP2に通知するようにします。
ISP2から学習した経路をISP1に再通知すると、ISP1からISP2に宛てたトラフィックが自ASを通過する可能性があります。複数のASに接続しているときは、不要なトラフィックが自ASに流れ込まないよう、通知する経路情報の選別が必要です。
設定開始前に
自動設定の確認と削除
本設定例に掲載されているコマンドは、設定がまったく行われていない本製品の初期状態(スタートアップコンフィグなしで起動した状態)から入力することを前提としています。
そのため、通常は erase startup-config を実行し、スタートアップコンフィグが存在しない状態で起動してから、設定を始めてください。
ただし、本製品はスタートアップコンフィグなしで起動した場合でも、特定の条件を満たすと自動的な設定を行うことがあるため、その場合は設定例にしたがってコマンドを入力しても、コマンドがエラーになったり、全体として意図した動作にならない可能性があります。
これを避けるため、設定開始にあたっては次のいずれかの方法をとることをおすすめします。
- ネットワークケーブルを接続せずに起動する。
起動時に自動設定が実行されるための条件の一つに、特定インターフェースのリンクアップがあります。
ネットワークケーブルを接続しない状態で起動することにより、自動設定の適用を回避できます。
- 自動設定を手動で削除してから設定を行う。
前記の方法を採用できず自動設定が適用されてしまった場合は、「自動的な設定内容の削除」にしたがって、これらを手動で削除してから設定を開始してください。
自動設定が行われる条件などの詳細については、AMF応用編のAMFネットワーク未検出時の拡張動作をご参照ください。
システム時刻の設定
ログなどの記録日時を正確に保ち、各種機能を適切に動作させるため、システム時刻は正確にあわせて運用することをおすすめします。
ご使用の環境にあわせ、次のいずれかの方法でシステム時刻を設定してください。
ルーターAの設定
- LANポートにおいて初期状態で有効化されているスパニングツリープロトコル(RSTP)を無効化します。これにはspanning-tree enableコマンドをno形式で実行します。
スパニングツリープロトコルの詳細は「L2スイッチング」/「スパニングツリープロトコル」をご覧ください。
no spanning-tree rstp enable
- WANポートeth2にIPアドレスを設定します。これにはip addressコマンドを使います。
IPインターフェースの詳細は「IP」/「IPインターフェース」をご覧ください。
interface eth2
ip address 192.168.30.1/24
- WANポートeth1にIPアドレスを設定します。これにはip addressコマンドを使います。
IPインターフェースの詳細は「IP」/「IPインターフェース」をご覧ください。
interface eth1
ip address 192.168.100.1/24
- LAN側インターフェースvlan1にIPアドレスを設定します。これにはip addressコマンドを使います。
IPインターフェースの詳細は「IP」/「IPインターフェース」をご覧ください。
interface vlan1
ip address 192.168.10.1/24
- AS_PATH属性の内容にもとづいて経路情報をフィルタリングするASパスアクセスリストを作成します。
これにはip as-path access-listコマンドを使います。
・list1 - AS_PATHが空、あるいは先頭が自AS番号(65030)の場合にマッチ
・list2 - AS_PATHが空の場合にマッチ
ASパスアクセスリストの詳細は「IP」/「経路制御(フィルタリング)」をご覧ください。
ip as-path access-list list1 permit ^$
ip as-path access-list list1 permit ^65030_
ip as-path access-list list2 permit ^$
- 各種条件にもとづいて経路情報をフィルタリング・変更するルートマップを作成します。
これにはroute-mapコマンドとルートマップモードの各種match、setコマンドを使います。
ここでは、先ほど作成したASパスアクセスリスト「list2」を利用して、AS_PATHが空の経路に自AS番号である「65030」を3個余分に追加するルートマップ「add_myasn」を作成しています。
ルートマップの詳細は「IP」/「経路制御(フィルタリング)」をご覧ください。
route-map add_myasn permit 1
match as-path list2
set as-path prepend 65030 65030 65030
route-map add_myasn permit 2
- 経路制御プロトコルBGPの設定を行います。
BGPの詳細は「IP」/「経路制御(BGP)」をご覧ください。
自AS番号を指定してBGPルーティングプロセスを起動します。これにはrouter bgpコマンドを使います。
router bgp 65030
- 直結経路とスタティック経路をBGPで再通知します。これにはredistributeコマンドを使います。
redistribute connected
redistribute static
- neighbor remote-asコマンドでルーターB(192.168.30.2)をiBGPピア(自AS 65030 = 対向AS 65030)として指定したのち、該当ピアに対する設定を行います。
・neighbor next-hop-self - ルーターBに経路を送信するとき、自分自身をNEXT_HOPとして通知します
・neighbor allowas-in - ルーターBから経路を受信するとき、AS_PATH属性に自AS番号を含む経路も受け入れます
・neighbor route-map - ルーターBに経路を送信するとき、自分自身が生成した経路には自AS番号を3個余分に追加してから通知します
neighbor 192.168.30.2 remote-as 65030
neighbor 192.168.30.2 next-hop-self
neighbor 192.168.30.2 allowas-in
neighbor 192.168.30.2 route-map add_myasn out
- neighbor remote-asコマンドでISP1のルーター(192.168.100.2)をeBGPピア(自AS 65030 ≠ 対向AS 65010)として指定したのち、該当ピアに対する設定を行います。
・neighbor allowas-in - ISP1のルーターから経路を受信するとき、AS_PATH属性に自AS番号を含む経路も受け入れます
・neighbor filter-list - ISP1のルーターに経路を送信するとき、自AS起源の経路だけを通知します(自AS宛てのトラフィックだけがISP1から流れ込むようにします)
neighbor 192.168.100.2 remote-as 65010
neighbor 192.168.100.2 allowas-in
neighbor 192.168.100.2 filter-list list1 out
- 以上で設定は完了です。
end
ルーターBの設定
- LANポートにおいて初期状態で有効化されているスパニングツリープロトコル(RSTP)を無効化します。これにはspanning-tree enableコマンドをno形式で実行します。
スパニングツリープロトコルの詳細は「L2スイッチング」/「スパニングツリープロトコル」をご覧ください。
no spanning-tree rstp enable
- WANポートeth2にIPアドレスを設定します。これにはip addressコマンドを使います。
IPインターフェースの詳細は「IP」/「IPインターフェース」をご覧ください。
interface eth2
ip address 192.168.30.2/24
- WANポートeth1上にPPPoEインターフェースppp1を作成します。これには、encapsulation pppコマンドを使います。
PPPの詳細は「PPP」/「一般設定」をご覧ください。
interface eth1
encapsulation ppp 1
- PPPインターフェースppp1に対し、PPPoE接続のための設定を行います。
・LCP EchoによるPPP接続状態の確認(keepalive)
・ユーザー名(ppp username)
・パスワード(ppp password)
・IPアドレスの固定設定(ip address)
・MSS書き換え(ip tcp adjust-mss)
PPPの詳細は「PPP」/「一般設定」をご覧ください。
interface ppp1
keepalive
ppp username test01@cug
ppp password test01!
ip address 10.1.1.1/32
ip tcp adjust-mss pmtu
- LAN側インターフェースvlan1にIPアドレスを設定します。これにはip addressコマンドを使います。
IPインターフェースの詳細は「IP」/「IPインターフェース」をご覧ください。
interface vlan1
ip address 192.168.20.1/24
- 対向ルーターとの間で使用するISAKMPの事前共有鍵を設定します。これにはcrypto isakmp keyコマンドを使います。
ここでの対向ルーターはISP2のルーターです。
crypto isakmp key secret address 10.1.1.2
- ISP2のルーターとのBGP通信をIPsecで保護するため、IPsecトンネルインターフェースtunnel1を作成します。
トンネルインターフェースの詳細は「VPN」/「トンネルインターフェース」を、IPsecの詳細は「VPN」/「IPsec」をご覧ください。
これには、interfaceコマンドでトンネルインターフェースを作成し、以下の情報を設定します。
・トンネルインターフェースのIPアドレス(ip address)
・トンネルインターフェースから送信するデリバリーパケットの始点(自装置)アドレス(tunnel source)
・トンネルインターフェースから送信するデリバリーパケットの終点(対向装置)アドレス(tunnel destination)
・トンネリング方式(tunnel mode ipsec)
・トンネルインターフェースに対するIPsec保護の適用(tunnel protection ipsec)
・トンネルインターフェースにおけるMSS書き換え設定(ip tcp adjust-mss)
interface tunnel1
ip address 172.16.0.1/30
tunnel source 10.1.1.1
tunnel destination 10.1.1.2
tunnel mode ipsec ipv4
tunnel protection ipsec
ip tcp adjust-mss 1260
- AS_PATH属性の内容にもとづいて経路情報をフィルタリングするASパスアクセスリストを作成します。
これにはip as-path access-listコマンドを使います。
・list1 - AS_PATHが空、あるいは先頭が自AS番号(65030)の場合にマッチ
・list2 - AS_PATHが空の場合にマッチ
ASパスアクセスリストの詳細は「IP」/「経路制御(フィルタリング)」をご覧ください。
ip as-path access-list list1 permit ^$
ip as-path access-list list1 permit ^65030_
ip as-path access-list list2 permit ^$
- 宛先IPプレフィックスにもとづいて経路情報をフィルタリングするIPプレフィックスリストを作成します。
これにはip prefix-listコマンドを使います。
ここでは、ppp1インターフェースのIPアドレスをBGPピアに通知しないようにするためのIPプレフィックスリスト「ppp」を作成しています。
IPプレフィックスリストの詳細は「IP」/「経路制御(フィルタリング)」をご覧ください。
ip prefix-list ppp seq 5 deny 10.1.1.1/32
ip prefix-list ppp seq 10 permit any
- 各種条件にもとづいて経路情報をフィルタリング・変更するルートマップを作成します。
これにはroute-mapコマンドとルートマップモードの各種match、setコマンドを使います。
ここでは、先ほど作成したASパスアクセスリスト「list2」を利用して、AS_PATHが空の経路に自AS番号である「65030」を3個余分に追加するルートマップ「add_myasn」を作成しています。
ルートマップの詳細は「IP」/「経路制御(フィルタリング)」をご覧ください。
route-map add_myasn permit 1
match as-path list2
set as-path prepend 65030 65030 65030
route-map add_myasn permit 2
- 経路制御プロトコルBGPの設定を行います。
BGPの詳細は「IP」/「経路制御(BGP)」をご覧ください。
自AS番号を指定してBGPルーティングプロセスを起動します。これにはrouter bgpコマンドを使います。
router bgp 65030
- 直結経路をBGPで再通知します。これにはredistributeコマンドを使います。
redistribute connected
- neighbor remote-asコマンドでISP2のルーター(172.16.0.2)をeBGPピア(自AS 65030 ≠ 対向AS 65020)として指定したのち、該当ピアに対する設定を行います。
ここでは、ISP2のルーターを、同ルーターとの間に張ったIPsecトンネル上のIPアドレスで指定しています。そのため、ISP2とのBGP通信はIPsecトンネル経由で行われることになります。
・neighbor allowas-in - ISP2のルーターから経路を受信するとき、AS_PATH属性に自AS番号を含む経路も受け入れます
・neighbor prefix-list - ISP2のルーターに経路を送信するとき、ppp1インターフェースのIPアドレスを通知しないようにします
・neighbor filter-list - ISP2のルーターに経路を送信するとき、自AS起源の経路だけを通知します(自AS宛てのトラフィックだけがISP2から流れ込むようにします)
neighbor 172.16.0.2 remote-as 65020
neighbor 172.16.0.2 allowas-in
neighbor 172.16.0.2 prefix-list ppp out
neighbor 172.16.0.2 filter-list list1 out
- neighbor remote-asコマンドでルーターA(192.168.30.1)をiBGPピア(自AS 65030 = 対向AS 65030)として指定したのち、該当ピアに対する設定を行います。
・neighbor next-hop-self - ルーターAに経路を送信するとき、自分自身をNEXT_HOPとして通知します
・neighbor allowas-in - ルーターAから経路を受信するとき、AS_PATH属性に自AS番号を含む経路も受け入れます
・neighbor prefix-list - ルーターAに経路を送信するとき、ppp1インターフェースのIPアドレスを通知しないようにします
・neighbor route-map - ルーターAに経路を送信するとき、自分自身が生成した経路には自AS番号を3個余分に追加してから通知します
neighbor 192.168.30.1 remote-as 65030
neighbor 192.168.30.1 next-hop-self
neighbor 192.168.30.1 allowas-in
neighbor 192.168.30.1 prefix-list ppp out
neighbor 192.168.30.1 route-map add_myasn out
- IPsec対向装置への経路をスタティックに登録します。これにはip routeコマンドを使います。
IP経路設定の詳細は「IP」/「経路制御」をご覧ください。
ip route 10.1.1.2/32 ppp1
- 以上で設定は完了です。
end
設定の保存
■ 設定が完了したら、現在の設定内容を起動時コンフィグとして保存してください。これには、copyコマンドを「copy running-config startup-config
」の書式で実行します。
awplus# copy running-config startup-config ↓
Building configuration...
[OK]
また、write fileコマンド、write memoryコマンドでも同じことができます。
awplus# write memory ↓
Building configuration...
[OK]
その他、設定保存の詳細については「運用・管理」/「コンフィグレーション」をご覧ください。
ルーターAのコンフィグ
!
no spanning-tree rstp enable
!
interface eth2
ip address 192.168.30.1/24
!
interface eth1
ip address 192.168.100.1/24
!
interface vlan1
ip address 192.168.10.1/24
!
ip as-path access-list list1 permit ^$
ip as-path access-list list1 permit ^65030_
ip as-path access-list list2 permit ^$
!
route-map add_myasn permit 1
match as-path list2
set as-path prepend 65030 65030 65030
route-map add_myasn permit 2
!
router bgp 65030
!
redistribute connected
redistribute static
!
neighbor 192.168.30.2 remote-as 65030
neighbor 192.168.30.2 next-hop-self
neighbor 192.168.30.2 allowas-in
neighbor 192.168.30.2 route-map add_myasn out
!
neighbor 192.168.100.2 remote-as 65010
neighbor 192.168.100.2 allowas-in
neighbor 192.168.100.2 filter-list list1 out
!
end
ルーターBのコンフィグ
!
no spanning-tree rstp enable
!
interface eth2
ip address 192.168.30.2/24
!
interface eth1
encapsulation ppp 1
!
interface ppp1
keepalive
ppp username test01@cug
ppp password test01!
ip address 10.1.1.1/32
ip tcp adjust-mss pmtu
!
interface vlan1
ip address 192.168.20.1/24
!
crypto isakmp key secret address 10.1.1.2
!
interface tunnel1
ip address 172.16.0.1/30
tunnel source 10.1.1.1
tunnel destination 10.1.1.2
tunnel mode ipsec ipv4
tunnel protection ipsec
ip tcp adjust-mss 1260
!
ip as-path access-list list1 permit ^$
ip as-path access-list list1 permit ^65030_
ip as-path access-list list2 permit ^$
!
ip prefix-list ppp seq 5 deny 10.1.1.1/32
ip prefix-list ppp seq 10 permit any
!
route-map add_myasn permit 1
match as-path list2
set as-path prepend 65030 65030 65030
route-map add_myasn permit 2
!
router bgp 65030
!
redistribute connected
!
neighbor 172.16.0.2 remote-as 65020
neighbor 172.16.0.2 allowas-in
neighbor 172.16.0.2 prefix-list ppp out
neighbor 172.16.0.2 filter-list list1 out
!
neighbor 192.168.30.1 remote-as 65030
neighbor 192.168.30.1 next-hop-self
neighbor 192.168.30.1 allowas-in
neighbor 192.168.30.1 prefix-list ppp out
neighbor 192.168.30.1 route-map add_myasn out
!
ip route 10.1.1.2/32 ppp1
!
end
(C) 2015 - 2024 アライドテレシスホールディングス株式会社
PN: 613-002107 Rev.BD