我的应用程序需要与托管在外部提供程序上的Web服务器通信。它已配置为仅允许来自其识别的IP地址的传入连接。
如果我在远程工作并通过VPN连接时需要连接,我会通过终端窗口添加路由,如sudo route -n add -net 22.222.222.22/32 192.168.133.1
我不希望每个远程工作的用户都必须这样做。我是否可以在应用程序层执行某些操作,以允许通过VPN连接的用户连接到远程Web服务器并使用VPN隧道?它是一个C#Winforms应用程序。
答案 0 :(得分:0)
我假设你的应用的所有用户都在同一个防火墙后面?如果是这种情况,那么您的网络管理员应该能够直接在路由器上或在NAT服务器上为您设置路由。值得注意的是,至少在我的公司,我们总是不得不两次添加路由语句 - 一个用于内部,一个用于外部VPN。如果应用程序可以修改您的计算机的路由表,那将是一个巨大的安全漏洞,所以我不会这样做。
还有一个想法 - 您的VPN可能使用称为拆分隧道的常见功能,这意味着防火墙后面的所有目的地都将通过VPN(并应用相关的路由规则),但外部的任何目的地(例如您的外部)提供者)被拆分,而不是任何路由直接出去。解决这个问题的唯一方法是在防火墙和外部提供商之间建立VPN隧道(例如,在我的公司,我们已经通过我们的云服务器完成了这项工作,因此可以通过VPN访问)。
答案 1 :(得分:0)
我可以在你的评论中看到你试图在Windows环境中添加一个路由,但只找到一个适用于linux的命令?!
但我实际上并没有让你的漂移,以及你申请的结果应该是什么 首先,我将尝试帮助您在Windows机器上使用C#向路由表添加路由。 (服务器两面)
我创建了一个带有Button-Control btnAddRoute
和Textbox-Control textBox1
的WinForm,为您举个例子:
添加路由仅适用于管理员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!或者失败了!取决于行动是否成功。
这或多或少是你想要的吗?还是我完全不对劲?