LoginSignup
4
1

More than 5 years have passed since last update.

GoBGP / VyOSでIPv6ネットワークを構築して、BGPルーティングを試してみる

Posted at

GoBGPは、IPv6ルーティング( BGP4+ )に対応しているので、基本動作を試してみました。
さらに、"FIB manipulation"モードで、IPv6フォワーディングが、動作する事も合わせて確認してみます。

■ IPv6ネットワーク構成

GoBGP環境は、Ubuntu上の構築することにしました。
さらに、BGPピア接続は、すべて、Globalユニキャストアドレスを使用することにしました。

                                              < AS65000 >                    < AS65001 >                     < AS65001 >                   < 650002 >
                 +————————+                   +--------+                     +---------+                     +---------+                   +--------+
              :2 |        | :1             :2 |        | :1    e-BGP      :2 |         | :1     i-BGP     :2 |         | :1    e-BGP    :2 |        | :1
 +-------------+ | vyos-3 | +---------------+ | vyos-1 | +-----------------+ | GoBGP-1 | +-----------------+ | GoBGP-3 | +---------------+ | vyos-4 | +--------------+
 2001:db8:1::/64 |        |  2001:db8:2::/64  |        |  2001:db8:3:1::/64  |         |  2001:db8:4:1::/64  |         |  2001:db8:5::/64  |        | 2001:db8:6::/64
                 +------—-+         +         +--------+                     +---------+                     +---------+                   +--------+
                                    |                                                                          :2 +
                                    |                                                                             |
                                    |                                                                             |
                                    |         +--------+                     +---------+                          |
                                    |      :3 |        | :1    e-BGP      :2 |         | :1     i-BGP             |
                                    +-------+ | vyos-2 | +-----------------+ | GoBGP-2 | +------------------------+
                                              |        |  2001:db8:3:2::/64  |         |  2001:db8:4:2::/64
                                              +--------+                     +---------+
                                              < AS65000 >                    < AS65001 >

(1) e-BGP接続区間

  • vyos-1 - GoBGP-1
  • vyos-2 - GoBGP-2
  • GoBGP-3 - vyos-4

(2) i-BGP接続区間

  • GoBGP-1 - GoBGP-3
  • GoBGP-2 - GoBGP-3

(3) static経路区間

  • vyos-3 - vyos-1
  • vyos-3 - vyos-2

■ VyOS環境の準備

以下、vyos-3のコンフィグ抜粋です

interfaces {
    ...

    ethernet eth1 {
        address 192.168.0.1/24
        address 2001:db8:3:1::1/64
        duplex auto
        hw-id 52:54:00:a9:81:4c
        smp_affinity auto
        speed auto
    }
    ethernet eth2 {
        address 192.168.3.101/24
        address 2001:db8:2::2/64
        duplex auto
        hw-id 52:54:00:b6:c4:bf
        smp_affinity auto
        speed auto
        vrrp {
            vrrp-group 20 {
                advertise-interval 1
                preempt true
                priority 250
                virtual-address 192.168.3.100/24
            }
        }
    }
    loopback lo {
        address 10.0.0.1/32
    }
}
protocols {
    bgp 65000 {
        address-family {
            ipv6-unicast {
                redistribute {
                    connected {
                    }
                    static {
                    }
                }
            }
        }
        neighbor 2001:db8:3:1::2 {
            address-family {
                ipv6-unicast {
                }
            }
            remote-as 65001
        }
        parameters {
            router-id 10.0.0.1
        }
    }
    static {
        route6 ::/0 {
            next-hop 2001:db8:2::1 {
            }
        }
    }
}

[ VyOS設定の備忘録メモ ]

  • デフォルト経路を、BGP配信するように設定した
  • コネク区間の経路も、BGP配信するように設定した
  • vrrp設定として、vipには、IPv6アドレスを設定できなかった
  • router-idには、IPv6アドレスを設定できなかった

■ GoBGP環境の準備

以下、GoBGP-1に関する各種設定のメモ

  • 事前に、GoBGP側にて、IPv6フォワーディングを有効にしておく
tsubo@gobgp-1:~/golang/bin$ sudo sysctl -p /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
  • GoBGP側にて、gobgpd.confを作成しておく
gobgpd.conf
[global]
 [global.config]
   as = 65001
   router-id = "10.10.10.1"
 [global.apply-policy.config]
   export-policy-list = ["policy1"]

[zebra]
 [zebra.config]
   enabled = true
   url = "unix:/var/run/quagga/zserv.api"

[[neighbors]]
 [neighbors.config]
   peer-type = "external"
   neighbor-address = "2001:db8:3:1::1"
   peer-as = 65000
   local-as = 65001

