Malaysia to Indonesia by Ferry: Routes, Operators & Travel Guide (2026)

✅ Last verified on-the-ground: 2026-07-22

Yes, you can take a ferry from Malaysia to Indonesia. Daily passenger ferries connect Johor Bahru, Kuala Lumpur (via Port Klang), and Penang to Indonesian ports across the Strait of Malacca, with Johor Bahru to Batam being the most-used route by Indian backpackers heading onward to Singapore, Bintan, or mainland Sumatra. Tickets cost roughly ₹2,120-₹6,126 (~90-260 MYR or ~$22.01-$63.59) one-way depending on origin and destination, crossing times range from 70 minutes to 5 hours, and you do not need a visa in advance for most short tourist stays under 30 days. For related planning, see our guides on Sea Backpacking Hub and Koh Lipe Temple Etiquette a Respectful Visitor S Guide.

This guide covers every active ferry route between Malaysia and Indonesia, which operators run them, ticket prices, booking steps, Indonesian visa rules for Indian passport holders, and the overland alternative for the parts of Borneo where the two countries share a land border. You may also find Ngapali Temple Etiquette Guide How to Respect Local Customs At Pagodas Near the Beach useful for this trip.


Quick Answers

WhatAnswerPrice (INR)
Can you take a ferry from Malaysia to Indonesia?Yes, multiple daily routes,
Main route used by IndiansJohor Bahru (Stulang Laut) to Batam (Harbour Bay),
Cheapest one-way ticket~₹2,120 (~90 MYR or ~$22.01),
Most expensive one-way ticket~₹6,126 (~260 MYR or ~$63.59),
Fastest crossing70 minutes (Penang to Belawan fast boat, when running),
Slowest scheduled crossing~10 hours (Port Klang to Tanjung Priok overnight ferry),
Number of operators4 main operators (Mahakam, Sindo, Pacific, Pelni),
Visa for Indians on arrivalFree for 30 days if entering at Batam, Bintan, or Pekanbaru (VOA scheme); other ports also offer free 30-day entry for tourism,
Booking website12go.asia and operator-direct websites,
Current FX rate1 MYR ≈ ₹23.59 at time of writing,

Step-by-Step: How to Take a Ferry from Malaysia to Indonesia

Step 1: Choose your route first, then book the ferry

The single biggest mistake Indian travellers make is booking the ferry before deciding which Indonesian port they need. The Strait of Malacca routes serve different Indonesian regions entirely, and a wrong choice means a 12-hour overland detour on the Sumatra side. Work backwards from your next destination. See also: Southeast Asia Trip Budget Breakdown By City How Much a Backpacker Actually Spends in.

For Batam (gateway to Singapore and Bintan): Johor Bahru to Harbour Bay or Batam Centre. For Dumai (gateway to Pekanbaru and Bukit Lawang): Johor Bahru to Dumai (Tanjung Kapal). For Tanjung Pinang (gateway to Bintan and the Riau Islands): Johor Bahru to Tanjung Pinang (Sri Bintan Pura). For Belawan (gateway to Medan and Lake Toba): Penang to Belawan (when the route is operational). For Jakarta: Port Klang to Tanjung Priok (overnight ferry). For related planning, see our guide on Southeast Asia Festival Calendar 2026 Month By Month Guide for Backpackers.

Subodh’s Pro Tip: If your end goal is Singapore and you’ve heard that going via Batam is cheaper than flying direct, the ferry from Johor Bahru to Harbour Bay followed by a 30-minute Singapore-bound ferry from Batam Centre to HarbourFront is genuinely the cheapest Singapore entry from Malaysia. Total cost lands around ₹2,592-₹3,063 (~110-130 MYR or ~$26.90-$31.79) vs. Direct Singapore flights from KL at ₹5,890 (~250 MYR or ~$61.14)+. The catch is it eats 5 to 7 hours including transfers.

Step 2: Check the visa rule for your specific Indonesian entry port

Indonesia runs two parallel systems for Indian passport holders, and the ferry routes touch both.

Free 30-day entry (no visa, no payment): All major ferry entry points (Batam, Bintan, Tanjung Pinang, Dumai, Belawan, Tanjung Priok) now allow Indian tourists 30 days free entry. As of 2024, Indonesia dropped the visa-on-arrival fee for a long list of nationalities including Indians at most ports, but the ferry ports in particular have been rock-solid for free 30-day entry for years. Confirm on the official Indonesian immigration site before you fly.

e-VOA or e-CD (paid, longer stay): If you want 60 days or need multiple entries, apply for the e-VOA on the official site before departure. It costs around USD 35 (~₹3,378 at 1 USD = ₹96.53).

