ospf のお勉強1

前回作った仮想環境で今更ながら基礎からの勉強
(前回あげた内容では試したいことができないので少し構成変更)

本来ならルータIDやら static などの経路再配布の設定もいるんやろうけど一旦最低限の設定で


1. 前回作った vyos 4台の環境で ospf 喋らせてみた

設定内容

  • vyos01
set protocols ospf area 0 network '192.168.10.0/24'
set protocols ospf area 0 network '192.168.20.0/24'
set protocols ospf passive-interface 'eth0'
  • vyos02
set protocols ospf area 0 network '192.168.10.0/24'
set protocols ospf area 0 network '192.168.40.0/24'
set protocols ospf passive-interface 'eth0'
  • vyos03
set protocols ospf area 0 network '192.168.20.0/24'
set protocols ospf area 0 network '192.168.30.0/24'
set protocols ospf passive-interface 'eth0'
  • vyos4
set protocols ospf area 0 network '192.168.30.0/24'
set protocols ospf area 0 network '192.168.40.0/24'
set protocols ospf passive-interface 'eth0'
set protocols ospf redistribute 'connected'

→ 実験用に4だけネットワークを1つ足した。  
    それを広報するためにこいつだけ connected な経路を redistribute してる。

vyos01 での確認結果

  • show ip ospf neighbor でネイバーを認識していることを確認
vyos@vyos01:~$ show ip ospf neighbor

    Neighbor ID Pri State           Dead Time Address         Interface            RXmtL RqstL DBsmL
192.168.121.143   1 Full/Backup       32.652s 192.168.10.102  eth1:192.168.10.101      0     0     0
192.168.20.103    1 Full/Backup       31.731s 192.168.20.103  eth2:192.168.20.101      0     0     0
vyos@vyos01:~$
  • show ip route ospf で経路を確認
vyos@vyos01:~$ show ip route ospf
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

O   192.168.10.0/24 [110/10] is directly connected, eth1, 01:20:36
O   192.168.20.0/24 [110/10] is directly connected, eth2, 01:20:36
O>* 192.168.30.0/24 [110/20] via 192.168.20.103, eth2, 00:02:04
O>* 192.168.40.0/24 [110/20] via 192.168.10.102, eth1, 01:19:11
O>* 192.168.50.0/24 [110/20] via 192.168.10.102, eth1, 00:02:03
  *                          via 192.168.20.103, eth2, 00:02:03
O   192.168.121.0/24 [110/20] via 192.168.10.102, 00:02:03
                              via 192.168.20.103, 00:02:03
vyos@vyos01:~$


→ 192.168.50.0/24 はイコールコストで2つの経路がある
  • 疎通確認、ルート確認
vyos@vyos01:~$ ping 192.168.50.104
PING 192.168.50.104 (192.168.50.104) 56(84) bytes of data.
64 bytes from 192.168.50.104: icmp_req=1 ttl=63 time=0.669 ms
64 bytes from 192.168.50.104: icmp_req=2 ttl=63 time=0.835 ms
^C
--- 192.168.50.104 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.669/0.752/0.835/0.083 ms



vyos@vyos01:~$ traceroute 192.168.50.104
traceroute to 192.168.50.104 (192.168.50.104), 30 hops max, 60 byte packets
 1  192.168.20.103 (192.168.20.103)  1.222 ms  1.197 ms  1.193 ms
 2  192.168.50.104 (192.168.50.104)  1.191 ms  1.189 ms  1.185 ms
vyos@vyos01:~$

→ vyos01からvyos04が持つ 192.168.50.104/24 へ ping が通った
→ trace した結果、192.168.20.103(vyos03)を通っている

2. イコールコスト な経路の片側のインターフェースに cost を設定してルートが変わることを確認
  • vyos03へ以下の設定を追加
set interfaces ethernet eth2 ip ospf cost '100'
  • vyos01 で経路が変わることを確認
vyos@vyos01:~$ show ip route ospf
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

O   192.168.10.0/24 [110/10] is directly connected, eth1, 01:28:59
O   192.168.20.0/24 [110/10] is directly connected, eth2, 01:28:59
O>* 192.168.30.0/24 [110/30] via 192.168.10.102, eth1, 00:00:08
O>* 192.168.40.0/24 [110/20] via 192.168.10.102, eth1, 01:27:34
O>* 192.168.50.0/24 [110/20] via 192.168.10.102, eth1, 00:00:07
O   192.168.121.0/24 [110/20] via 192.168.10.102, 00:00:07
vyos@vyos01:~$


vyos@vyos01:~$ traceroute 192.168.50.104
traceroute to 192.168.50.104 (192.168.50.104), 30 hops max, 60 byte packets
 1  192.168.10.102 (192.168.10.102)  0.986 ms  0.956 ms  0.953 ms
 2  192.168.50.104 (192.168.50.104)  0.950 ms  0.948 ms  0.946 ms
vyos@vyos01:~$


→ もともと192.168.50.0/24 に関して2つの経路が表示されていたが、1つ(192.168.10.102経由)のみに変化した  
→ trace の結果でも 192.168.10.102(vyos02)を通るようになっている

おまけ

KVMのホスト側で tcpdump すれば、ospf の Hello パケットが流れていることも見れる

[root@centos7-do ~]# tcpdump -i virbr3 -n -vvv
tcpdump: listening on virbr3, link-type EN10MB (Ethernet), capture size 262144 bytes
13:41:24.693338 IP (tos 0xc0, ttl 1, id 23626, offset 0, flags [none], proto OSPF (89), length 68)
    192.168.20.101 > 224.0.0.5: OSPFv2, Hello, length 48
        Router-ID 192.168.121.233, Backbone Area, Authentication Type: none (0)
        Options [External]
          Hello Timer 10s, Dead Timer 40s, Mask 255.255.255.0, Priority 1
          Designated Router 192.168.20.101, Backup Designated Router 192.168.20.103
          Neighbor List:
            192.168.20.103


