Makes about 12 oz. of cheese.
1 gallon milk
2 tsp. citric acid or lemon juice
1/8 - 1/4 tsp. rennet
Pour the milk into a large pot. Dissolve the citric acid in a bit of cool water and stir into the milk, or stir the lemon juice directly into the milk. Stir well. Heat the milk slowly to 90 F (use a food thermometer). Try not to let it get above 90. Once it reaches that point, you can turn off the heat without the temperature decreasing.
Dilute the rennet in a few tablespoons of cool water. My rennet is extra strength that says 1/8 tsp will work on 2 gallons of milk, so I try to approximate 1/2 of a 1/8 tsp. measure. If your rennet doesn't have a suggested ratio on the container, using 1/4 tsp. should be fine.
Stir the rennet dilution into the milk. Let sit until a curd forms, this usually takes 5-10 minutes. Check the curd by sticking in your finger and pulling it out horizontally. Your finger should come out mostly clean with the curd splitting apart around it. You can also check by pulling the curd away from the edge of the pot and having clear whey fill in the space.
Take a long, sharp knife and cut a grid pattern in the curd all the way to the bottom of the pot. Cut several more lines that slant through the depth of the curd. Let rest for a few minutes. The curd should be thick enough that you see the lines you cut, and the cuts will be filled with clear whey.
Line a large colander with cloth (in my experience the commercial cheesecloth is too gauzy, and normal muslin or light linen works better) and place the colander over a larger bowl. Use a slotted spoon to scoop the curd into the bowl. You're using the cloth to strain out the whey, which you'll put back into the pot and heat the whey in the pot to about 175 F.
Take a few tablespoons of the whey and mix with ice water and a few tablespoons of salt in a bowl.
Add salt to the curd to taste.
The stretching and kneading that follows is what makes this into mozzarella.
Knead the curd to work off more whey, depending on how dry you want the final cheese to be. Then bundle up the curd in the cloth and hang it in the pot of hot whey to warm it up. It needs to be almost too hot to touch when you take it out. Take it out, open the cloth, and knead and stretch the curd. When it gets cool, bundle it in the cloth, heat it up in the whey, take it out and continue to knead it. Continue doing this.
Eventually when you pull at it, it will start forming the stretchy grain that mozzarella is known for. When it's all smooth, stretchy grain instead of the little cottage-cheesy curd texture, start forming it into a nice ball of cheese by tucking the edges under to the middle. Then immerse the ball of cheese in the cold brine you made earlier, which sets the cheese.
You can store the cheese in the brine, or just in a plastic bag or container. As this is a fresh, all-natural, soft cheese, it should be eaten within a few days of being made.