設定例集#17: BGP-4:2つのISPに対するマルチホーム(ASパス長の操作による負荷分散)


構成
ルーターAの設定
ルーターBの設定
設定の保存
ルーターAのコンフィグ
ルーターBのコンフィグ



ドメイン間経路制御プロトコルBGP(Border Gateway Protocol)の設定例です。
ここでは、2つのISPに接続するマルチホームの構成例を示します。

BGPでは、経路情報にさまざまな「属性」を付加することにより、他ASの経路選択プロセスに影響を与えることができます。この例では、各ISPに通知する経路のAS_PATH(ASパス)属性を操作することにより、下りトラフィックの負荷分散を試みます。また、自AS宛でないトラフィックの通過(トランジットサービス)を行わないよう設定します。

Note - 本設定例ではWANポートを2つ使用するため、AT-AR2050Vは使用できません。

構成


ここでは、上のような構成のネットワークを例に解説します。

AS 65030は3つのサブネット(プレフィックス)を持っており、ルーターAのeth1インターフェース経由でISP1(AS 65010)と、ルーターBのppp1インターフェース経由でISP2(AS 65020)と接続しています。

AS 65030では、各ISPからの下りトラフィックが次のように負荷分散されることを望んでいます。

これを実現するため、AS 65030は各ISPに対し、各プレフィックス(192.168.10.0/24と192.168.20.0/24)のAS_PATH(ASパス)属性を次のように操作してISPに通知します。

ASパスは、プレフィックスがどのASを通って通知されてきたかを示すAS番号のリストです。BGPが経路を選択する場合は、ASパスが最も短い経路を選択します。このことを利用して、特定のプレフィックス宛のトラフィックを受け取りたくない場合に、ASパスを意識的に長くして他のASに通知することができます。

またこの例では、自AS宛のトラフィックだけを受け取るため、自AS内のプレフィックスだけをISP1、ISP2に通知するようにします。

Note - ISP2から学習した経路をISP1に再通知すると、ISP1からISP2に宛てたトラフィックが自ASを通過する可能性があります。複数のASに接続しているときは、不要なトラフィックが自ASに流れ込まないよう、通知する経路情報の選別が必要です。

ルーターAの設定

  1. LANポートにおいて初期状態で有効化されているスパニングツリープロトコル(RSTP)を無効化します。これにはspanning-tree enableコマンドをno形式で実行します。
    スパニングツリープロトコルの詳細は「L2スイッチング」/「スパニングツリープロトコル」をご覧ください。

    no spanning-tree rstp enable
    

  2. WANポートeth2にIPアドレスを設定します。これにはip addressコマンドを使います。
    IPインターフェースの詳細は「IPルーティング」/「IPインターフェース」をご覧ください。

    interface eth2
     ip address 192.168.30.1/24
    

  3. WANポートeth1にIPアドレスを設定します。これにはip addressコマンドを使います。
    IPインターフェースの詳細は「IPルーティング」/「IPインターフェース」をご覧ください。

    interface eth1
     ip address 192.168.100.1/24
    

  4. LAN側インターフェースvlan1にIPアドレスを設定します。これにはip addressコマンドを使います。
    IPインターフェースの詳細は「IPルーティング」/「IPインターフェース」をご覧ください。

    interface vlan1
     ip address 192.168.10.1/24
    

  5. 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 ^$
    

  6. 各種条件にもとづいて経路情報をフィルタリング・変更するルートマップを作成します。
    これには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
    

  7. 経路制御プロトコルBGPの設定を行います。
    BGPの詳細は「IPルーティング」/「経路制御(BGP)」をご覧ください。

    自AS番号を指定してBGPルーティングプロセスを起動します。これにはrouter bgpコマンドを使います。

    router bgp 65030
    

  8. 直結経路とスタティック経路をBGPで再通知します。これにはredistributeコマンドを使います。

     redistribute connected
     redistribute static
    

  9. 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
    

  10. 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
    

  11. 以上で設定は完了です。

    end
    


ルーターBの設定

  1. LANポートにおいて初期状態で有効化されているスパニングツリープロトコル(RSTP)を無効化します。これにはspanning-tree enableコマンドをno形式で実行します。
    スパニングツリープロトコルの詳細は「L2スイッチング」/「スパニングツリープロトコル」をご覧ください。

    no spanning-tree rstp enable
    

  2. WANポートeth2にIPアドレスを設定します。これにはip addressコマンドを使います。
    IPインターフェースの詳細は「IPルーティング」/「IPインターフェース」をご覧ください。

    interface eth2
     ip address 192.168.30.2/24
    

  3. WANポートeth1上にPPPoEインターフェースppp1を作成します。これには、encapsulation pppコマンドを使います。
    PPPの詳細は「PPP」/「一般設定」をご覧ください。

    interface eth1
     encapsulation ppp 1
    

  4. 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
    

  5. LAN側インターフェースvlan1にIPアドレスを設定します。これにはip addressコマンドを使います。
    IPインターフェースの詳細は「IPルーティング」/「IPインターフェース」をご覧ください。

    interface vlan1
     ip address 192.168.20.1/24
    

  6. 対向ルーターとの間で使用するISAKMPの事前共有鍵を設定します。これにはcrypto isakmp keyコマンドを使います。
    ここでの対向ルーターはISP2のルーターです。

    crypto isakmp key secret address 10.1.1.2
    

  7. 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
    

  8. 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 ^$
    

  9. 宛先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
    

  10. 各種条件にもとづいて経路情報をフィルタリング・変更するルートマップを作成します。
    これには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
    

  11. 経路制御プロトコルBGPの設定を行います。
    BGPの詳細は「IPルーティング」/「経路制御(BGP)」をご覧ください。

    自AS番号を指定してBGPルーティングプロセスを起動します。これにはrouter bgpコマンドを使います。

    router bgp 65030
    

  12. 直結経路をBGPで再通知します。これにはredistributeコマンドを使います。

     redistribute connected
    

  13. 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
    

  14. 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
    

  15. IPsec対向装置への経路をスタティックに登録します。これにはip routeコマンドを使います。
    IP経路設定の詳細は「IPルーティング」/「経路制御」をご覧ください。

    ip route 10.1.1.2/32 ppp1
    

  16. 以上で設定は完了です。

    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 - 2016 アライドテレシスホールディングス株式会社

PN: 613-002107 Rev.J