DigiLoog

PC関係の事なら何でもいけるそんな処

自宅の「Cisco/Juniper/Fortigate」でBGPを喋らせてみた

2017年08月26日(土) - 23:54 | カテゴリ: Network

結構前から『自宅ラックでBGP喋らせたいな~ IHAnet繋ぎたいな~』と思いつつも、
やる事が多かったり、設備が足りなかったり、そもそもBGP知識が無かったりして断念していた。

ただ、このまま燻らせて画面しても体に悪いし、最近はNWネタに疎くなりつつあるので、
NW知識を定着させる意味も込めて、3ベンダーをごちゃ混ぜにしてBGPピアを張ってみた。


今回はIPv6オンリーでBGPを喋らせてみた。
ただ、このままだとIPv4へ接続出来ないので、FortigateでNAT64もしてみた。

コアの部分はiBGPにstaticとconnectedを再配布する構成にしてみた。
本当はクライアントPCセグメントでOSPFを喋らせて、BGPとOSPFで再配布したかったのだが、
Cisco 1812JでIPv6のVRFを使っているインターフェースではOSPFv3を喋れない事が判明し、
今回は断念してstaticでルーティングを切った。

あと、本業でBGP取り扱っている人には怒られそうだが、
各BGPスピーカーでピアを張るのが面倒くさかったので、Cisco 1812Jにルートリフレクタも兼用させ、
他のスピーカーからピアを張る形にしてセッション数削減。
こうした事で、別ベンダー装置のBGP検証を行う時も、
ルートリフレクタのみにピアを張ればルーティングテーブルを取得出来るようにした。

今回のキモとなったのは、実はJuniperSRX100の方だった。
今までJuniper製品を殆ど触った事が無いのと、
DefaultRouteをBGP網に流しつつも他NWへ「お漏らし」しないようにフィルタリングしたり、
loopback I/FからBGPのセッションが張れなかったりと四苦八苦した。
最終的にはACL制御をミスってloopback宛の通信をAnyDenyしていたり、
アドバタイズするプレフィックスをミスっているだけだったのだが、
原因調査の過程でコマンドを色々触ったので勉強になった。

FortigateのBGPは難なく設定が完了した。が、NAT64の方でハマった…
NAT64のフューチャーをenableにして、NAT64ルールを作成しても一向に通信出来なかった。
最後の方では、Fortigate上でパケットキャプチャ、デバッグモードでフロー確認もしたのだが、
「”64::FF9B::/96″宛のルーティングテーブルが無い」と言われているだけで謎だった。
海外のサイトも漁った所、「再起動するヨロシ」と書かれていたので再起動を試した所、
NAT64で接続が出来てしまい『自分の苦労は何だったんだろう…』と思ったが、
まぁこんな事もあるだろう _(:3」∠)_

………

着々と進んでいる”ns-lab BB”のIPv6対応だが、
今回の構築を行った事で、BGPの検証環境とNAT64実環境を構築出来たのは収穫。
自分が作成したコンフィグは、レベルが低くて公開出来るレベルでは無いのだが、
時間ある時に公開もしてみようと思う。
折角なので、コンフィグの一部を公開。

………

  • Juniper SRX100
interfaces {
    lo0 {
        unit 0 {
            family inet6 {
                address 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:100/128;
            }
        }
    }
}
routing-options {
    rib inet6.0 {
        static {
            route ::/0 next-hop "DefaultRouteの向け先";
            route 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:1812/128 next-hop "Cisco1812JのIPv6アドレス";
            route 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:60/128   next-hop "Fortigate60DのIPv6アドレス";
        }
    }
    router-id 10.0.0.100;
    autonomous-system 65000;
}
protocols {
    bgp {
        export AS65000 {
        group GROUP_AS65000 {
            type internal;
            local-address 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:100;
            log-updown;
            family inet6 {
                unicast;
            }
            neighbor 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:1812;
        }
    }
}
policy-options {
    policy-statement AS65000 {
        term redistribute {
            from {
                protocol static;
                route-filter ::/0 exact;
            }
            then {
                next-hop self;
                accept;
            }
        }
        then reject;
    }
}

………

  • Cisco 1812J
interface Loopback0
 vrf forwarding vrf_ipv6
 no ip address
 ipv6 address 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:1812/128
 ipv6 nd router-preference High
!
vrf definition vrf_ipv6
 rd 10.0.18.12:6
 !
 address-family ipv4
 exit-address-family
 !
 address-family ipv6
 exit-address-family
!
router bgp 65000
 bgp router-id 10.0.18.12
 no bgp default ipv4-unicast
 bgp log-neighbor-changes
 !
 address-family ipv4 vrf vrf_ipv6
  no synchronization
 exit-address-family
 !
 address-family ipv6 vrf vrf_ipv6
  neighbor 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:100 remote-as 65000
  neighbor 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:100 update-source Loopback0
  neighbor 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:100 activate
  neighbor 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:100 route-reflector-client
  neighbor 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:60  remote-as 65000
  neighbor 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:60  update-source Loopback0
  neighbor 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:60  activate
  neighbor 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:60  route-reflector-client
  redistribute connected
  redistribute static
  default-information originate
  no synchronization
 exit-address-family
!
ipv6 route vrf vrf_ipv6 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:100/128 "JuniperSRX100のIPv6アドレス"
ipv6 route vrf vrf_ipv6 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:60/128  "Fortigate60DのIPv6アドレス"

………

  • Fortigate 60D
config system interface
    edit "loopback1"
        set vdom "root"
        set type loopback
        set snmp-index 1
        config ipv6
            set ip6-allowaccess ping
            set ip6-address 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:60/128
        end
    next
end
config router access-list6
    edit "bgp-nat64"
        config rule
            edit 10
                set prefix6 64:ff9b::/96
                set exact-match enable
            next
            edit 20
                set action deny
                set exact-match disable
            next
        end
    next
end
config router route-map
    edit "bgp-route-map"
        config rule
            edit 10
                set match-ip6-address "bgp-nat64"
            next
        end
    next
end
config router static6
    edit 1
        set dst 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:1812/128
        set gateway "Cisco1812JのIPv6アドレス"
        set device "wan2"
    next
    edit 2
        set dst 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:100/128
        set gateway "JuniperSRX100のIPv6アドレス"
        set device "wan2"
    next
    edit 3
        set dst 64:ff9b::/96
        set gateway 2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:60
        set device "loopback1"
    next
end
config router bgp
    set as 65000
    set router-id 10.0.0.60
    config neighbor
        edit "2001:470:FDB0:FFFF:FFFF:FFFF:FFFF:1812"
            set remote-as 65000
            set route-map-out6 "bgp-route-map"
            set update-source "loopback1"
        next
    end
    config redistribute6 "static"
        set status enable
    end
end




  • 応援中

    はじめるセカイの理想論 -goodbye world index-