diff --git a/patches/systemvm/debian/config/root/edithosts.sh b/patches/systemvm/debian/config/root/edithosts.sh index 1a7c59b11de..a54a76a8e17 100755 --- a/patches/systemvm/debian/config/root/edithosts.sh +++ b/patches/systemvm/debian/config/root/edithosts.sh @@ -93,17 +93,23 @@ echo "$ip $host" >> $HOSTS if [ "$dflt" != "" ] then - logger -t cloud "$0: setting default router to $dflt" #make sure dnsmasq looks into options file sed -i /dhcp-optsfile/d /etc/dnsmasq.conf echo "dhcp-optsfile=$DHCP_OPTS" >> /etc/dnsmasq.conf tag=$(echo $ip | tr '.' '_') sed -i /$tag/d $DHCP_OPTS - echo "$tag,3,$dflt" >> $DHCP_OPTS + if [ "$dflt" != "0.0.0.0" ] + then + logger -t cloud "$0: setting default router for $ip to $dflt" + echo "$tag,3,$dflt" >> $DHCP_OPTS + else + logger -t cloud "$0: unset default router for $ip" + echo "$tag,3," >> $DHCP_OPTS + fi if [ "$dns" != "" ] then - logger -t cloud "$0: setting dns server to $dns" + logger -t cloud "$0: setting dns server for $ip to $dns" echo "$tag,6,$dns" >> $DHCP_OPTS fi [ "$routes" != "" ] && echo "$tag,121,$routes" >> $DHCP_OPTS diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index f76c9f0dae7..7cc9d199ec7 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -167,6 +167,7 @@ import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.resource.ResourceManager; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; +import com.cloud.storage.GuestOSVO; import com.cloud.storage.StorageManager; import com.cloud.storage.VMTemplateVO; import com.cloud.storage.Volume.Type; @@ -2528,7 +2529,16 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian private void createDhcpEntryCommand(VirtualRouter router, UserVm vm, NicVO nic, Commands cmds) { DhcpEntryCommand dhcpCommand = new DhcpEntryCommand(nic.getMacAddress(), nic.getIp4Address(), vm.getHostName()); DataCenterVO dcVo = _dcDao.findById(router.getDataCenterIdToDeployIn()); - dhcpCommand.setDefaultRouter(findGatewayIp(vm.getId())); + String gatewayIp = findGatewayIp(vm.getId()); + if (!gatewayIp.equals(nic.getGateway())) { + GuestOSVO guestOS = _guestOSDao.findById(vm.getGuestOSId()); + // Don't set dhcp:router option for non-default nic on CentOS/RHEL, because they would set routing on wrong interface + // This is tricky, we may need to update this when we have more information on various OS's behavior + if (guestOS.getDisplayName().startsWith("CentOS") || guestOS.getDisplayName().startsWith("Red Hat Enterprise")) { + gatewayIp = "0.0.0.0"; + } + } + dhcpCommand.setDefaultRouter(gatewayIp); dhcpCommand.setDefaultDns(findDefaultDnsIp(vm.getId())); dhcpCommand.setAccessDetail(NetworkElementCommand.ROUTER_IP, getRouterControlIp(router.getId()));