[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 4/5] hotplug/linux: Add IPv6 support to the iptables logic
On Tue, 2014-05-20 at 13:58 +0200, Sylvain Munaut wrote: > Hi, > > > >> This adds the same functions for ip6tables as the one for iptables. > >> The 'ip' variable can now contain ipv6s for the domain and add > >> appropriate rules > >> > >> - If the 'ip' var is empty then both full IPv4 and IPv6 are allowed. > >> - If only IPv4 ips are present, then IPv6 will be completely disallowed. > >> - If only IPv6 ips are present, then IPv4 will be completely disallowed. > >> - You can use ::0/0 or 0.0.0.0/0 to allow v6 or v4 globally but filter > >> the other one. > > > > Sounds sensible. Can you give examples of the rulesets create in each > > case? > > Yes, see below. Thanks. Like with the v4 ones could you also include these in the commit log. > > I also added the eui64 idea from jacek: > - The ICMP Link Local messages are locked to the LL address derived > from the mac address > - The 'ip' parameters also allow the special 'eui64' token to allow > any address with the lower 64 bits set to the EUI64 corresponding to > the MAC. (Filtering on the network part is not done and must be done > globally by the user if needed, or just manually specify the address > completely). > > > * ip="" > > iptables: > ACCEPT all 0.0.0.0/0 0.0.0.0/0 PHYSDEV match --physdev-out > vif91.0 --physdev-is-bridged > ACCEPT all 0.0.0.0/0 0.0.0.0/0 PHYSDEV match --physdev-in > vif91.0 --physdev-is-bridged > ip6tables: > DROP udp ::/0 ::/0 PHYSDEV match --physdev-in vif91.0 > --physdev-is-bridged udp spt:547 dpt:546 So here we deny DHCP whereas for v4 we don't? Why is that? And in other cases for v4 we explicitly allow it? I see you called this out in the commit message, but I must confess I don't know v6 well enough to guess why. Is allowing a guest to send DHCP responses more dangerous for v6 than with v4? > DROP icmpv6 ::/0 ::/0 PHYSDEV match --physdev-in vif91.0 > --physdev-is-bridged ipv6-icmptype 134 > ACCEPT all ::/0 ::/0 PHYSDEV match --physdev-out vif91.0 > --physdev-is-bridged > ACCEPT all ::/0 ::/0 PHYSDEV match --physdev-in vif91.0 > --physdev-is-bridged > > > * ip="192.168.0.254" > > iptables: > ACCEPT udp 0.0.0.0/0 0.0.0.0/0 PHYSDEV match --physdev-in > vif92.0 --physdev-is-bridged udp spt:68 dpt:67 > ACCEPT all 0.0.0.0/0 0.0.0.0/0 PHYSDEV match --physdev-out > vif92.0 --physdev-is-bridged > ACCEPT all 192.168.0.254 0.0.0.0/0 PHYSDEV match --physdev-in > vif92.0 --physdev-is-bridged > > ip6tables: > [nothing] > > > * ip="2001:aaaa:bbbb:cccc::1 eui64" > > iptables: > [nothing] > > ip6tables: > DROP udp ::/0 ::/0 > PHYSDEV match --physdev-in vif94.0 --physdev-is-bridged udp spt:547 > dpt:546 > DROP icmpv6 ::/0 ::/0 > PHYSDEV match --physdev-in vif94.0 --physdev-is-bridged ipv6-icmptype > 134 > ACCEPT udp ::/0 ::/0 > PHYSDEV match --physdev-in vif94.0 --physdev-is-bridged udp spt:546 > dpt:547 > ACCEPT all fe80::216:3eff:fed0:da2d/128 ::/0 > PHYSDEV match --physdev-in vif94.0 --physdev-is-bridged > ACCEPT all ::/0 ::/0 > PHYSDEV match --physdev-out vif94.0 --physdev-is-bridged > ACCEPT all 2001:aaaa:bbbb:cccc::1/128 ::/0 > PHYSDEV match --physdev-in vif94.0 --physdev-is-bridged > ACCEPT all ::216:3eff:fed0:da2d/::ffff:ffff:ffff:ffff ::/0 > PHYSDEV mat 216:3eff:fed0:da2d here is related to the mac address and therefore to the eui64 option? BTW, please can you update docs/misc/xl-network-configuration.markdown to reflect the ipv6 behaviour. > ch --physdev-in vif94.0 --physdev-is-bridged > > > * ip="192.168.0.254 2001:aaaa:bbbb:cccc::1" (either ipv4 or ipv6 can > be replaced by the 0.0.0.0/0 or ::0/0 address to allow any, the > dhcp/nd rules might be redudant then). > > iptables: > ACCEPT udp 0.0.0.0/0 0.0.0.0/0 PHYSDEV match --physdev-in > vif95.0 --physdev-is-bridged udp spt:68 dpt:67 > ACCEPT all 0.0.0.0/0 0.0.0.0/0 PHYSDEV match --physdev-out > vif95.0 --physdev-is-bridged > ACCEPT all 192.168.0.254 0.0.0.0/0 PHYSDEV match --physdev-in > vif95.0 --physdev-is-bridged > > ip6tables: > DROP udp ::/0 ::/0 PHYSDEV match > --physdev-in vif95.0 --physdev-is-bridged udp spt:547 dpt:546 > DROP icmpv6 ::/0 ::/0 PHYSDEV match > --physdev-in vif95.0 --physdev-is-bridged ipv6-icmptype 134 > ACCEPT udp ::/0 ::/0 PHYSDEV match > --physdev-in vif95.0 --physdev-is-bridged udp spt:546 dpt:547 > ACCEPT all fe80::216:3eff:fed0:da2d/128 ::/0 PHYSDEV match > --physdev-in vif95.0 --physdev-is-bridged > ACCEPT all ::/0 ::/0 PHYSDEV match > --physdev-out vif95.0 --physdev-is-bridged > > > > > >> By default, domains aren't allows to send Router Advertisement > >> or DHCP responses, see the ipv6_allow_ra to enable them. > > > > How does one go about setting this? > > Well ... I thought it would work just like accel= (which I'm using > in prod but that's with 'xm' on 4.1). > Turns out after a bit of googling that 'accel' might work just by luck > because somehow at some point passing that option was added to 'xm' in > 2007 ... > > I just retried now with 'xl' under 4.4 and indeed that doesn't work :( > > So if I want to pass custom parameters to the vif-script, I have to > add it to libxl ? At the moment, yes. > And if yes, is that acceptable ? What would be the best way : add each > parameter independently, or add a single 'hotplug_extra' parameter > that would need to be parsed in the hotplug scripts themselves ? TBH I'm not sure. I'll reply separately retitling this to be more obvious and ccing a few folks. > (I'll wait until I fixed this before reposting obviously) I think if you note it in the commit message that it is pending a resolution to this then it would be reasonable to repost. I *think* that the implementation of consuming these options from xenstored should be largely orthogonal to the mechanism of how they get there. BTW, as a hack/workaround for testing you could create vif-sylvain which hacks things into the right places and then execs the real script. > > >> +## > >> +# Check if the given IP is IPv6 or not > >> +# > >> +is_ipv6() > >> +{ > >> + echo "$1" | perl -wane '/:/ && print "yes"' > > > > Annoyingly I don't think we currently require Perl in the runtime > > environment (it is used at build time). Luckily I think you can > > implement this as > > case $addr in > > *:*) ipv6_addrs="$addrs $ipv6_addrs";; > > *) ipv4.... ;; > > esac > > > > (probably inline in the handle_iptable function, no need for this helper > > in that case) > > > I fixed that using only 'awk'. I left it as a helper because it's used > in vif-route as well later and I find it nicer to have the test in a > single place. Ack, thanks. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |