IP NAT on SmartOS with bhyve

SmartOS ha introdotto accanto KVM anche BHYVE

Quinidi ho voluto usarlo visto che promette vantaggi rispetto kvm.  Ma ho trovato un impedimento.

Premessa: La soluzione più elegante e funzionale, per ottenere il traffico delle zone verso Internet, è quella di aggiungere un nuovo IP pubblico ad una zona con funzionalità di firewall/gateway. Il piccolo svantaggio è quello del costo del IP pubblico.

Il “mio” server Hetzner ha una sola scheda di rete e la configurazione di rete che ho sempre utilizzato usa la Global Zona per effettuare il nat delle zone. La configurazione è semplice, attraverso il file /usbkey/config  aggiungo la “stanza” per la nuova vnic, questa verrà aggiunta ed individuata con il nictag  “admin” al boot della Global Zone

gw_nic=00:1e:67:e7:a7:2b
gw0_ip=172.16.0.1
gw0_netmask=255.255.255.0
root@00-1e-67-e7-a7-2b /usbkey # ipadm  show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
igb0/?            dhcp     ok           AA.BB.CC.BB/26
gw0/_a            static   ok           172.16.0.1/24
lo0/v6            static   ok           ::1/128

il file /etc/ipf/ipnat.conf conterrà  la riga magica
map igb0 from 172.16.0.0/24 to any 0/32
e si abilita anche l’ip forwarding tramite il comando routeadm ip4_forwarding

root@00-1e-67-e7-a7-2b  # routeadm -u -e ipv4-forwarding

ed infine la zona contiene per la rete la sezione

{
“nic_tag”: “admin”,
“model”: “virtio”,
“ips”:[
“172.16.0.2/24”
],
“gateway”: “172.16.0.1”,
“primary”: 1,
“allow_ip_spoofing”: “true”
}
che contiene il riferimento alla nic_tag sia la possibilità del ip_spoofing

Ecco sino alla comparsa di BHYVE non ho mai avuto problemi. Questa configurazione combinata con la presenza di bhyve non funziona.

Le soluzioni che ho trovato per “aggirare” il problema sono

  • uso del vlan id nella definizione della vnic gw0 legata al nictag admin

#/usbkey/config
gw_nic=00:1e:67:e7:a7:2b
gw0_ip=172.16.0.1
gw0_netmask=255.255.255.0
gw0_vlan_id=”1000″

zone.json

{
“nic_tag”: “admin”,
“model”: “virtio”,
“ips”:[
“172.16.0.2/24”
],
“gateway”: “172.16.0.1”,
“primary”: 1,
“allow_ip_spoofing”: “true”,
“vlan_id”: “1000”
}
..

  • uso la definizione di un etherstub dedicato. Il comando nictagadm consente di create sia le vnic sia etherstub che vengono registre nel file /usbkey/config tali da renderli permaneti al reboot della Global Zone. Non ho trovato il modo di configurare una vnic su di una etherstub attraverso il file di configurazione config. Ho usato l’idea di  blackdoc

## setup gw2
if [ `dladm show-vnic | grep gw2 | wc -l` -ne 1 ]; then
/usr/sbin/dladm create-vnic -m 2:8:20:2c:83:7e -l switch1 gw2
/usr/sbin/ipadm create-addr -T static -a 172.18.0.1/24 gw2/v4
fi

ma all’interno del file  /opt/custom/share/svc/smartos_setup.sh  ideato a Tim Boudreau.

 

Con queste due modalità anche le zone BHYVE vengono “nattate” senza alcun problema mentre in precedenza avevo un funzionamento “strano” ping 8.8.8.8 funzionava mentre dig andava in timeout.

 

 

– letture consigliate che mi hanno guidato

https://docu.blackdot.be/snipets/solaris/smartos-nat  ( ipnat with etherstub )

https://gist.github.com/baetheus/5e1e5ab1eb68fae3490d ( ipnat with vlan )

https://timboudreau.com/blog/smartos/read (http://www.renatomorano.net/?p=2316)

ps.

mi sono fatto l’idea che BHYVE in qualche modo impedisce le comunicazioni all’interno del nictag admin in un modo che non conosco.

Comments are closed.