【问题标题】:.NET HttpClient Connect To Web Service through VPN.NET HttpClient 通过 VPN 连接到 Web 服务
【发布时间】:2014-07-18 18:40:27
【问题描述】:

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

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

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

【问题讨论】:

  • 为了清楚起见,您是说您的应用程序应该使用 VPN 隧道?
  • 应用程序应该使用 VPN 隧道。
  • 你能找到解决办法吗?我面临着完全相同的问题!
  • @LaurentKempé 不幸的是,我从未找到解决办法。该项目暂时放弃了。

标签: c# .net vpn dotnet-httpclient


【解决方案1】:

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

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

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

【讨论】:

  • 我复制并粘贴了本应在 Linux 上运行的命令。找不到 Windows 的。我实际上并没有为 Linux 开发 winforms 应用程序。并不是我们所有的用户都在防火墙后面。我们有一些远程工作并在连接到 VPN 时在他们的个人计算机上运行应用程序。
  • 对,但它们都通过同一个路由器(即它们位于同一个防火墙后面),这是您要设置路由语句的地方。你有什么理由不能这样做吗?
【解决方案2】:

我可以从您的 cmets 中看出,您正在尝试在 windows 环境中添加路由,但只找到了适用于 linux 的命令?!

但我实际上不明白你的想法,以及你的应用程序的结果应该是什么。
首先,我将尝试帮助您在 Windows 机器上使用 C# 向路由表添加路由。 (服务器端)

我创建了一个带有 Button-Control btnAddRoute 和 Textbox-Control textBox1 的小 WinForm 来给你举个例子:


添加路由只能以管理员身份使用

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!或失败!取决于操作是否成功。

这或多或少是你想要的吗?还是我完全错了?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多