[[neighbors]]
 [neighbors.config]
   peer-type = "internal"
   neighbor-address = "2001:db8:4:1::2"
   peer-as = 65001
   local-as = 65001

[[policy-definitions]]
  name = "policy1"
  [[policy-definitions.statements]]
    name = "statement1"
    [policy-definitions.statements.actions]
      route-disposition = "accept-route"
    [policy-definitions.statements.actions.bgp-actions]
      set-next-hop = "self"
  • GoBGPを起動する
tsubo@gobgp-1:~/golang/bin$ sudo ./gobgpd -f gobgpd.conf -p -l info
INFO[0000] gobgpd started
INFO[0000] Finished reading the config file              Topic=Config
INFO[0000] Peer 2001:db8:3:1::1 is added
INFO[0000] Add a peer configuration for:2001:db8:3:1::1  Topic=Peer
INFO[0000] Peer 2001:db8:4:1::2 is added
INFO[0000] Add a peer configuration for:2001:db8:4:1::2  Topic=Peer
INFO[0004] Peer Up                                       Key="2001:db8:3:1::1" State="BGP_FSM_OPENCONFIRM" Topic=Peer
INFO[0004] Peer Up                                       Key="2001:db8:4:1::2" State="BGP_FSM_OPENCONFIRM" Topic=Peer
WARN[0005] No matching path for withdraw found, may be path was not installed into table  Key="::/0" Path={ ::/0 | src: { 2001:db8:4:1::2 | as: 65001, id: 10.10.10.3 }, nh: <nil>, withdraw } Topic=Table
WARN[0005] No matching path for withdraw found, may be path was not installed into table  Key="2001:db8:2::/64" Path={ 2001:db8:2::/64 | src: { 2001:db8:4:1::2 | as: 65001, id: 10.10.10.3 }, nh: <nil>, withdraw } Topic=Table

■ GoBGP-1上でのIPv6ルーティング動作確認

以下、GoBGP-1でのIPv6ルーティング情報と、IPv6フォワーディング情報を確認します

  • BGPテーブルの確認
tsubo@gobgp-1:~/golang/bin$ gobgp global rib -a ipv6
    Network             Next Hop             AS_PATH              Age        Attrs
*>  ::/0                2001:db8:3:1::1      65000                00:26:43   [{Origin: ?} {Med: 0}]
*>  2001:db8:2::/64     2001:db8:3:1::1      65000                00:26:43   [{Origin: ?} {Med: 1}]
*>  2001:db8:3:1::/64   2001:db8:3:1::1      65000                00:26:43   [{Origin: ?} {Med: 1}]
*>  2001:db8:5::/64     2001:db8:4:1::2      65002                00:26:44   [{Origin: ?} {Med: 1} {LocalPref: 100}]
*>  2001:db8:6::/64     2001:db8:4:1::2      65002                00:26:44   [{Origin: ?} {Med: 1} {LocalPref: 100}]
  • IPv6フォワーディング情報の確認
tsubo@gobgp-1:~/golang/bin$ route -n -A inet6
Kernel IPv6 routing table
Destination                    Next Hop                   Flag Met Ref Use If
2001:db8:2::/64                2001:db8:3:1::1            UG   1   1    12 ens8
2001:db8:3:1::/64              ::                         U    256 1    30 ens8
2001:db8:4:1::/64              ::                         U    256 1    17 ens9
2001:db8:5::/64                2001:db8:4:1::2            UG   1   1    12 ens9
2001:db8:6::/64                2001:db8:4:1::2            UG   1   0     0 ens9
fe80::/64                      ::                         U    256 0     0 ens9
fe80::/64                      ::                         U    256 0     0 ens8
fe80::/64                      ::                         U    256 0     0 ens3
::/0                           2001:db8:3:1::1            UG   1024 0     0 ens8
::/0                           ::                         !n   -1  1  2175 lo
::1/128                        ::                         Un   0   2     9 lo
2001:db8:3:1::/128             ::                         Un   0   1     0 lo
2001:db8:3:1::2/128            ::                         Un   0   2   257 lo
2001:db8:4:1::/128             ::                         Un   0   1     0 lo
2001:db8:4:1::1/128            ::                         Un   0   2   286 lo
fe80::/128                     ::                         Un   0   1     0 lo
fe80::/128                     ::                         Un   0   1     0 lo
fe80::/128                     ::                         Un   0   1     0 lo
fe80::5054:ff:fe45:8010/128    ::                         Un   0   2   680 lo
fe80::5054:ff:fec2:6194/128    ::                         Un   0   2   631 lo
fe80::5054:ff:fef6:6f61/128    ::                         Un   0   1     0 lo
ff00::/8                       ::                         U    256 0     0 ens9
ff00::/8                       ::                         U    256 1    10 ens8
ff00::/8                       ::                         U    256 1  2334 ens3
::/0                           ::                         !n   -1  1  2175 lo

