IPv6 bridging, routing und proxy_ndp mit OpenVZ veth-Devices
Uebersicht
Konfiguration eines Netzes mit vit virtuellen Servern. Es können so mehrere unterschiedliche /64 Subnetze unabhängig über mehrere Bridgen betrieben werden. Das folgende Beispiel zeigt ein Subnetz im gleichen Netz wie wie der Hostnode.
Weil eine IPv6 Bridge, resp. die dahinter liegenden Hosts, unter OpenVZ nicht auf 'neighbor solicitation' Nachrichten antworten, muss mittles NDP Proxy ( entsprechend etwa dem 'proxy arp' in IPv4 ) auf dem Hostnode die Adressen der VM's stellvertretend bekannt gemacht werden.
Diese Konfiguration sollte mit KVM genauso nutzbar sein.
.----------. 2001:1:2:3::1/48 .---------------. | IPv6 |______________________| Server | 2001:2:3:4::100/64 | Router | eth0| openvz | *----------* *---------------* | 2001:2:3:4::100/64 vzbridge / \ veth1 | | veth2 | | 2001:2:3:4::101/64 | | 2001:2:3:4::102/64 | | eth0 | | eth0 [VM 1] [VM 2]
OpenVZ ctid.conf
OpenVZ kann mit den venet-Devices weder mit Bridges noch mit IPv6 sauber umgehen. Darum muss für die Gastsysteme die Konfiguration von venet- auf veth-Devices umgestellt werden.
Dafür in der Gastkonfig den Parameter "IP_ADDRESS=" entfernen und mit folgenden Parametern erweitern:
[VM 1]
FEATURES="sit:on "
CAPABILITY="NET_ADMIN:on "
CONFIG_CUSTOMIZED="yes"
VETH_IP_ADDRESS="192.168.X.X"
NETIF="ifname=eth0,mac=00:XX:XX:XX:XX:X,host_ifname=veth1,host_mac=00:XX:XX:XX:XX:XX"
[VM 2]
FEATURES="sit:on "
CAPABILITY="NET_ADMIN:on "
CONFIG_CUSTOMIZED="yes"
VETH_IP_ADDRESS="192.168.X.X"
NETIF="ifname=eth0,mac=00:XX:XX:XX:XX:X,host_ifname=veth2,host_mac=00:XX:XX:XX:XX:XX"
Die MAC-Adressen sowie die IPv4 Adresse (falls benötigt) natürlich entsprechend ersetzen.
Bridge
Bridge einrichten, Devices zuordnen und eine Adresse für die Bridge vergeben.
# /sbin/brctl addbr vzbridge
# /sbin/brctl addif vzbridge veth1
# /sbin/brctl addif vzbridge veth2
# /sbin/ifconfig vzbridge up
# /sbin/ip -6 addr add 2001:2:3:4::100 dev vzbridge
Routing
Routen der VM's über die Bridge.
# sysctl -w net.ipv6.conf.all.forwarding=1
# sysctl -w net.ipv6.conf.default.forwarding=1
# /sbin/ip -6 route add 2001:1:2:3::101 dev vzbridge
# /sbin/ip -6 route add 2001:1:2:3::102 dev vzbridge
proxy_ndp:
Host openvz agiert als Proxy für 2001:1:2:3::101 und 2001:1:2:3::102 in Richtung Interface eth0.
# sysctl -w net.ipv6.conf.all.proxy_ndp=1
# sysctl -w net.ipv6.conf.default.proxy_ndp=1
# ip -6 neigh add proxy 2001:1:2:3:101 dev eth0
# ip -6 neigh add proxy 2001:1:2:3:102 dev eth0
Das "dev eth0" ist etwas verwirrend, stimmt aber, weil in dieser Kontellation das dev auf das Interface verweist, auf welchem der Hostnode auf 'neighbor solicitation' Anfragen antworten soll.
Mit den Tools auf IPv6Tech.ch können Sie Ihre Konfiguration testen: Ping-Test , Traceroute , TCP-Portscan und UDP-Portscan.