Place the beef in a large bowl.
Add tap water and let it soak for 10-15 minutes to draw out the blood for a clearer broth.
Discard the water and give the beef a quick rinse.
In a large pot, bring 8-10 cups of water to a boil over high heat.
Add the beef, onion, peppercorn, and fish sauce to the pot.
Cover with a lid and reduce the heat to low.
Let it cook for about 30-40 minutes until the meat is just fork-tender. If the liquid level gets too low, add more water as needed since you'll need the broth later.
Remove the meat from the broth and cut it into smaller cubes, about 1x1 inch. Set aside. If you're using beef shank, return the bones to the pot of broth. Add more water if needed and let it boil for a few more minutes.
Season the broth with salt to taste, and add the roasted garlic and chopped spring onions. This soup will be served later.
In a separate pot or deep pan, heat the oil over medium heat.
Sauté the onion, garlic, and ginger until tender.
Add the beef and cook until the edges turn slightly brown.
Pour in the soy sauce, star anise, five-spice, bay leaves, brown sugar, and ground pepper. Stir well.
Add 2 cups of the beef broth and the cornstarch slurry.
Cover with a lid and bring to a simmer. Cook for 15-20 minutes or until the meat is very tender.
Divide the beef mixture into serving bowls and top with roasted garlic and chopped green onions.
Serve with fried garlic rice and a bowl of the soup.