quaggaでBGPを設定してみる

こーめいです。

Linuxでルーティングプロトコルを回すニーズが少しづつ増えて来たのかなと思ってquaggaの設定と動作を確認しておきます。

quaggaは石黒邦宏氏が開発したzebraの派生ソフトウェアです。ciscoIOSライクな操作(というよりそのまま)が可能です。

  • quaggaインストール
  • quagga初期設定/起動
  • BGP設定
  • 動作確認

quaggaインストール

バージョンにこだわりがなければyumからインストールが一番楽です。こだわりがある人は公式から落としてきてください。

$ yum install quagga

本日時点でバージョンは0.99.15です。/etc/quagga配下にconfファイルが作成されますので確認します。

confファイルを見ればわかりますが、ipv4であれば以下に対応しています。

  • bgp
  • ospf
  • rip
[komei@localhost ~]$ sudo ls /etc/quagga/
bgpd.conf.sample    ospfd.conf.sample   vtysh.conf         zebra.conf.sample
bgpd.conf.sample2   ripd.conf.sample    vtysh.conf.sample
ospf6d.conf.sample  ripngd.conf.sample  zebra.conf

quagga初期設定/起動

まずはzebra.confを設定します。quaggaはvty経由でログインします。hostname/passwordを初期設定して起動します。

[komei@localhost ~]$ sudo cat /etc/quagga/zebra.conf
hostname zebra
password zebra
log stdout

[komei@localhost ~]$ sudo  /etc/init.d/zebra start
Starting zebra:                                            [  OK  ]

今回はbgoを使用しますので、bgpd.confを設定します。サンプルコンフィグをのぞいてみます。

[komei@localhost ~]$ sudo cat /etc/quagga/bgpd.conf.sample
! -*- bgp -*-
!
! BGPd sample configuratin file
!
! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
!
hostname bgpd
password zebra
!enable password please-set-at-here
!
!bgp mulitple-instance
!
router bgp 7675
! bgp router-id 10.0.0.1
! network 10.0.0.0/8
! neighbor 10.0.0.2 remote-as 7675
! neighbor 10.0.0.2 route-map set-nexthop out
! neighbor 10.0.0.2 ebgp-multihop
! neighbor 10.0.0.2 next-hop-self
!
! access-list all permit any
!
!route-map set-nexthop permit 10
! match ip address all
! set ip next-hop 10.0.0.1
!
!log file bgpd.log
!
log stdout

文頭に「!」がついているものがほとんどです。これはIOSと同様でコメントアウトです。今回、後からログインして設定するのでこの設定を流用して起動します。

[komei@localhost ~]$ sudo mv /etc/quagga/bgpd.conf.sample /etc/quagga/bgpd.conf


[komei@localhost ~]$ sudo /etc/init.d/bgpd start
Starting bgpd:                                             [  OK  ]

quaggaはvty経由でログインするのですが、使用するポートはプロトコルごとに違います。bgpは2605です。

[komei@localhost ~]$ telnet localhost 2605
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Hello, this is Quagga (version 0.99.15).
Copyright 1996-2005 Kunihiro Ishiguro, et al.


User Access Verification

Password:
bgpd>

先ほど確認したパスワードを使用してログインできました。石黒氏の名前が確認できます。では、基本コマンドを確認してみます。

  • 特権モード
bgpd> en
bgpd#
  • バージョン確認
bgpd# show ver
Quagga 0.99.15 (bgpd).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

BGP設定

bgpの基本的な設定として以下の通り設定してみます。

bgpd# show run
Building configuration...

Current configuration:
!
hostname bgpd
log file /var/log/quagga/bgpd.log
!
password zebra
!
router bgp 64512
 bgp router-id 172.16.1.2
 network 192.168.0.0/24
 neighbor 172.16.1.1 remote-as 64513
 neighbor 172.16.1.1 timers 1 4
 neighbor 172.16.1.1 timers connect 1
!
line vty
!
end

ここでは設定しませんでしたが、ebgp-multihopやnext-hop-selfなど重要なコマンドも実装しているようです。

この環境ではBGP PeerとしてVyOSを使用してみました。今回使用したVyOSではDead値が4以上からの設定でしたので、timersは1 4で設定しています。

それではshow ip bgp関連コマンドを使用して確認します。

bgpd# show ip bgp summary
BGP router identifier 172.16.1.2, local AS number 64512
RIB entries 6, using 672 bytes of memory
Peers 1, using 4560 bytes of memory

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
172.16.1.1    4 64513    2777    2777        0    0    0 00:46:16        3

Total number of neighbors 1

bgpd# show ip bgp neighbors
BGP neighbor is 172.16.1.1, remote AS 64513, local AS 64512, external link
  BGP version 4, remote router ID 172.16.1.1
  BGP state = Established, up for 00:46:26
  Last read 00:00:00, hold time is 4, keepalive interval is 1 seconds
  Configured hold time is 4, keepalive interval is 1 seconds
  Neighbor capabilities:
    4 Byte AS: advertised and received
    Route refresh: advertised and received(old & new)
    Address family IPv4 Unicast: advertised and received
  Message statistics:
    Inq depth is 0
    Outq depth is 0
                         Sent       Rcvd
    Opens:                  1          1
    Notifications:          0          0
    Updates:                1          2
    Keepalives:          2785       2784
    Route Refresh:          0          0
    Capability:             0          0
    Total:               2787       2787
  Minimum time between advertisement runs is 30 seconds

 For address family: IPv4 Unicast
  Community attribute sent to this neighbor(both)
  3 accepted prefixes

  Connections established 1; dropped 0
  Last reset never
Local host: 172.16.1.2, Local port: 52045
Foreign host: 172.16.1.1, Foreign port: 179
Nexthop: 172.16.1.2
Nexthop global: ::
Nexthop local: ::
BGP connection: non shared network
Read thread: on  Write thread: off

問題なさそうです。続いてbgpテーブルを確認します。しっかりとルートを受けとっていることを確認できました。192.168.0.0/24はnetworkコマンドで自身がbgpテーブルに乗せたルートなのでibgp生成になっています。

bgpd# show ip bgp
BGP table version is 0, local router ID is 172.16.1.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 0.0.0.0          172.16.1.1                           0 64513 i
*> 172.16.1.0/24  172.16.1.1             1             0 64513 ?
*> 192.168.0.0      0.0.0.0                  0         32768 i

Total number of prefixes 4

コンフィグにもありましたが、ログは以下に生成されます。 /var/log/quagga/bgpd.log

今回はquaggaの話だけとなりましたが、文中に記載した通りVyOSでもBGPを設定していますので、そのあたりもエントリーを書きたいと思います。


シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

BGP―TCP/IPルーティングとオペレーションの実際

BGP―TCP/IPルーティングとオペレーションの実際

Cisco BGP‐4コマンド設定ハンドブック―Cisco IOSで使うすべてのBGP‐4コマンドを完全詳解 (CCIE professional development)

Cisco BGP‐4コマンド設定ハンドブック―Cisco IOSで使うすべてのBGP‐4コマンドを完全詳解 (CCIE professional development)