Almost 300 people were last night missing after a ferry capsized off South Korea, in what could be the country's biggest maritime disaster in more than 20 years.

The ferry was carrying 459 people, of whom 164 had been rescued, coastguard officials said. Most of the passengers are believed to have been teenagers on a high school trip .

It was not immediately clear why the Sewol ferry listed heavily on to its side and capsized in apparently calm conditions off South Korea's southwest coast, but some survivors spoke of what appeared to be an impact prior to the accident.

"It was fine. Then the ship went 'boom' and there was a noise of cargo falling," said Cha Eun-ok, who said she was on the deck of the ferry taking photographs at the time.

"The on-board announcement told people to stay put ... people who stayed are trapped," she said in Jindo, the nearest town to the scene of the accident.

Survivors there huddled on the floor of a gymnasium, wrapped in blankets and receiving medical aid. One woman lay on a bed shaking uncontrollably. A man across the room wailed loudly as he spoke on his mobile phone.

Furious relatives of the missing threw water at journalists trying to speak to survivors and at a local politician who had arrived at the makeshift clinic.

Most of the passengers on board the ferry appear to have been ­teenagers and their teachers from a high school in Seoul who were on a field trip to Jeju island, about 100 km (60 miles) south of the Korean peninsula.

An official from the Danwon High School in Ansan, a Seoul suburb, had earlier said all of its 338 students and teachers had been rescued. However, that could not be confirmed by the coastguard or other officials involved in the rescue.

The school official asked not to be identified.

The Ministry of Security and Public Administration earlier reported that 368 people had been rescued and about 100 were missing.

But it later described those figures as a miscalculation, turning what had at first appeared to be a largely successful rescue operation into potentially a major disaster.

There was also confusion about the total number of passengers on board, as authorities revised the figure down from 477, saying some had been double counted. It added to growing frustration and anger among families of the passengers.

Witnesses said many people were likely to be trapped in the vessel.

According to a coastguard official in Jindo, the waters where the ferry capsized have some of the strongest tides of any off South Korea's coast, meaning divers were prevented from entering the mostly submerged ship for several hours.

The ferry began to list badly about 20 km (12 miles) off the southwest coast as it headed for Jeju.

A member of the crew of a local government ship involved in the rescue, who said he had spoken to members of the sunken ferry's crew, said the area was free of reefs or rocks and the cause was likely to be some sort of malfunction on the vessel.

There were reports of the ferry having veered off its course, but coordinates of the site of the accident provided by port authorities indicated it was not far off the regular shipping lane.

Several survivors spoke of ­hearing a "loud impact" before the ship started listing and rolling on its side.

Within a couple of hours, the Sewol was lying on its port side. Soon after, it had completely turned over, with only the forward part of its white and blue hull showing above the water.

Coastguard vessels and fishing boats scrambled to the rescue, with television footage showing rescuers pulling passengers in life vests out of the water as their boats bobbed beside the ferry's hull.

Other passengers were winched to safety by helicopters.

The ferry left from the port of Incheon, about 30 km (20 miles) west of Seoul, late on Tuesday.