Назад | Перейти на главную страницу

CARP Virtual IP не проверяет связь в виртуализированной среде

У нас есть три физических машины со SmartOS в локальной сети. Двое из них, 10.40.0.30 и 10.40.0.240 представляют собой гипервизоры с двумя виртуализированными шлюзами на основе pfSense. Эти шлюзы имеют 10.40.0.1 и 10.40.0.2 адреса соответственно. Eсть 10.40.0.3 виртуальный IP-адрес, совместно используемый шлюзами. Третья машина SmartOS, 10.40.0.221, является хостом хранения. Ниже представлена ​​таблица ARP из него:

[root@68-05-ca-1a-d2-eb ~]# arp -a -n
Net to Media Table: IPv4
Device   IP Address               Mask      Flags      Phys Addr
------ -------------------- --------------- -------- ---------------
aggr0  224.0.0.251          255.255.255.255 S        01:00:5e:00:00:fb
aggr0  10.40.0.2            255.255.255.255          f2:b4:a3:21:de:9f
aggr0  10.40.0.3            255.255.255.255          00:00:5e:00:01:02
aggr0  10.40.0.1            255.255.255.255          a2:b1:25:07:ea:97
aggr0  10.40.0.15           255.255.255.255          20:6a:8a:0e:a5:6e
aggr0  10.40.0.30           255.255.255.255          02:08:20:ee:5b:8b
aggr0  10.40.0.240          255.255.255.255          02:08:20:3e:aa:9e
aggr0  224.0.0.22           255.255.255.255 S        01:00:5e:00:00:16
aggr0  10.40.0.221          255.255.255.255 SPLA     68:05:ca:1a:d2:eb
[root@68-05-ca-1a-d2-eb ~]# 

Как видите, в таблице ARP есть запись для общего виртуального IP. Проблема в том, что мы не можем пропинговать общий IP-адрес с хоста хранения и не видим входящие пакеты ICMP на виртуальных машинах pfSense.

Мы предполагаем, что проблема как-то связана с виртуализацией. Мы сняли все ограничения с виртуализированной сетевой карты:

root@a0-36-9f-17-e3-fe ~ dladm show-linkprop net1 -z d783afd7-f8e0-48bf-bc9d-b41939e7b8f8            
LINK         PROPERTY        PERM VALUE          DEFAULT        POSSIBLE
net1         autopush        rw   --             --             -- 
net1         zone            rw   d783afd7-f8e0-48bf-bc9d-b41939e7b8f8 -- -- 
net1         state           r-   unknown        up             up,down 
net1         mtu             rw   1500           1500           1500 
net1         secondary-macs  rw   --             --             -- 
net1         maxbw           rw   --             --             -- 
net1         cpus            rw   --             --             -- 
net1         cpus-effective  r-   1-2            --             -- 
net1         pool            rw   --             --             -- 
net1         pool-effective  r-   --             --             -- 
net1         priority        rw   high           high           low,medium,high 
net1         tagmode         rw   vlanonly       vlanonly       normal,vlanonly 
net1         protection      rw   --             --             mac-nospoof,
                                                                restricted,
                                                                ip-nospoof,
                                                                dhcp-nospoof 
net1         promisc-filtered rw  off            on             off,on 
net1         allowed-ips     rw   --             --             -- 
net1         allowed-dhcp-cids rw --             --             -- 
net1         rxrings         rw   --             --             -- 
net1         rxrings-effective r- --             --             -- 
net1         txrings         rw   --             --             -- 
net1         txrings-effective r- --             --             -- 
net1         txrings-available r- 0              --             -- 
net1         rxrings-available r- 0              --             -- 
net1         rxhwclnt-available r- 0             --             -- 
net1         txhwclnt-available r- 0             --             -- 
root@a0-36-9f-17-e3-fe ~ 

но работать не стало.

Что еще мы можем попробовать?

Я думаю, что вы должны настроить два шлюза, на которых работает UCARP, добавив эти атрибуты в конфигурацию сети:

  "allow_ip_spoofing": true,
  "allow_mac_spoofing": true

Для этого вы можете создать файл, назвав его, например, updatenic.json.

{
   "update_nics": [
      {
         "mac": "e2:31:fc:70:df:1c",
         "allow_ip_spoofing": true,
         "allow_mac_spoofing": true
      }
   ]
}

затем введите команду

vmadm update UUID < updatenic.json

Просто включите интерфейс виртуального промискового режима в виртуальном боксе.