.NET HttpClient通过VPN连接到Web服务

时间:2014-07-18 18:40:27

标签: c# .net vpn dotnet-httpclient

我的应用程序需要与托管在外部提供程序上的Web服务器通信。它已配置为仅允许来自其识别的IP地址的传入连接。

如果我在远程工作并通过VPN连接时需要连接,我会通过终端窗口添加路由,如sudo route -n add -net 22.222.222.22/32 192.168.133.1

我不希望每个远程工作的用户都必须这样做。我是否可以在应用程序层执行某些操作,以允许通过VPN连接的用户连接到远程Web服务器并使用VPN隧道?它是一个C#Winforms应用程序。

2 个答案:

答案 0 :(得分:0)

我假设你的应用的所有用户都在同一个防火墙后面?如果是这种情况,那么您的网络管理员应该能够直接在路由器上或在NAT服务器上为您设置路由。值得注意的是,至少在我的公司,我们总是不得不两次添加路由语句 - 一个用于内部,一个用于外部VPN。如果应用程序可以修改您的计算机的路由表,那将是一个巨大的安全漏洞,所以我不会这样做。

还有一个想法 - 您的VPN可能使用称为拆分隧道的常见功能,这意味着防火墙后面的所有目的地都将通过VPN(并应用相关的路由规则),但外部的任何目的地(例如您的外部)提供者)被拆分,而不是任何路由直接出去。解决这个问题的唯一方法是在防火墙和外部提供商之间建立VPN隧道(例如,在我的公司,我们已经通过我们的云服务器完成了这项工作,因此可以通过VPN访问)。

http://en.wikipedia.org/wiki/Split_tunneling

答案 1 :(得分:0)

我可以在你的评论中看到你试图在Windows环境中添加一个路由,但只找到一个适用于linux的命令?!

但我实际上并没有让你的漂移,以及你申请的结果应该是什么 首先,我将尝试帮助您在Windows机器上使用C#向路由表添加路由。 (服务器两面)

我创建了一个带有Button-Control btnAddRoute和Textbox-Control textBox1的WinForm,为您举个例子:

Adding a new route requires elevation!
添加路由仅适用于管理员btw

private void btnAddRoute_Click(object sender, EventArgs e)
{
    // route -p add xxx.xxx.xxx.xxx mask 255.255.0.0 xxx.xxx.xxx.xxx
    string netIp = "22.222.222.22";
    string mask = "255.255.255.255";
    string exitIp = "192.168.133.1";
    string arg = String.Format("-p add {0} mask {1} {2}", netIp, mask, exitIp);

    Process p = new Process
    {
        StartInfo =
        {
            UseShellExecute = false,
            FileName = "route",
            Arguments = arg,
            RedirectStandardOutput = true,
            StandardOutputEncoding = Encoding.ASCII
        }
    };
    p.Start();

    textBox1.Text = p.StandardOutput.ReadToEnd();
}

这会将指定IP的路由添加到路由表中,然后返回OK!或者失败了!取决于行动是否成功。

这或多或少是你想要的吗?还是我完全不对劲?