Russia says Ukraine launched a drone attack on Moscow - days before the start of a ceasefire, ordered by Russian President Vladimir Putin to coincide with a World War Two parade.
Moscow's four major airports shut for a few hours on Tuesday amid the barrage, authorities said. There were no casualties and Ukraine has not commented.
Moscow is due to hold a parade on 9 May to mark the victory of the Soviet Union and allies over Nazi Germany. This year is the 80th anniversary of the end of WW2 and will see world leaders, including China's Xi Jinping, in Russia for the event.
Putin has called for a three-day ceasefire from 8 May - something Ukraine has not committed to. Kyiv wants a longer truce.
"Fire will be halted, but should the Kyiv regime fail to do the same and should it continue trying to strike our positions and facilities, then an appropriate response will be given immediately," Kremlin spokesman Dmitry Peskov said on Tuesday.
Ukraine's President Volodymyr Zelensky has dismissed Russia's ceasefire plans as a "theatrical play". Instead, he has been pushing for a ceasefire of at least 30 days where there would be a halt to missile and drone strikes on civilian targets.