===== How to recover tags ===== === Il problema === Uno dei motivi possibili quando ci sono problemi di rete all'interno di una cloud e` che il sistema di vlan locale si sia rovinato. Verificarlo e` facile, dai network e dai compute node si usa il comando ovs-vsctl show. [root@compute ~]# ovs-vsctl show 874fc576-86c4-4933-b18a-2add7bd295ab Bridge br-int Port "qvo88806e42-19" tag: 3 Interface "qvo88806e42-19" Port "qvo0c4337ad-fd" tag: 59 Interface "qvo0c4337ad-fd" Port "qvof645ca47-20" tag: 1 Interface "qvof645ca47-20" Port "qvob9f354cb-cf" tag: 59 Interface "qvob9f354cb-cf" ........... Ogni porta del bridge br-int il cui nome non sia patch-… e non sia br-int, deve avere la linea tag:, se non ce l'ha c'e` un problema. br-int puo` essere considerato come uno switch di livello due con tante porte, a ogni porta e` assegnata una vlan il cui id e` indicato dal tag. Nel caso di un compute node a ogni porta di br-int e` virtualmente connessa una virtual machine, nel network node alle porte sono connessi i dhcp server e i gateway. Vm della stessa rete sullo stesso compute node saranno connesse a porte con lo stesso tag, stesso discorso sui network per il gateway e il dhcp server della stessa rete. Per recuperare i tag scomparsi bisogna risalire alla rete ip connessa alla porta in questione. Una volta individuata la rete si puo` conoscere il "segmentation_id" che rappresenta il numero che identifica i pacchetti all'interno del tunnel gre e da qui individuare il tag. === Individuare il segmentation-id === == Virtual Machine == Le virtual machine sono connesse a porte il cui nome inizia per qvo. [root@compute ~]# ovs-vsctl show 874fc576-86c4-4933-b18a-2add7bd295ab Bridge br-int Port "qvo0c4337ad-fd" Interface "qvo0c4337ad-fd" Devo risalire al mac-address della vm e da li` alla sua rete. Cerco l'interfaccia sostituendo qvo con tag. Il mac-address vero comincia con fa anziche' fe come compare da ifconfig, l'ip si puo` cercare sia sul database mysql che da command line [root@compute ~]# ifconfig | grep tap0c4337ad-fd tap0c4337ad-fd Link encap:Ethernet HWaddr FE:16:3E:32:9B:7E mysql> use neutron_prod mysql> select network_id from ports where mac_address="fa:16:3e:32:9b:7e"; +--------------------------------------+ | network_id | +--------------------------------------+ | ec58b394-f1ea-4af9-b233-5664128bb9ed | +--------------------------------------+ 1 row in set (0.00 sec) mysql> select segmentation_id from ovs_network_bindings where network_id="ec58b394-f1ea-4af9-b233-5664128bb9ed"; +-----------------+ | segmentation_id | +-----------------+ | 11 | +-----------------+ 1 row in set (0.00 sec) Oppure [root@controller ~]# neutron port-list | grep fa:16:3e:32:9b:7e | 0c4337ad-fdc0-4b83-8444-3b713104c50d | | fa:16:3e:32:9b:7e | {"subnet_id": "a4bafbd8-4275-4786-acc0-12515b794c86", "ip_address": "10.64.11.16"} | [root@controller ~]# neutron net-list | grep 10.64.11. | ec58b394-f1ea-4af9-b233-5664128bb9ed | Guest-lan | a4bafbd8-4275-4786-acc0-12515b794c86 10.64.11.0/24 | [root@controller ~]# neutron net-show ec58b394-f1ea-4af9-b233-5664128bb9ed | grep segmentation_id | provider:segmentation_id | 11 | | == Dhcp server == I dhcp server sui network node sono connessi a porte il cui nome inizia per tap. [root@network ~]# ovs-vsctl show bf049d01-0798-4d8b-9568-464fcbae2b96 Bridge br-int Port "tapcdb55ed4-85" Interface "tapcdb55ed4-85" type: internal La rete ip si trova facilmente con un ps [root@network ~]# ps aux | grep tapcdb55ed4-85 nobody 4947 0.0 0.0 12888 660 ? S Feb12 0:00 dnsmasq --no-hosts --no-resolv --strict-order --bind-interfaces --interface=tapcdb55ed4-85 --except-interface=lo --pid-file=/var/lib/neutron/dhcp/09934abe-4170-46b2-afa1-8a2b3533dba8/pid --dhcp-hostsfile=/var/lib/neutron/dhcp/09934abe-4170-46b2-afa1-8a2b3533dba8/host --dhcp-optsfile=/var/lib/neutron/dhcp/09934abe-4170-46b2-afa1-8a2b3533dba8/opts --leasefile-ro --dhcp-range=tag0,10.64.14.0,static,86400s --dhcp-lease-max=256 --conf-file= --domain=openstacklocal La rete e` la 10.64.14.0 mysql> select network_id from subnets where cidr="10.64.14.0/24"; +--------------------------------------+ | network_id | +--------------------------------------+ | 09934abe-4170-46b2-afa1-8a2b3533dba8 | +--------------------------------------+ 1 row in set (0.00 sec) mysql> select segmentation_id from ovs_network_bindings where network_id="09934abe-4170-46b2-afa1-8a2b3533dba8"; +-----------------+ | segmentation_id | +-----------------+ | 10 | +-----------------+ 1 row in set (0.00 sec) Oppure [root@controller ~]# neutron subnet-list | grep 10.64.14.0 | 2d399746-45a9-4835-b773-22de630195f4 | sub-first-lan | 10.64.14.0/24 | {"start": "10.64.14.2", "end": "10.64.14.254"} | [root@controller ~]# neutron subnet-show 2d399746-45a9-4835-b773-22de630195f4 | grep network_id | network_id | 09934abe-4170-46b2-afa1-8a2b3533dba8 [root@controller ~]# neutron net-show 09934abe-4170-46b2-afa1-8a2b3533dba8 | grep segmentation_id | provider:segmentation_id | 10 | == Gateway == I gateway sui network node sono connessi a porte il cui nome inizia per qr. [root@network ~]# ovs-vsctl show bf049d01-0798-4d8b-9568-464fcbae2b96 Bridge br-int Port "qr-91e6cdf7-bc" Interface "qr-91e6cdf7-bc" type: internal Bisogna cercare l'indirizzo ip nei namespace dei router, fino a che non si trova una risposta. [root@network ~]# ip netns | grep qrouter qrouter-1450abf3-5513-4916-aa96-254c66f96888 qrouter-231d199c-d768-4e00-9099-c163df8b3230 [root@network ~]# ip netns exec qrouter-1450abf3-5513-4916-aa96-254c66f96888 ifconfig | grep -A1 qr-91e6cdf7-bc [root@network ~]# ip netns exec qrouter-231d199c-d768-4e00-9099-c163df8b3230 ifconfig | grep -A1 qr-91e6cdf7-bc qr-91e6cdf7-bc Link encap:Ethernet HWaddr FA:16:3E:D4:54:84 inet addr:10.64.14.1 Bcast:10.64.14.255 Mask:255.255.255.0 Il resto del procedimento e` uguale al precedente. === Individuare il tag e assegnarlo === Il passaggio dal segmentation_id al tag e` uguale per tutti i tipi di nodo. Si cerca nella tabella dei flussi la corrispondenza tra vlan_vid, che e` quello che si sta cercando e il tun_id che e` il segmentation_id espresso in esadecimale. [root@compute ~]# ovs-ofctl dump-flows br-tun | grep table=2, | grep tun_id=0xb cookie=0x0, duration=603456.297s, table=2, n_packets=218540, n_bytes=285300291, idle_age=474, hard_age=65534, priority=1,tun_id=0xb actions=mod_vlan_vid:59,resubmit(,10) risulta che il tag per la porta qvo0c4337ad-fd del compute node e` 59 e si puo` riassegnare [root@compute ~]# ovs-vsctl set port qvo0c4337ad-fd tag=59