13:41:27.024369 IP (tos 0xc0, ttl 1, id 23777, offset 0, flags [none], proto OSPF (89), length 68)
    192.168.20.103 > 224.0.0.5: OSPFv2, Hello, length 48
        Router-ID 192.168.20.103, Backbone Area, Authentication Type: none (0)
        Options [External]
          Hello Timer 10s, Dead Timer 40s, Mask 255.255.255.0, Priority 1
          Designated Router 192.168.20.101, Backup Designated Router 192.168.20.103
          Neighbor List:
            192.168.121.233

tcpdump するインターフェースの調べ方はこんな感じ?たぶん。

[root@centos7-do ~]# virsh net-list
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     yes           yes
 vagrant-libvirt      active     no            yes
 Vlan10               active     no            yes
 Vlan20               active     no            yes
 Vlan30               active     no            yes
 Vlan40               active     no            yes
 Vlan50               active     no            yes

[root@centos7-do ~]# virsh net-info Vlan30
Name:           Vlan30
UUID:           5b9de5b2-a3c6-42bf-849f-9c62e38b3a4b
Active:         yes
Persistent:     yes
Autostart:      no
Bridge:         virbr4        ★これを tcpdump の -i で指定

networkのプライベート検証環境

プライベート用の検証環境を作った話

最近はメーカがクラウドベースの検証サービスをいろいろ出しているみたいだけど、まぁ勉強ということで

ざっくりできたこと

  • DigitalOcean に droplet 立てる
  • ansible で 基本設定と kvmvagrant 入れる
  • vagrant-libvirtd で kvm 上に vyos を複数台立てて相互接続

上記の採用理由

  • プライベート用なので費用はできるだけ抑えたい
  • ある程度スケールして欲しい
  • DigitalOcean 安くて kvm 動く。スケールもする(お金かかるけど)
    • 今はawsでもベアメタルサーバが使えてkvm動くっぽいけど
  • droplet のスナップショット使わずになぜ ansible?
    • ansible やってみたかった
    • いつでもDigitalOcean やめれるように
  • vyos は一番手軽に使えるソフトウェアルータなので。Vagrant の Box もあるし

f:id:akimaya53:20190311233728p:plain
構成図

Vagrantファイル
もっと良い書き方あると思うけどわからなかった...

 # Vagrantfile for Vagrant version 2.0.0
 VAGRANTFILE_API_VERSION = "2"


 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "higebu/vyos"

  ## vyos01
  config.vm.define :vyos01 do |vyos|
    vyos.vm.host_name = "vyos01"
    vyos.vm.network "private_network",
      ip: "192.168.10.101",
      libvirt__netmask: "255.255.255.0",
      libvirt__network_name: "Vlan10",
      libvirt__forward_mode: "none"
    vyos.vm.network "private_network",
      ip: "192.168.20.101",
      libvirt__netmask: "255.255.255.0",
      libvirt__network_name: "Vlan20",
      libvirt__forward_mode: "none"
    end

  ## vyos02
  config.vm.define :vyos02 do |vyos|
    vyos.vm.host_name = "vyos02"
    vyos.vm.network "private_network",
      ip: "192.168.10.102",
      libvirt__netmask: "255.255.255.0",
      libvirt__network_name: "Vlan10",
      libvirt__forward_mode: "none"
    vyos.vm.network "private_network",
      ip: "192.168.40.102",
      libvirt__netmask: "255.255.255.0",
      libvirt__network_name: "Vlan40",
      libvirt__forward_mode: "none"
    end

  ## vyos03
  config.vm.define :vyos03 do |vyos|
    vyos.vm.host_name = "vyos03"
    vyos.vm.network "private_network",
      ip: "192.168.20.103",
      libvirt__netmask: "255.255.255.0",
      libvirt__network_name: "Vlan20",
      libvirt__forward_mode: "none"
    vyos.vm.network "private_network",
      ip: "192.168.30.103",
      libvirt__netmask: "255.255.255.0",
      libvirt__network_name: "Vlan30",
      libvirt__forward_mode: "none"
    end

  ## vyos04
  config.vm.define :vyos04 do |vyos|
    vyos.vm.host_name = "vyos04"
    vyos.vm.network "private_network",
      ip: "192.168.30.104",
      libvirt__netmask: "255.255.255.0",
      libvirt__network_name: "Vlan30",
      libvirt__forward_mode: "none"
    vyos.vm.network "private_network",
      ip: "192.168.40.104",
      libvirt__netmask: "255.255.255.0",
      libvirt__network_name: "Vlan40",
      libvirt__forward_mode: "none"
    vyos.vm.network "private_network",
      ip: "192.168.50.104",
      libvirt__netmask: "255.255.255.0",
      libvirt__network_name: "Vlan50",
      libvirt__forward_mode: "none"
    end

  config.vm.provider :libvirt do |v|
    v.memory = 128
    end

 end

やった内容はまた後ほど

ansibleでよく使うコマンドメモ


検索したらすぐ出てくるけど自分的によく使うやつ ほんとすぐ忘れる

ping確認
ansible -i inventory/hosts all -m ping --key-file filename -u username

dry run?
ansible-playbook -i inventory/hosts master.yml -vvv --check --key-file filename -u username

初投稿

ずっと自分の技術メモはEvernote に普段の日記と混ぜて書いてた。

けど日記の中から技術メモを探し出すのがめんどくさくなったので勢いでブログ開設。

 

どうせ細々ルールやら目標決めてもおざなりになるので緩く技術メモ書いてく。