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 で 基本設定と kvm 、vagrant 入れる
- vagrant-libvirtd で kvm 上に vyos を複数台立てて相互接続
上記の採用理由
- プライベート用なので費用はできるだけ抑えたい
- ある程度スケールして欲しい
- DigitalOcean 安くて kvm 動く。スケールもする(お金かかるけど)
- droplet のスナップショット使わずになぜ ansible?
- ansible やってみたかった
- いつでもDigitalOcean やめれるように
- vyos は一番手軽に使えるソフトウェアルータなので。Vagrant の Box もあるし
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