■ GoBGP-3上でのIPv6ルーティング動作確認

以下、GoBGP-3でのIPv6ルーティング情報と、IPv6フォワーディング情報を確認します

  • BGPテーブルの確認
tsubo@gobgp-3:~/golang/bin$ gobgp global rib -a ipv6
    Network             Next Hop             AS_PATH              Age        Attrs
*>  ::/0                2001:db8:4:1::1      65000                00:25:47   [{Origin: ?} {Med: 0} {LocalPref: 100}]
*   ::/0                2001:db8:4:2::1      65000                05:14:04   [{Origin: ?} {Med: 0} {LocalPref: 100}]
*>  2001:db8:2::/64     2001:db8:4:1::1      65000                00:25:47   [{Origin: ?} {Med: 1} {LocalPref: 100}]
*   2001:db8:2::/64     2001:db8:4:2::1      65000                05:14:04   [{Origin: ?} {Med: 1} {LocalPref: 100}]
*>  2001:db8:3:1::/64   2001:db8:4:1::1      65000                00:25:47   [{Origin: ?} {Med: 1} {LocalPref: 100}]
*>  2001:db8:3:2::/64   2001:db8:4:2::1      65000                05:14:04   [{Origin: ?} {Med: 1} {LocalPref: 100}]
*>  2001:db8:5::/64     2001:db8:5::2        65002                05:14:03   [{Origin: ?} {Med: 1}]
*>  2001:db8:6::/64     2001:db8:5::2        65002                05:14:03   [{Origin: ?} {Med: 1}]
  • IPv6フォワーディング情報の確認
tsubo@gobgp-3:~/golang/bin$ route -n -A inet6
Kernel IPv6 routing table
Destination                    Next Hop                   Flag Met Ref Use If
2001:db8:2::/64                2001:db8:4:1::1            UG   1   1    12 ens8
2001:db8:3:1::/64              2001:db8:4:1::1            UG   1   0     0 ens8
2001:db8:3:2::/64              2001:db8:4:2::1            UG   1   1     4 ens9
2001:db8:4:1::/64              ::                         U    256 1    18 ens8
2001:db8:4:2::/64              ::                         U    256 1    15 ens9
2001:db8:5::/64                ::                         U    256 1   380 ens10
2001:db8:6::/64                2001:db8:5::2              UG   1   1     2 ens10
fe80::/64                      ::                         U    256 0     0 ens8
fe80::/64                      ::                         U    256 0     0 ens9
fe80::/64                      ::                         U    256 0     0 ens10
fe80::/64                      ::                         U    256 0     0 ens3
::/0                           2001:db8:4:1::1            UG   1024 0     0 ens8
::/0                           ::                         !n   -1  1  2163 lo
::1/128                        ::                         Un   0   2     4 lo
2001:db8:4:1::/128             ::                         Un   0   1     0 lo
2001:db8:4:1::2/128            ::                         Un   0   2   155 lo
2001:db8:4:2::/128             ::                         Un   0   1     0 lo
2001:db8:4:2::2/128            ::                         Un   0   2    46 lo
2001:db8:5::/128               ::                         Un   0   1     0 lo
2001:db8:5::1/128              ::                         Un   0   2   182 lo
fe80::/128                     ::                         Un   0   1     0 lo
fe80::/128                     ::                         Un   0   1     0 lo
fe80::/128                     ::                         Un   0   1     0 lo
fe80::/128                     ::                         Un   0   1     0 lo
fe80::5054:ff:fe0b:ad1a/128    ::                         Un   0   2   762 lo
fe80::5054:ff:fe44:c737/128    ::                         Un   0   2   685 lo
fe80::5054:ff:fe4b:9009/128    ::                         Un   0   1     0 lo
fe80::5054:ff:feb0:5e9c/128    ::                         Un   0   2   753 lo
ff00::/8                       ::                         U    256 1     2 ens8
ff00::/8                       ::                         U    256 1     1 ens9
ff00::/8                       ::                         U    256 0     0 ens10
ff00::/8                       ::                         U    256 1  2362 ens3
::/0                           ::                         !n   -1  1  2163 lo

■ VyOS-4上でのIPv6ルーティング動作確認

以下、vyos-4でのIPv6ルーティング情報と、IPv6フォワーディング情報を確認します

  • BGPテーブルの確認
