More information is needed. Are we talking procedural generated content? or are you looking for a Blender tutorial?
But to answer with the answer most relating to the forum, I would use a series of Cubic or Quadratic Bezier curves, as the control points, and then spawn edge loops along the way, each with the same amount of vertices, so they are easy to connect with triangles.
If you want the tunnel to turn, rather than just sliding from side to side, you can use the derived Bezier curve to calculate the tangent. (https://en.wikipedia.org/wiki/B%C3%A9zier_curve#Specific_cases)
Keep in mind that these curves are not inherently uniform, but if you keep the midpoints evenly distributed, it should be fairly uniform.
What framework are you using?