For ferry travellers, the free 30-day entry is what you’ll use. Carry your passport, a printed return ticket (immigration occasionally asks), and proof of onward accommodation for at least the first night.

Safety Alert: Carry printed proof of your return ticket or onward bus/flight out of Indonesia. Indonesian immigration at the smaller ferry ports (especially Dumai) sometimes asks for it, and mobile data roaming on day one can be flaky if you haven’t sorted a SIM yet.

Step 3: Book your ticket on 12go or directly with the operator

For most routes, 12go.asia is the easiest aggregator. Their path-format URLs work cleanly: https://12go.asia/en/travel/origin/destination.?z=16187692 Use these for the active ferry routes.

Johor Bahru to Batam: https://12go.asia/en/travel/johor-bahru/batam?z=16187692 Johor Bahru to Tanjung Pinang: https://12go.asia/en/travel/johor-bahru/tanjung-pinang?z=16187692 Port Klang to Tanjung Priok (Jakarta): https://12go.asia/en/travel/port-klang/jakarta?z=16187692

For the Dumai and Belawan routes, operator-direct bookings via WhatsApp are more reliable because 12go coverage on those legs is inconsistent.

Mahakam Utama: Johor Bahru to Dumai (the main Sumatra ferry operator, twice daily). Sindo Ferry: Johor Bahru to Batam and Johor Bahru to Tanjung Pinang (4 to 6 sailings daily between them). Pacific Ferry: Johor Bahru to Batam and onward connections to Bintan. Pelni (Pelayaran Nasional Indonesia): The big Indonesian state ferry line running Port Klang to Jakarta and the longer Belawan crossings.

Tickets purchased online usually cost ₹236-₹471 (~10-20 MYR or ~$2.45-$4.89) more than buying at the counter, but online guarantees a seat on high-demand weekends (Batam ferry fills up on Saturdays and during Singapore school holidays).

Step 4: Arrive at the terminal 90 minutes before departure

Each Malaysian ferry terminal has its own rhythm.

Stulang Laut Terminal (Johor Bahru to Batam/Tanjung Pinang/Dumai): Located 10 minutes by Grab from JB Sentral. Immigration is on the Malaysian side only; you clear Indonesian immigration on arrival. Budget 60 minutes for the Malaysian exit stamp queue on weekday mornings.

Swettenham Pier (Penang to Belawan): Historic George Town terminal. Only operational when the Penang-Belawan fast boat is running, which is seasonal. Check the operator’s Facebook page the week of travel.

Port Klang Ferry Terminal (to Tanjung Priok/Jakarta): About 1 hour from KL by direct ETS train to Klang station then a 10-minute Grab. The terminal itself is functional but ageing; bring snacks for the long crossing.

Subodh’s Pro Tip: Malaysian immigration at Stulang Laut often takes longer than the ferry ride itself on weekends. Budget 90 minutes at the terminal even though the ferry is only 90 minutes across. Travellers who arrive 45 minutes before departure regularly miss their boat.

Step 5: Get your Indonesian SIM before the ferry or on arrival

Indonesian SIM cards are sold at Batam Centre and Tanjung Pinang terminals (Telkomsel, XL Axiata, Indosat), but prices run higher than at the airport. A Telkomsel tourist SIM with 25 GB for 30 days goes for around ₹538 (~100,000 IDR or ~$5.58) at the Batam ferry terminal.

If you want data the moment you step off the boat, an eSIM works before you even leave Malaysian waters. Get Nomad eSIM gives you Indonesian data from activation, with 30-day plans starting around ₹771 (~8 USD). Avoid relying on Malaysian Celcom/Digi roaming; it bills you at satellite rates the moment you hit international waters.

Step 6: Disembark and clear Indonesian immigration

Indonesian immigration at the ferry ports is fast compared to airports. Most ports process 200 to 400 passengers per arrival, and a Western tourist with a printed return ticket gets through in 10-15 minutes.

Two quirks to know:

  1. Batam Centre terminal is a combined ferry, mall, immigration, and transport hub. After immigration, you walk straight into Batam Centre Mall, which is the easiest place in the Riau Islands to grab an Indonesian SIM and an ATM withdrawal.
  2. Dumai terminal has limited ATM availability and no currency exchange on the Indonesian side. Withdraw IDR at the Malaysian Stulang Laut terminal before you board if Dumai is your destination.

Advertisement

Active Ferry Routes from Malaysia to Indonesia (2026)

Johor Bahru to Batam

