Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NAT背后对Windows应用程序的安全请求_C#_Networking_Nat - Fatal编程技术网

C# NAT背后对Windows应用程序的安全请求

C# NAT背后对Windows应用程序的安全请求,c#,networking,nat,C#,Networking,Nat,我有一个windows应用程序,将部署在不同网络的多台PC上。此应用程序需要在收到来自外部服务的适当请求后启动一些操作 为此,我得到了等待请求并执行所需操作的HttpListener 问题在于NAT和安全性。当windows应用程序启动时,它需要告诉外部服务它是活动的,以及如何访问它(在NAT后面,它不是那么简单,需要某种隧道吗?)。当外部服务需要在windows应用程序上执行某些操作时,它会向其发送一个请求,应用程序应继续执行操作并向服务器发送响应 将NAT背后的Windows应用程序公开给外

我有一个windows应用程序,将部署在不同网络的多台PC上。此应用程序需要在收到来自外部服务的适当请求后启动一些操作

为此,我得到了等待请求并执行所需操作的
HttpListener

问题在于NAT和安全性。当windows应用程序启动时,它需要告诉外部服务它是活动的,以及如何访问它(在NAT后面,它不是那么简单,需要某种隧道吗?)。当外部服务需要在windows应用程序上执行某些操作时,它会向其发送一个请求,应用程序应继续执行操作并向服务器发送响应


将NAT背后的Windows应用程序公开给外部服务(隧道?)的最佳方式是什么?如何使其安全(HTTPS?)?或者,对于这种远程调用(RPC?),可能有更好的解决方案?

向NAT后面的客户端发送http请求意味着,您必须在NAT路由器中为每个客户端手动创建一条路由,将外部IP上的端口转发到固定的内部IP

要使其安全,您有两种选择:

  • 使用TLS(https)=每个客户端都需要证书并接受https
  • 使请求不安全,但将其保持在“安全环境”中。这可以通过服务器和NAT网络之间的VPN连接来实现(同时将本地网络定义为安全的)
如果您想运行服务器应用程序(一台主机),并且愿意投入一些时间,那么这种设置很好。如果您想在公司网络中使用大量客户机应用程序,它通常会缩短您的生命周期


有一些技术可以向客户端发送消息,而无需在路由器上进行任何配置。对于.Net,我们有SignalR,它结合了多种方法并使用了“尽可能最好的方法”:

感谢您的回复,Christoph。如果可能的话,我希望没有端口转发的解决方案。难道不可能像使用ngrok(例如,
ngrok
)那样进行隧道挖掘,而不需要打开任何端口或配置NAT吗?是的,您也可以创建一个到某个服务器的隧道(如果it部门允许),但我不知道有任何库可以让这变得简单。