tsubo@vyos-4:~$ show ipv6 bgp  
BGP table version is 0, local router ID is 10.0.0.4
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             2001:db8:5::1                          0 65001 65000 ?
*> 2001:db8:2::/64  2001:db8:5::1                          0 65001 65000 ?
*> 2001:db8:3:1::/64
                    2001:db8:5::1                          0 65001 65000 ?
*> 2001:db8:3:2::/64
                    2001:db8:5::1                          0 65001 65000 ?
*> 2001:db8:5::/64  ::                       1         32768 ?
*> 2001:db8:6::/64  ::                       1         32768 ?

Total number of prefixes 6
  • IPv6フォワーディング情報の確認
tsubo@vyos-4:~$ show ipv6 route forward 
2001:db8:2::/64 via 2001:db8:5::1 dev eth1  proto zebra  metric 1024 
2001:db8:3:1::/64 via 2001:db8:5::1 dev eth1  proto zebra  metric 1024 
2001:db8:3:2::/64 via 2001:db8:5::1 dev eth1  proto zebra  metric 1024 
2001:db8:5::/64 dev eth1  proto kernel  metric 256 
2001:db8:6::/64 dev eth2  proto kernel  metric 256 
fe80::/64 dev eth2  proto kernel  metric 256 
fe80::/64 dev eth0  proto kernel  metric 256 
fe80::/64 dev eth1  proto kernel  metric 256 
default via 2001:db8:5::1 dev eth1  proto zebra  metric 1024 

■ 最後に、エンドエンドでの疎通性を確認しておく

以下、vyos-4でのping/traceroute動作結果です

  • BGP配信されたIPv6ルーティングに従って、vyos-3宛てに、pingを打ってみる
tsubo@vyos-4:~$ ping6  2001:db8:2::1
PING 2001:db8:2::1(2001:db8:2::1) 56 data bytes
64 bytes from 2001:db8:2::1: icmp_seq=1 ttl=61 time=3.17 ms
64 bytes from 2001:db8:2::1: icmp_seq=2 ttl=61 time=2.79 ms
64 bytes from 2001:db8:2::1: icmp_seq=3 ttl=61 time=2.91 ms
64 bytes from 2001:db8:2::1: icmp_seq=4 ttl=61 time=2.78 ms
64 bytes from 2001:db8:2::1: icmp_seq=5 ttl=61 time=3.03 ms
^C
--- 2001:db8:2::1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 2.783/2.940/3.176/0.160 ms

 tracerouteも、打ってみる

tsubo@vyos-4:~$ traceroute6  2001:db8:2::1
traceroute to 2001:db8:2::1 (2001:db8:2::1), 30 hops max, 80 byte packets
 1  2001:db8:5::1 (2001:db8:5::1)  0.712 ms  0.422 ms  0.579 ms
 2  2001:db8:4:1::1 (2001:db8:4:1::1)  1.747 ms  2.726 ms  2.521 ms
 3  2001:db8:3:1::1 (2001:db8:3:1::1)  4.197 ms  4.138 ms  4.070 ms
 4  2001:db8:2::1 (2001:db8:2::1)  5.414 ms  5.418 ms  5.409 ms
  • BGP配信されたデフォルト経路に従って、vyos-3宛てに、pingを打ってみる
tsubo@vyos-4:~$ ping6 2001:db8:1::2
PING 2001:db8:1::2(2001:db8:1::2) 56 data bytes
64 bytes from 2001:db8:1::2: icmp_seq=1 ttl=61 time=2.85 ms
64 bytes from 2001:db8:1::2: icmp_seq=2 ttl=61 time=2.78 ms
64 bytes from 2001:db8:1::2: icmp_seq=3 ttl=61 time=2.92 ms
64 bytes from 2001:db8:1::2: icmp_seq=4 ttl=61 time=3.05 ms
64 bytes from 2001:db8:1::2: icmp_seq=5 ttl=61 time=2.84 ms
^C
--- 2001:db8:1::2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 2.780/2.890/3.051/0.103 ms

 tracerouteも、打ってみる

tsubo@vyos-4:~$ traceroute6 2001:db8:1::2
traceroute to 2001:db8:1::2 (2001:db8:1::2), 30 hops max, 80 byte packets
 1  2001:db8:5::1 (2001:db8:5::1)  0.751 ms  0.761 ms  0.715 ms
 2  2001:db8:4:1::1 (2001:db8:4:1::1)  1.779 ms  1.422 ms  1.372 ms
 3  2001:db8:3:1::1 (2001:db8:3:1::1)  2.223 ms  2.294 ms  2.240 ms
 4  2001:db8:1::2 (2001:db8:1::2)  2.201 ms  2.164 ms  2.126 ms

以上、IPv6ネットワークでのBGPルーティング動作が確認できました。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1