The headline route. Harbour Bay terminal (western Batam, closer to the Singapore ferry connection) and Batam Centre terminal (main hub) both receive multiple daily ferries.

Crossing time: 70 to 90 minutes depending on the terminal. Operators: Sindo Ferry, Pacific Ferry, Majestic Fast Ferry. Frequency: 6 to 10 sailings daily between all terminals. Price: ₹2,592-₹3,299 (~110-140 MYR or ~$26.90-$34.24) one-way economy.

The fastest operator runs a 70-minute crossing with no stops; slower boats make a brief pause at Tanjung Pinang and stretch to 90 minutes.

Johor Bahru to Tanjung Pinang

Serves Bintan and the broader Riau Islands directly. Sindo and Indomal Express run this route.

Crossing time: 90 to 110 minutes. Price: ₹2,592-₹3,063 (~110-130 MYR or ~$26.90-$31.79) one-way.

Less congested than the Batam route. If you’re heading to Bintan resorts (Lagoi, Trikora) and don’t need Singapore access, this is the cleaner entry.

Johor Bahru to Dumai

The Sumatra mainland route. Dumai is the jumping-off point for buses to Pekanbaru and onward to Bukit Lawang (orangutan treks) and Lake Toba.

Crossing time: 2 hours 30 minutes. Operators: Mahakam Utama (twice daily, morning and afternoon). Price: ₹2,356-₹2,827 (~100-120 MYR or ~$24.46-$29.35) one-way economy.

Mahakam is the only reliable operator. Their office is on the second floor of the Johor Bahru terminal; booking via WhatsApp 2-3 days ahead is the standard local practice.

Port Klang to Tanjung Priok (Jakarta)

The long-haul option. Pelni runs an overnight ferry from Port Klang directly to Jakarta’s main port.

Crossing time: 10 hours overnight, departing around 6 PM. Price: ₹4,241-₹6,126 (~180-260 MYR or ~$44.02-$63.59) depending on cabin class (economy bunk, air-conditioned cabin, VIP cabin).

Useful if you want to skip a Jakarta flight entirely and don’t mind a slow crossing. Pelni ferries are functional, not luxurious. Bring your own food, water, and a sleep sheet.

Penang to Belawan (seasonal)

The route into North Sumatra. Was previously operated by a fast boat service that ran Penang’s Swettenham Pier to Belawan near Medan.

Crossing time: 4 to 5 hours when running. Price: ₹4,241-₹5,183 (~180-220 MYR or ~$44.02-$53.80) one-way.

Status note: this route has had irregular operation since 2023, with cancellations tied to Indonesian port authority scheduling. Before booking flights to Penang specifically for this crossing, message the operator’s local Penang office to confirm a sailing date. Travellers report sailing dates being posted 2-3 weeks in advance only.


Common Mistakes Indians Make

1. Booking a ferry to “Batam” without specifying which terminal.

“Johor Bahru to Batam” can mean Harbour Bay (western, near Singapore ferry) or Batam Centre (main hub). They are 30 minutes apart by Indonesian taxi, and wrong-terminal transfers cost you time and ₹807 (~150,000 IDR or ~$8.38) in cab fare. Confirm the terminal when booking.

2. Assuming the Dumai ferry runs at fixed daily times.

Mahakam Utama publishes a schedule but cancels sailings on rough-sea days during the November-January monsoon. Travellers report showing up at the Johor Bahru terminal with pre-paid tickets to find the morning sailing cancelled and the next one at 4 PM. Always call the operator’s hotline the morning of departure.

3. Not carrying enough IDR cash for Dumai and Belawan terminals.

ATMs at Dumai and Belawan are inconsistent. Some travellers report ATMs being out of cash for days at the Dumai terminal in particular. Withdraw ₹2,690-₹5,380 (~500,000-1,000,000 IDR or ~$27.92-$55.84) at the Malaysian side before boarding if your destination is either of these ports.

4. Forgetting the return ticket requirement.

Indonesian immigration at smaller ferry ports occasionally asks for proof of onward travel. A printed return flight ticket or a screenshot of your next bus booking satisfies this. Mobile-only confirmations on a locked phone don’t always work.

5. Showing up at the wrong Malaysian terminal.

Johor Bahru has two ferry terminals: Stulang Laut (for Indonesia) and Tanjung Belungkor (for Singapore). They are 20 minutes apart. The Stulang Laut terminal is the one for all Indonesia-bound ferries.


What Most Guides Don’t Tell You

1. The Malaysian exit stamp and the Indonesian entry stamp are at different terminals.

