VyOSでOSPF

VyOSでOSPF

VyOSでOSPFを設定してみる。

ソフトウェア バージョン
VyOS 1.4-rolling-202203080319
VirtualBox 6.1.32 r149290 (Qt5.6.3)
Vagrant 2.2.19
vagrant-vyos 1.1.10

構築環境

Vagrantで準備するとeth0としてNATタイプのインタフェースとdefaultルートが設定されます。 図には載せないですが全てのホストでdefaultルートがeth0経由でホストマシンに向いています。 また実際にはDebianホストは立てませんでした。

ネットワーク図

属性
backbone 100.0.10.0/24
local 100.0.20.0/24
seg1 100.1.10.0/24
seg2 100.2.10.0/24

OSPFネイバー間で area とセグメントが共有されていないと経路交換が行われません。 こういった条件は使わないと忘れがちです。試行錯誤中にググったらまとめ記事が見つかり気づけました。

プロトコルの仕様はRFC2328(STD54)です。10.1章にネイバーの状態遷移の記載があります。

仮想マシン準備

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
Vagrant.configure("2") do |config|
  config.vm.box = "vyos/current"

  config.vm.define :vysite1 do | vysite1 |
    vysite1.vm.hostname = "vysite1"
    vysite1.vm.network :private_network, virtualbox__intnet: "seg1"
    vysite1.vm.network :private_network, virtualbox__intnet: "backbone"
  end
  config.vm.define :vysite2 do | vysite2 |
    vysite2.vm.hostname = "vysite2"
    vysite2.vm.network :private_network, virtualbox__intnet: "backbone"
    vysite2.vm.network :private_network, virtualbox__intnet: "local"
  end
  config.vm.define :vysite3 do | vysite3 |
    vysite3.vm.hostname = "vysite3"
    vysite3.vm.network :private_network, virtualbox__intnet: "local"
    vysite3.vm.network :private_network, virtualbox__intnet: "seg2"
  end
end

設定

vysite1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
configure
set interfaces ethernet eth1
set interfaces ethernet eth1 address 100.1.10.1/24
set interfaces ethernet eth2
set interfaces ethernet eth2 address 100.0.10.2/24

set protocols ospf area 0
set protocols ospf area 0 network 100.0.10.0/24
set protocols ospf area 0 network 100.1.10.0/24
commit
save

vysite2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
configure
set interfaces ethernet eth1
set interfaces ethernet eth1 address 100.0.10.1/24
set interfaces ethernet eth2
set interfaces ethernet eth2 address 100.0.20.2/24

set protocols ospf area 0
set protocols ospf area 0 network 100.0.10.0/24
set protocols ospf area 0 network 100.0.20.0/24
commit
save

vysite3

1
2
3
4
5
6
7
8
9
configure
set interfaces ethernet eth1 address 100.0.20.1/24
set interfaces ethernet eth2 address 100.2.10.1/24

set protocols ospf area 0
set protocols ospf area 0 network 100.0.20.0/24
set protocols ospf area 0 network 100.2.10.0/24
commit
save

確認作業

OSPFの設定状況

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# in vysite1
$ show ip ospf route
============ OSPF network routing table ============
N    100.0.10.0/24         [1] area: 0.0.0.0
                           directly attached to eth2
N    100.0.20.0/24         [2] area: 0.0.0.0
                           via 100.0.10.1, eth2
N    100.1.10.0/24         [1] area: 0.0.0.0
                           directly attached to eth1
N    100.2.10.0/24         [3] area: 0.0.0.0
                           via 100.0.10.1, eth2

============ OSPF router routing table =============

============ OSPF external routing table ===========

$ show ip ospf neighbor

Neighbor ID     Pri State           Dead Time Address         Interface                        RXmtL RqstL DBsmL
100.0.20.2        1 Full/Backup       35.180s 100.0.10.1      eth2:100.0.10.2                      0     0     0

疎通確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# in vysite1
$ traceroute  100.2.10.1
traceroute to 100.2.10.1 (100.2.10.1), 30 hops max, 60 byte packets
 1  lo0-100.BSTNMA-VFTTP-361.verizon-gni.net (100.0.10.1)  0.610 ms  0.751 ms  1.110 ms
 2  lo0-100.NYCMNY-VFTTP-341.verizon-gni.net (100.2.10.1)  2.382 ms  2.338 ms  2.318 ms

$ ping 100.2.10.1 count 1
PING 100.2.10.1 (100.2.10.1) 56(84) bytes of data.
64 bytes from 100.2.10.1: icmp_seq=1 ttl=63 time=1.22 ms

--- 100.2.10.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.219/1.219/1.219/0.000 ms

OSPFメモ

定義はRFC2328(STD54)です。 この野良解説がわかりやすかった。

  • set protocols ospf passive-interface default でデフォルトで自分からブロードキャストしないようにできる
  • set protocols ospf interface eth0 passive で特定インタフェースをpassiveにできる
    • 後ろに disable を続けるとOSPFを止められる
  • set protocols ospf parameters router-id <router-id> で明示的にルーターIDを指定できる
comments powered by Disqus