このときのノード構成で、ルータをvMXに変えて、ついでにIPv6でも試してみる*1。コミュニティ投げるほうはBIRDのまま。
動機というかきっかけというか
前にVXLAN試したあとにもいろいろ読んでいて特に
tech.fjct.fujitsu.com
読んでいたらもうすこしVXLANがっつり試してみたくなった。それでまずこの中でも利用したとあったvMXを入手してみる。vMX Trialは、そのダウンロードの難易度が高いらしくダウンロード武勇伝記事を散見。確かにダウンロードできるまでに数日かかった、なんとかアクセス権get。
で、とりあえず、vMXに慣れるつもりで、先日のbgp つかったblack holeデモを設定してみる。ついでにIPv6でもやってみる。bhするルータノードをvMXにする。*2
結果メモ
triggerのBIRD側は2.0を使う*3。bhとかflowを発動させてみるのがvmx。
- rtbh
bh時にnext hopをbh先としての別ポートに振るとき、コミュニティとともに渡すnext-hopアドレスが、コミュニティを受けたポートで送出できるアドレスでないと有効ルートとみなしてもらえないようにみえた。show route hidden detailでみるとこんな理由が出力されていた。
Hidden reason: protocol nexthop is not on the interface
単純構成から始めよう、という以外には意図のない構成でやっていたことに起因したみたい。今回の場合、protocol bgp で、これをつけないといけないらしい。(single-hopのEBGPで同じサブネットネットワークアドレス以外に振りたい場合に必要、らしい)
accept-remote-nexthop;
間にひとつvMXと同じASNのルータを挟んでやったらいらなくなった。*4
- flowspec
受ける側・制御する側:vMX
受けたflowの検査をまったくしないで受け入れる(この例はIPv4だけ)
protocols { bgp { local-as 65000; group PEER-T { type external; family inet { unicast; flow { no-validate NO-VALIDATION; } } } } } policy-options { policy-statement NO-VALIDATION { term 1 { then accept; } } }
投げる側・リクエストする側:BIRD
BIRDのdocumentで探していて、Actionにあたる設定キーワードがない、と思っていたら、flowspec上は拡張コミュニティ(RFC4360)の形式なので以下のようになるらしい。この例はtraffic-rate 0なので全断。
protocol static flowstat4 { flow4; route flow4 { dst 10.100.1.123/32; proto = 1; }{ bgp_ext_community.add( (generic, 0x80060000, 0x0 ) ); }; }
参考になったもの(Part2以降にも期待、、、)
今回自分ルールで、flowspecにも(bhと別の)コミュニティーつけてみる
- flowspec(IPv6)
IPv4と同じだと思ったのですが、試した範囲内で微妙な予想外の挙動がありました。
プロトコルを指定したときのパラメータ自体がprotoでなくnext headerになっているらしいが58も1も効かなかった。icmp typeの指定でpingを落とすことができた。
protocol static flowstat6 { flow6; route flow6 { dst fc00:10:100:1::123/128;icmp type 128; }{ bgp_ext_community.add( (generic, 0x80060000, 0x0 ) ); }; }
icmp type 128;でなくnext header = 58;だと
staticでvMXに直接いれてみたときも似た感じ。
set routing-options rib inet6.0 flow route DROPICMP6 match destination fc00:10:100:1::123/128 set routing-options rib inet6.0 flow route DROPICMP6 match icmp6-type echo-request set routing-options rib inet6.0 flow route DROPICMP6 then discard
match protocol icmp6だと効かなかった、謎*5
その他
- 少しはvMX慣れたつもりで,VXLANを通すのを次の機会に挑戦するつもり
その他2
vmx 設定の最終形
accept-remote-nexthopは外した
multiprotocol-bgpでpolicy-statementにv4v6押し込めてる
root> show configuration | display set set version 17.1R1.8 set system syslog user * any emergency set system syslog file messages any notice set system syslog file messages authorization info set system syslog file interactive-commands interactive-commands any set interfaces ge-0/0/0 unit 0 family inet address 172.31.2.1/24 set interfaces ge-0/0/0 unit 0 family inet6 address fc00:2::1/64 set interfaces ge-0/0/1 unit 0 family inet address 172.31.3.1/24 set interfaces ge-0/0/1 unit 0 family inet6 address fc00:3::1/64 set interfaces ge-0/0/2 unit 0 family inet address 172.31.1.1/24 set interfaces ge-0/0/2 unit 0 family inet6 address fc00:1::1/64 set interfaces ge-0/0/3 unit 0 family inet address 172.16.0.1/24 set interfaces ge-0/0/3 unit 0 family inet6 address fc00:172:16::254/64 set interfaces fxp0 disable set routing-options rib inet.0 static route 0.0.0.0/0 discard set routing-options rib inet.0 static route 192.168.100.1/32 next-hop 172.16.0.254 set routing-options rib inet6.0 static route ::/0 discard set routing-options rib inet6.0 static route fc00:192:168:100::1/128 next-hop fc00:172:16::254 set routing-options router-id 172.31.1.1 set routing-options autonomous-system 65000 set protocols bgp group PEER4U type external set protocols bgp group PEER4U peer-as 65002 set protocols bgp group PEER4U local-as 65000 set protocols bgp group PEER4U neighbor 172.31.3.2 description UsersArea set protocols bgp group PEER6U type external set protocols bgp group PEER6U peer-as 65002 set protocols bgp group PEER6U local-as 65000 set protocols bgp group PEER6U neighbor fc00:3::2 description UsersArea set protocols bgp group PEER-TRIGGER type internal set protocols bgp group PEER-TRIGGER import RECV-COMMUNITY set protocols bgp group PEER-TRIGGER family inet unicast set protocols bgp group PEER-TRIGGER family inet flow prefix-limit maximum 5 set protocols bgp group PEER-TRIGGER family inet flow no-validate NO-VALIDATION set protocols bgp group PEER-TRIGGER family inet6 unicast set protocols bgp group PEER-TRIGGER family inet6 flow no-validate NO-VALIDATION set protocols bgp group PEER-TRIGGER export REJECT set protocols bgp group PEER-TRIGGER peer-as 65000 set protocols bgp group PEER-TRIGGER local-as 65000 set protocols bgp group PEER-TRIGGER neighbor 172.31.2.2 description multiprotocol-bgp set policy-options policy-statement ACCEPT then accept set policy-options policy-statement NO-VALIDATION then accept set policy-options policy-statement RECV-COMMUNITY term v4 from protocol bgp set policy-options policy-statement RECV-COMMUNITY term v4 from community CM-BLACKHOLE set policy-options policy-statement RECV-COMMUNITY term v4 from community CM-FLOWSPEC set policy-options policy-statement RECV-COMMUNITY term v4 from route-filter 0.0.0.0/0 prefix-length-range /32-/32 set policy-options policy-statement RECV-COMMUNITY term v4 then accept set policy-options policy-statement RECV-COMMUNITY term v6 from protocol bgp set policy-options policy-statement RECV-COMMUNITY term v6 from community CM-BLACKHOLE set policy-options policy-statement RECV-COMMUNITY term v6 from community CM-FLOWSPEC set policy-options policy-statement RECV-COMMUNITY term v6 from route-filter ::/0 prefix-length-range /128-/128 set policy-options policy-statement RECV-COMMUNITY term v6 then accept set policy-options policy-statement RECV-COMMUNITY then reject set policy-options policy-statement REJECT then reject set policy-options community CM-BLACKHOLE members 65000:666 set policy-options community CM-FLOWSPEC members 65000:667