[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATH] tools/hotplug/Linux: Add IPv6 support to vif-common filtering
On Mon, 2013-05-13 at 14:55 +0100, Sylvain Munaut wrote: > The vif-common.sh hotplug script doesn't support ipv6 iptables > filtering setup. The attached patch adds basic filtering capability so > that if an IPv6 is specified, it's added to the 'authorized' source > list. > Basically the same behavior as for ipv4. > > I've been using this patch for some time on xen 4.1 and I've just > forward ported it to xen master (it applied cleanly and didn't see any > changes that would matter). Thanks, this looks plausible, at least as far as I am able to tell. Is there anyone around who could review this from the ipv6/iptables PoV? WRT the release, we are now frozen for 4.3 and I'd be concerned about introducing a subtle (or not so subtle) networking regression. George what do you think? I notice you use --physdev-out -- I got the impression that this wasn't supported any more (occasional bug reports about a warning message). TBH I don't know enough about what it does to say one way or the other. One minor niggle, you've spelt "explicitly" as "explicitely". > > Cheers, > > Sylvain > From c6561a403a2c8b1afaf5f336d2df95aceb362cbc Mon Sep 17 00:00:00 2001 > From: Sylvain Munaut <s.munaut@xxxxxxxxxxxxxxxxxxxx> > Date: Mon, 13 May 2013 15:52:14 +0200 > Subject: [PATCH] tools/hotplug/Linux: Add IPv6 support to vif-common filtering > > By default DomU are not allow to send router-advertisement > message. Set the ipv6_allow_ra config option to yet to allow it. > > Signed-off-by: Sylvain Munaut <s.munaut@xxxxxxxxxxxxxxxxxxxx> > --- > tools/hotplug/Linux/vif-common.sh | 103 > ++++++++++++++++++++++++++++++++++++-- > 1 file changed, 99 insertions(+), 4 deletions(-) > > diff --git a/tools/hotplug/Linux/vif-common.sh > b/tools/hotplug/Linux/vif-common.sh > index 73ee241..d5c51e7 100644 > --- a/tools/hotplug/Linux/vif-common.sh > +++ b/tools/hotplug/Linux/vif-common.sh > @@ -121,8 +121,11 @@ fi > ip=${ip:-} > ip=$(xenstore_read_default "$XENBUS_PATH/ip" "$ip") > > +ipv6_allow_ra=$(xenstore_read_default "$XENBUS_PATH/ipv6_allow_ra" "false") > + > frob_iptable() > { > + # Add or remove > if [ "$command" == "online" ] > then > local c="-I" > @@ -130,6 +133,7 @@ frob_iptable() > local c="-D" > fi > > + # Main rules > iptables "$c" FORWARD -m physdev --physdev-is-bridged --physdev-in "$dev" \ > "$@" -j ACCEPT 2>/dev/null && > iptables "$c" FORWARD -m physdev --physdev-is-bridged --physdev-out "$dev" > \ > @@ -139,6 +143,61 @@ frob_iptable() > then > log err "iptables setup failed. This may affect guest networking." > fi > + > + # Always allow the domain to talk to a DHCP server. > + if [ -n "$1" ] > + then > + iptables "$c" FORWARD -m physdev --physdev-is-bridged --physdev-in > "$dev" \ > + -p udp --sport 68 --dport 67 -j ACCEPT 2>/dev/null > + fi > + > + if [ "$command" == "online" -a $? -ne 0 ] > + then > + log err "iptables setup failed. This may affect guest networking." > + fi > +} > + > +frob_ip6table() > +{ > + # Add or remove > + if [ "$command" == "online" ] > + then > + local c="-I" > + else > + local c="-D" > + fi > + > + # Main rules > + ip6tables "$c" FORWARD -m physdev --physdev-is-bridged --physdev-in "$dev" > \ > + "$@" -j ACCEPT 2>/dev/null && > + ip6tables "$c" FORWARD -m physdev --physdev-is-bridged --physdev-out > "$dev" \ > + -j ACCEPT 2>/dev/null > + > + if [ "$command" == "online" -a $? -ne 0 ] > + then > + log err "ip6tables setup failed. This may affect guest networking." > + fi > + > + # Filter out RA if not explicitely allowed > + if [ "$ipv6_allow_ra" != "true" ] > + then > + ip6tables "$c" FORWARD -m physdev --physdev-is-bridged --physdev-in > "$dev" \ > + -p icmpv6 --icmpv6-type router-advertisement -j DROP 2>/dev/null > + fi > + > + if [ "$command" == "online" -a $? -ne 0 ] > + then > + log err "ip6tables setup failed. This may affect guest networking." > + fi > +} > + > + > +## > +# Check if the given IP is IPv6 or not > +# > +is_ipv6() > +{ > + echo "$1" | perl -wane '/:/ && print "yes"' > } > > > @@ -167,14 +226,17 @@ handle_iptable() > local addr > for addr in $ip > do > - frob_iptable -s "$addr" > + result=$(is_ipv6 "${addr}") > + if [ -z "${result}" ] ; then > + frob_iptable -s "$addr" > + else > + frob_ip6table -s "$addr" > + fi > done > - > - # Always allow the domain to talk to a DHCP server. > - frob_iptable -p udp --sport 68 --dport 67 > else > # No IP addresses have been specified, so allow anything. > frob_iptable > + frob_ip6table > fi > > release_lock "iptables" > @@ -213,3 +275,36 @@ dom0_ip() > fi > echo "$result" > } > + > + > +## > +# ip6_of interface > +# > +# Print the first IPv6 address currently in use at the given interface, or > nothing if > +# the interface is not up. > +# > +ip6_of() > +{ > + ip -6 addr show primary dev "$1" | perl -wane '/scope global/ && > /inet6 (([0-9a-f]+:*)+)/ && print $1;' > +} > + > + > +## > +# dom0_ip6 > +# > +# Print the IPv6 address of the interface in dom0 through which we are > routing. > +# This is the IP 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 > + "" > + else > + echo "$result" > + fi > +} > -- > 1.8.1.5 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |