I just happened to have access to a disco fog machine. This is quite a large black box with a liquid reservoir, jet outlet and remote control. (Cost about £30).
I set it up behind Crewkerne tunnel mouth on my model railway. Because of its size it had to be setback quite some way. A large bore cardboard tube was used to funnel the 'fog' into the back of the tunnel mouth.
There is a time lag between operating the remote and the 'fog' being jetted so, the trick is to work out when to hit the remote as the train approaches the tunnel exit. I ran a freight train around the circuit, hit the remote to give a short burst and a bellow of smoke came out of the tunnel with the train bursting through it.
The unexpected and amazing effect was that as the train came out of the tunnel it pulled the smoke with it! The plume clung to the engine rolling over the top and sides as though it came out of the engine chimney. The smoke continued to cling to the freight wagons and after the train passed by the smoke remnants drifted across the tracks - just like a real train.