The best way to diagnose these issues is to use the network section of the dev tools in the browser to examine the request when you do it via the browser and try and mimic it as best as possible in your code. In your case there are two specific issues, one is that the code on their side has some basic measures to stop people accessing it directly so it obviously checks the referrer header to make sure it has come from the intended embedded iframe. To get around this just spoof the referrer.
request.Method = WebRequestMethods.Http.Post;
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
request.Referer = "http://dniperu.online/buscador/buscardni_11ab.php";
The second issue is that for some reason (again maybe a form of protection?) the response it returns is actually a 500, so that's a custom error page you are seeing in the iframe, not a normal return document. So to parse it you'll need to update your code to read the error response rather than the returned html;
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
HttpWebResponse response = null;
string responseString;
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
responseString = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
}