[libvirt] RFC: automatic setting of ip_forwarding (or not)

Laine Stump laine at laine.org
Mon Oct 4 18:13:43 UTC 2010


  On 10/01/2010 04:44 PM, Zdenek Styblik wrote:
> Uh huh, hi?
>
> On 10/01/2010 08:46 PM, Laine Stump wrote:
> [...]
>> to /etc/sysctl.conf and calling "sysctl -a -p". This gives us the same
>> behavior as currently, but with the advantages that a) our change to the
>> config is documented in /etc/sysctl.conf and b) virtual networked guests
>> won't suddenly have their network fail when some other process runs
>> "sysconfig -a -p".
>>
> You've got me a bit confused here, because what exactly is supposed #
> sysctl -a -p; do? I mean, what kind of magic?

Sorry about that - remove the "-a" from that command.

No magic. As the manpage says, "sysctl -p"  reads the provided file (or 
/etc/sysctl.conf if no file is provided) and sets all the kernel 
parameters listed there to the values given. As you know, 
/etc/sysctl.conf is used, at least on RHEL and Fedora, to "permanently" 
set kernel parameter values to something other than the defaults 
hardcoded into the kernel and loadable kernel modules. (actually they 
can be modified to something else either by individually setting them 
with sysctl -w or by writing directly to the /proc entry, but this will 
be overridden the next time "sysctl -p" is run).


On both RHEL and Fedora, both the network and NetworkManager services 
(and others, eg see the bug reports a bit further down in this reply) 
run sysctl with -p to reload all non-kernel-default settings when they 
are started, and Fedora puts "net.ipv4.ip_forward=0" into 
/etc/sysctl.conf at install time. So at boot time, both of those 
services run "sysctl -p" which sets ip_forward to 0, then libvirtd 
starts, which sets it to 1. At this point, libvirt virtual networks are 
running (as expected), but also there may be some other unwanted routing 
going on (which the admin won't expect). If the network or 
NetworkManager service is later manually restarted (or some other 
parameter is added to sysctl.conf and it's reloaded with "sysctl -p" as 
many HOWTO documents suggest when changing a kernel parameter), 
libvirt's virtual networks suddenly/unexpectedly stop working.


> I've tried this and if I turn on net.ipv4.ip_forward to '1' and run #
> sysctl -a -p; it stays on, unless defined as 0 in /etc/sysctl.conf (and
> sysctl run only with -p, not -a AND -p).

Right, my mistake.


>   And if it's defined as 0 there,
> then there must be reason for being so.


Exactly one of my points. libvirt really wants (no, *needs*) this to be 
on for virtual networks, but it's very likely there was a reason for it 
being turned off, so the admin should at the very least be alerted that 
it's being turned on, or the fact that it's off should be logged in some 
way to assure it gets the admin's attention so they can make the proper 
judgement call.


> Also, why on Earth would you
> have every sysctl parameter in /etc/sysctl.conf unless you're not happy
> with default ones?


Nobody is talking about putting any value there other than 
net.ipv4.ip_forward (which, on RHEL and Fedora is already put there by 
the installer), and that only to assure that it's set to the value that 
libvirtd needs for its virtual networks to work properly. (Possibly my 
erroneous addition of "-a" threw you off there).


> Imho this file is for fine tuning, thus ~ include
> things what I don't like or want changed, but not every possible kernel
> option which I might or might not want to change. Because then there is
> no surprise for such odd behavior.
>
> Also, the outlined problem here sounds more like "left hand doesn't know
> what's doing right hand" or I just didn't get your point.


Again you are correct. currently libvirt is turning it on without 
documenting that fact in the (as far as I know) standard accepted place 
of doing so - /etc/sysctl.conf.


> I'm also
> missing the previous discussion about the problem, if there was any. I
> mean, your e-mail comes out of the blue sky without any previous reference.

Two Active bug reports that I'm aware of offhand (one for RHEL and one 
for Fedora):

   https://bugzilla.redhat.com/show_bug.cgi?id=612865
   https://bugzilla.redhat.com/show_bug.cgi?id=612867

There are also related bugs for older Fedora releases:

   https://bugzilla.redhat.com/show_bug.cgi?id=240922
   https://bugzilla.redhat.com/show_bug.cgi?id=426792
   https://bugzilla.redhat.com/show_bug.cgi?id=467687
   https://bugzilla.redhat.com/show_bug.cgi?id=514228

The first two prompted a short discussion on an internal Red Hat call, 
first a brief mention of it a month or two ago, and again in a similar 
call last week, where the main point of the conversation was "1) this is 
a problem, 2) we should fix it, 3) here's a list of some ideas, 4) we 
need to post these ideas on libvir-list to start a conversation in the 
libvirt community about the best course of action."

I'm not sure how else we could have proceeded that would have made it 
less of a surprise to you. (Of course now that I've hopefully better 
articulated myself, you may be less surprised :-)


> I hope this doesn't sound too much jerk-ish, but I kinda don't like too
> much what I'm reading here.


You may be reading more into this than is there - the discussion is 
newly started, no code has even been written yet (much less patches 
posted, or pushed), and none of the proposed changes are as sweeping as 
you may think.

It sounds like we agree on at least a couple of important points: 1) 
"the left hand should know what the right hand is doing" and 2) if 
ip_forward is set to 0, that was likely done for a reason, so we 
shouldn't silently modify it. it. Beyond that, is a point that is really 
just a fact, not an opinion: 3) libvirt's virtual networks won't work 
unless ip_forward is turned on. The current code is only compatible with 
1 of those 3; we need to agree on a method to satisfy all of them. Are 
you voting for my proposal (1) in the original mail? (do nothing), or do 
you have another idea?




More information about the libvir-list mailing list