People carrying Russian and Ukrainian flags chanted “No to war!” and “Stop lying!” Similar rallies took place in Sankt Petersburg and other Russian cities.
Ukraine accuses Russia of arming rebels in the east and sending Russian troops across the border. Moscow denies this.
More than 3,000 people have died in fighting since April.
A truce was agreed on September 5 but there have been repeated violations since then.
The fighting began after Russia annexed Ukraine’s southern Crimea peninsula in March – a move condemned by Ukraine and the West.
The demonstrators marched from Pushkin Square to Sakharov Avenue in central Moscow.
Organizers had hoped up to 50,000 people would take part to denounce what they described as Russia’s “aggressive foreign policy”.
Moscow police said there were about 5,000 protesters but a reporter for the AP news agency estimated that the crowd was at least 20,000-strong.
Police stepped up security in the capital and there were only minor scuffles reported between rival demonstrators.
It is Russia’s first major anti-war rally since the fighting began five months ago in Ukraine’s eastern Donetsk and Luhansk regions.
A number of supporters of the pro-Russia separatists in Ukraine held their own rally in Moscow.
In Ukraine, fighting was reported to be continuing on Sunday close to the city of Donetsk despite an agreement on September 19 to set up a 19 miles buffer zone as part of the Minsk memorandum.
The government in Kiev said its military forces would not pull back until pro-Russian forces stop firing and Russian troops leave. Russia denies that its forces are involved.
Ukrainian military spokesman Andriy Lysenko said violations of the ceasefire continued, telling reporters: “In the last 24 hours we have lost two Ukrainian soldiers, eight have been wounded.”
On September 20, General Philip Breedlove, NATO’s supreme commander in Europe, said the cease-fire existed “in name only”.
Gen. Philip Breedlove said the numbers of artillery rounds fired recently was comparable to periods before the truce came into effect two weeks ago.
2vb-_X_jbosThe US House Ethics Committee has voted to release its report on former Republican Representative…
ABC News has agreed to pay $15 million to President-elect Donald Trump to settle a…
South Korea’s parliament has voted to impeach President Yoon Suk Yeol over his failed attempt…
Israeli war planes have carried out more than 100 air strikes in Syria on December…
President-elect Donald Trump has threatened to impose 100% tariffs on the BRICS countries if they…
Syrian troops have withdrawn from the city of Aleppo following an offensive by rebels opposed…