On 08/21/2012 11:04 AM, Daniel P. Berrange wrote:
> On Tue, Aug 21, 2012 at 10:43:44AM -0400, Gene Czarcinski wrote:
>> RHBZ:
https://bugzilla.redhat.com/show_bug.cgi?id=849787
>>
>> As currently configured, dnsmasq for a virtual network will pass
>> some queries upstream toward the Internet. This includes AAAA and
>> MX queries as well a A queries when dnsmasq cannot answer for that
>> name. This is occurring whether a domain name is specified or not.
>> The problem is that dnsmasq will, by default, forward all queries
>> unless "local=" is specified. I cannot envision a situation where
>> such queries should be forwarded.
>>
>> See the bugzilla report for more info. While I did a lot of testing
>> to figure out the problem and what needed to be done to fix it, I am
>> unable to actually rebuild the libvirt rpm in my environment.
>>
>> The solution is the following patch:
>>
>> diff -uNr libvirt-0.9.11.4.orig/src/network/bridge_driver.c
>> libvirt-0.9.11.4/src/network/bridge_driver.c
>> --- libvirt-0.9.11.4.orig/src/network/bridge_driver.c 2012-06-15
>> 14:23:21.000000000 -0400
>> +++ libvirt-0.9.11.4/src/network/bridge_driver.c 2012-08-21
>> 09:03:17.387602485 -0400
>> @@ -491,7 +491,13 @@
>> virCommandAddArgList(cmd, "--strict-order",
>> "--bind-interfaces", NULL);
>>
>> if (network->def->domain)
>> - virCommandAddArgList(cmd, "--domain",
network->def->domain,
>> NULL);
>> +// virCommandAddArgList(cmd, "--domain",
>> network->def->domain, NULL);
>> + virCommandAddArgFormat(cmd,
>> + "--domain %s --local=/%s/",
>> + network->def->domain,
>> + network->def->domain);
>> + else
>> + virCommandAddArg(cmd, "--local=");
>>
>> if (pidfile)
>> virCommandAddArgPair(cmd, "--pid-file", pidfile);
>
> Since this changes the code that generates dnsmasq args, you'll
> also need to update the tests/networkxml2argvdata/ data files
> to take account of your new additions.
>
>
And here I thought it was just a tiny patch. When I get thinks
finalized, there will be an update to the tests also.
But, the patch itself is not good. For example, for no domain
specified, instead of "--local=", it should be "--local-//". And
then
with the domain specified, this just does not work for some reason
dnsmasq has errors starting.
I must say that I believe that whoever chose to use dnsmasq definitely
made the right choice. However, I wich it was easier to change and
test new parameter seetings for dnsmasq rather than having it in the
code.
So that I do not have to go through a lot of code changes, I am
testing with two virtual guests. The first has two NICs one connected
to the default network and a second to a private network with dnsmasq
(dns and dhcp) for the private network. The second guest is on the
private network and tests the various setups for dnsmasq.
My initial simplified test used the /etc/dnsmasq.conf and supplied
some additional parameters that I had not realized. My testing is not
attempting to create a situation similar to that for libvirtd which
has everything specified on the command-line.
Any comments, suggestions will be appreciated.
OK, I am going to need a little help here.
First, is there any documentation on things that need to be done in test
when changes are made? Right now there is a lot of stuff there and I am
not sure what needs to be added where.
Second, I have since the rpm will compile with my patch and goes through
enough of -bi --short-circuit to create
BUILDROOT/libvirt.../usr/sbin/libvirtd I am copying this over to a real
system and installing it replacing the original /usr/sbin/libvirtd
With my patch installed, when libvirtd attempts to start a network, it
errors out with something like the follow:
====================
internal error Child process (/sbin/dnsmasq --strict-order
--bind-interfaces --domain virt123 --local=/virt123/ --domain-needed
--filterwin2k --pid-file=/var/run/libvirt/network/net123.pid
--conf-file= --except-interface lo --listen-address 192.168.123.1
--dhcp-range 192.168.123.128,192.168.123.254
--dhcp-leasefile=/var/lib/libvirt/dnsmasq/net123.leases
--dhcp-lease-max=127 --dhcp-no-override --expand-hosts) status
unexpected: exit status 1
====================
About the only version that does not have a problem is replacing
"--domain virt123 --local=/virt123/ --domain-needed --filterwin2k" with
"--local="
OK, something is wrong.
However, is I "kill -9 <the running instance or dnsmasq>" and then, as
root, manually start dnsmasq with all of the above parameters, it runs
and works find on the virtual network!
Obviously, I am missing something! Can someone point me in the right
direction?
Gene