[libvirt] [PATCH] network driver: don't send default route to clients on isolated networks
Daniel P. Berrange
berrange at redhat.com
Mon Mar 14 10:30:12 UTC 2011
On Sun, Mar 13, 2011 at 11:08:20AM -0400, Laine Stump wrote:
> Normally dnsmasq will send a default route (the address of the host in
> the network definition) to any client requesting an address via
> DHCP. On an isolated network this makes no sense, as we have iptables
> to prevent any traffic going out via that interface, so anything sent
> that way would be dropped anyway.
>
> This extra/unusable default route becomes problematic if you have
> setup a guest with multiple network interfaces, with one connected to
> an isolated network and another that provides connectivity to the
> outside (example - one interface directly connecting to a physical
> interface via macvtap, with a second connected to an isolated network
> so that the host and guest can communicate (macvtap doesn't support
> guest<->host communication without an external switch that supports
> vepa, or reflecting all traffic back)). In this case, if the guest
> chooses the default route of the isolated network, the guest will not
> be able to get network traffic beyond the host.
>
> To prevent dnsmasq from sending a default route, you can tell it to
> send 0 bytes of data for the default route option (option number 3)
> with --dhcp-option=3 (normally the data to send for the option would
> follow the option number; no extra data means "don't send this option").
>
> I have checked on RHEL5 (a good representative of the oldest supported
> libvirt platforms) and its version of dnsmasq (2.45) does support
> --dhcp-option, so this shouldn't create any compatibility problems.
> ---
> src/network/bridge_driver.c | 7 +++++++
> 1 files changed, 7 insertions(+), 0 deletions(-)
>
> diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
> index ca2ae8d..6a02df1 100644
> --- a/src/network/bridge_driver.c
> +++ b/src/network/bridge_driver.c
> @@ -490,6 +490,13 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
> "--except-interface", "lo",
> NULL);
>
> + /* If this is an isolated network, set the default route option
> + * (3) to be empty to avoid setting a default route that's
> + * guaranteed to not work.
> + */
> + if (network->def->forwardType == VIR_NETWORK_FORWARD_NONE)
> + virCommandAddArg(cmd, "--dhcp-option=3");
> +
> /*
> * --interface does not actually work with dnsmasq < 2.47,
> * due to DAD for ipv6 addresses on the interface.
> --
ACK
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list