For Johor Bahru to Batam, you clear Malaysian immigration at Stulang Laut, board the ferry, and clear Indonesian immigration at the Batam terminal. There’s no Malaysian check on arrival in Batam. This sounds obvious, but Indian travellers used to the long immigration queues at Indian airports sometimes panic when the Batam side processes them in 10 minutes, thinking they were skipped. You weren’t.

2. Singapore is reachable via Batam but not via direct Malaysia-Indonesia-Singapore ferry.

There is no single ferry from Malaysia to Singapore via Indonesia. The standard route is: Malaysia ferry to Batam, then a separate ferry from Batam Centre to Singapore HarbourFront. These are two different bookings, two different operators (Sindo then BatamFast or Horizon), and you do an Indonesian exit stamp and Singapore entry stamp in between. Allow 3 hours total for the transfer.

3. Overland from Malaysian Borneo to Indonesian Borneo is technically possible but practically pointless.

The two countries share a land border on Borneo (Sarawak-Kalimantan, at the Entikong-Tebedu crossing). You can cross overland, but the crossing is remote, transport onward is slow, and most Indian travellers skip it in favour of the Malaysian Borneo to Indonesian Borneo flight (Kuching to Pontianak, ~45 minutes, cheap on AirAsia). The ferry routes covered in this article are for Peninsular Malaysia to Sumatra and the Riau Islands only.

4. Ferry ticket prices surge during Singapore and Malaysia school holidays.

Batam and Bintan ferries fill up and double in price during Singapore’s March, June, September, and December school breaks. Travellers report one-way tickets hitting ₹4,712 (~200 MYR or ~$48.91) instead of the usual ₹2,592 (~110 MYR or ~$26.90) during these windows. Book 1-2 weeks ahead for holiday periods.

5. The Port Klang-Jakarta ferry doesn’t run on Mondays.

Pelni’s schedule skips Mondays as a maintenance day. Travellers who fly into KL specifically for the ferry and arrive on a Monday lose a full day waiting for Tuesday’s departure.


Advertisement

FAQ

Can I take a ferry from Malaysia to Indonesia without a visa?

Yes. Indian passport holders get a free 30-day tourist entry at all major ferry ports (Batam, Bintan, Dumai, Belawan, Tanjung Priok). You don’t need to apply in advance, pay a fee, or arrange anything before boarding. Just bring your passport with at least 6 months validity.

Is there a ferry from Johor Bahru to Singapore via Indonesia?

Not as a single booking, but you can do it as two ferries: Johor Bahru to Batam (Sindo/Pacific, 90 minutes), then Batam Centre to Singapore HarbourFront (BatamFast/Horizon, 45 minutes). Total around 3 hours and ₹2,592-₹3,299 (~110-140 MYR or ~$26.90-$34.24) combined, cheaper than direct Singapore options from KL.

How long does the ferry from Malaysia to Batam take?

70 to 90 minutes depending on the operator and whether the boat stops at Tanjung Pinang en route. Fastest non-stop service runs the route in 70 minutes.

Which operator is cheapest for Johor Bahru to Batam?

Sindo Ferry’s economy class consistently runs ₹118-₹236 (~5-10 MYR or ~$1.22-$2.45) below Pacific and Majestic. Book directly on their website or WhatsApp their JB office.

Can I bring luggage on the Malaysia-Indonesia ferry?

Yes. Ferries allow 20 to 30 kg of checked luggage per passenger depending on the operator. Backpackers with full-size 60-65L packs are well under the limit. There is no extra charge for luggage on the standard routes.

What is the cheapest way to get from Malaysia to Indonesia by sea?

Johor Bahru to Dumai on Mahakam Utama at around ₹2,356 (~100 MYR or ~$24.46) off-peak. The crossing is 2.5 hours and lands you on the Sumatra mainland, useful for the Bukit Lawang orangutan treks and onward overland Sumatra travel.

Do I need to print my ferry ticket?

Yes. Counter staff at Malaysian ferry terminals and Indonesian immigration both expect a paper ticket or a clear screenshot. Mobile-only wallet confirmations sometimes don’t load if the terminal’s free Wi-Fi is congested.


Subodh’s Take

The Malaysia-to-Indonesia ferry network is one of the cleanest cross-border options in Southeast Asia for Indian backpackers. The free 30-day Indonesian entry for Indian passports has been stable for years, the ferries themselves are punctual, and the Johor Bahru to Batam route alone handles thousands of passengers a day. Plan backwards from your Indonesian destination, book on 12go or directly with Sindo/Mahakam, sort your SIM before boarding, and you’ll be in Indonesia by lunchtime.