Mon bloc IPv6 étant enfin routé correctement, je me suis attelé à la configuration de ce dernier sur le Dom0 et DomU Xen.
Ma configuration Xen étant à l'origine en bridge et disposant d'un bloc routé vers mon serveur, j'ai donc dût basculer ma configuration Xen en mode route. (vif-route)
Bien entendu à l'instar du mode bridge, le mode route n'est pas compatible IPv6 ...
Voici deux patch à appliquer (compatible Xen-4) ainsi qu'un exemple de configuration (Gentoo).
1) Dom0
--- vif-common.sh~ 2010-04-07 18:12:04.000000000 +0200
+++ vif-common.sh 2010-06-26 23:08:38.000000000 +0200
@@ -14,7 +14,7 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
-
+# IPv6 Patched by Timeuhmeuh
dir=$(dirname "$0")
. "$dir/xen-hotplug-common.sh"
@@ -135,6 +135,17 @@
ip addr show "$1" | awk "/^.*inet.*$1\$/{print \$2}" | sed -n '1 s,/.*,,p'
}
+##
+# ip6_of interface
+#
+# Print the IPv6 address currently in use at the given interface, or nothing if
+# the interface is not up.
+#
+ip6_of()
+{
+ ip -6 addr show dev "$1" scope global | awk -F'[ |/]' '/inet6 (([0-9a-f]+:*)+)/ { print $6 } ' | awk '/::/ {print $1}'
+}
+
##
# dom0_ip
@@ -156,3 +167,38 @@
fi
echo "$result"
}
+
+##
+# dom0_ip6
+#
+# Print the IPv6 address of the interface in dom0 through which we are routing.
+# This is the IPv6 address on the interface specified as "netdev" as a parameter
+# to these scripts, or eth0 by default. This function will call fatal if no
+# such interface could be found.
#
+dom0_ip6()
+{
+ local nd=${netdev:-eth0}
+ local result=$(ip6_of "$nd")
+ if [ -z "$result" ]; then
+ echo ""
+ else
+ echo "$result"
+ fi
+}
+
+##
+# is_ip6
+#
+# Verifing IPv6 address
+#
+is_ipv6()
+{
+case "$1" in
+ *:*:*)
+ echo "yes"
+ ;;
+ *)
+ echo ""
+esac
+}
--- vif-route~ 2010-04-07 18:12:04.000000000 +0200
+++ vif-route 2010-06-26 23:12:45.000000000 +0200
@@ -18,17 +18,24 @@
# Read from the store:
# ip list of IP networks for the vif, space-separated (default given in
# this script).
+#
+# IPv6 Patched by Timeuhmeuh - http://blog.yacoubi.fr
#============================================================================
dir=$(dirname "$0")
. "$dir/vif-common.sh"
main_ip=$(dom0_ip)
+main_ip6=$(dom0_ip6)
case "$command" in
online)
+ log info "[vif-route] online request, ip ${ip} with main_ip ${main_ip} and main_ip6 ${main_ip6} for $vif."
ifconfig ${vif} ${main_ip} netmask 255.255.255.255 up
- echo 1 >/proc/sys/net/ipv4/conf/${vif}/proxy_arp
+ if [ ! -z "${main_ip6}" ]; then
+ ip -6 addr add ${main_ip6} dev ${vif}
+ fi
+ echo 1 >/proc/sys/net/ipv4/conf/${vif}/proxy_arp
ipcmd='add'
cmdprefix=''
;;
@@ -43,7 +50,16 @@
# If we've been given a list of IP addresses, then add routes from dom0 to
# the guest using those addresses.
for addr in ${ip} ; do
- ${cmdprefix} ip route ${ipcmd} ${addr} dev ${vif} src ${main_ip}
+ result=$(is_ipv6 "${addr}")
+ if [ -z "${result}" ] ; then
+ result=`${cmdprefix} ip route ${ipcmd} ${addr} dev ${vif} src ${main_ip} 2>&1`
+ log info "[vif-route] Result: ${result}"
+ else
+ log info "[vif-route] Adding IPv6 address ${addr} with src ${main_ip6} for $vif."
+ result=`${cmdprefix} ip -6 route ${ipcmd} ${addr} dev ${vif} src ${main_ip6} 2>&1`
+ log info "[vif-route] Result: ${result}"
+ fi
+# ${cmdprefix} ip route ${ipcmd} ${addr} dev ${vif} src ${main_ip}
done
fi
config_eth0=( "192.168.0.1/24" "2001:758:f00:340:192:168:0:12/64" "2001:758:5312::/48" )
vif = [ 'ip=2001:758:5312::2 192.168.0.10' ]
2) Dom0
config_eth0=( "192.168.0.2/24" "2001:758:5312::2/48" )
routes_eth0=( "default gw 192.168.0.1" "default via 2001:758:5312::" )
Patch :
Lien utile : xen-and-routed-ipv6