3 basic techniques:
Tension and release: Dog is just walking a little faster than you are, each time they reach the end of the leash and cause tension in the leash, you hold them back until you catch up to them and they are back in the desired position, and then continue the walk.
Abrupt stops and redirects: (Back up and focus exercise) dog gets to the end and pulls, you immediately stop all forward motion. Dog orients back to you and loosens up on the leash, you either start forward motion again, or redirect dog to come back to your heel,
(depending on which walk-mode you are in) and then start forward motion again.
Directional switches: Dog gets to the end of the leash and pulls, immediately you turn in the opposite direction of where she was pulling. Picture an imaginary boundary in front of you, and the second she passes it, you immediately turn around. This is like a reset button. It forces the dog to start noticing that something else is attached to the leash, and keeps the dog behind you or in the heel position at all times.