Place the beef shanks into an 8-quart soup pot. Fill the pot three quarters full with water and bring to a boil. Reduce the heat to simmer and cook until the meat is very tender, about 1-1½ hours. With tongs, remove the meat from the pot and keep the liquid in the pot. Let the meat cool. Once cool enough to handle, discard any bone, connective tissue, and excess fat. Chop the meat into bite-sized pieces and set aside.
Place the beets and turnips into the same pot and cook over low heat for 20-30 minutes, or until the beets are halfway cooked through. Add the potatoes and chopped meat and cook for 10-15 minutes, or until the beets and potatoes are almost done.
Meanwhile, melt the butter in a large sauté pan and cook the onions and carrots over low heat for 5 minutes, or until the onions are translucent, stirring occasionally. Add the sauerkraut and tomatoes and cook, stirring, for 5 minutes. Remove from heat.
Add the sauerkraut mixture and bay leaves to the soup. Generously season with salt and pepper and continue simmering, until all the veggies are tender. Stir in the garlic and herbs and cook for 5 minutes. Remove from heat and let the flavors meld for at least an hour or as long as overnight. The soup is best made a day ahead.
Taste and adjust the seasonings. Serve hot with sour cream or avocado slices and fresh herbs.