我有一个Azure Web App,它通过VPN / VNET集成与第三方系统进行通信。部分通信依赖于能够解析DNS名称。
当应用程序部署到虚拟机时,我们只需使用
这样的条目更新hosts文件123.45.67.89 RPGMDR500-0R
通讯工作正常。由于通信的设置方式,我不能只在代码中使用IP地址。在通信中,DNS名称被发送回给我们,我们必须将其解析为该IP地址。
有没有办法只使用App服务?实际上,我们希望应用程序将此自定义DNS名称解析为IP地址。
更新 我更新了我们的VNET DNS服务器以使用DNS的虚拟机设置。
使用nameresolver,我可以看到DNS正在到达应用服务,但前提是我指定了DNS IP地址。默认情况下,它仍然使用默认服务器(不确定如何)。 (抱歉停电,不确定这些数据有多敏感。)
答案 0 :(得分:1)
在Azure Web App中,您无法在 hosts 文件中添加条目,因为不允许这样做。
在继续之前,您可能想要检查网络应用是否可以首先执行名称解析。 Azure Web App内置了 nameresolver.exe 。您可以运行以下命令:
System.Net
您可以在代码中进行名称解析。这是stackoverflow上的讨论主题:How to get the IP address of the server on which my C# application is running on?
使用string url = "www.facebook.com";
IPAddress[] addressList = Dns.GetHostAddresses(url);
{{1}}
答案 1 :(得分:0)
据我所知,我们无权访问azure web app中的磁盘C.所以我们无法在azure web app中更改hosts文件。
图片如下:
以下是一种解决方法,如果使用http访问vnet,则可以使用HttpRequestHeaders类更改请求主机头以更改代码中的dns名称。
更多细节,您可以参考下面的代码示例。
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(@"http://111.111.111.70");
client.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT header
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, @"http://111.111.111.70");
request.Headers.Host = "DNS name";
var re= client.SendAsync(request).Result;
答案 2 :(得分:0)
设置它需要很多开销,但您可以在Azure虚拟网络中设置DNS服务器,然后在应用程序中使用VNet集成功能。然后,您的应用将使用您可以根据需要配置的VNet的DNS。
答案 3 :(得分:0)
Here is documentation for the Azure app service正在访问网络中的VM。 据说,如果应用程序服务和虚拟机位于不同的网络中,则需要设置专用的DNS服务器。
但是我没有尝试过,听说我抱怨我们没有使用VNET集成来同步网络的选项
答案 4 :(得分:-1)
您可以将角色DNS服务器添加到该Webapp可以访问的同一vnet中的一个Vm中。 将该DNS服务器设置为仅将所有请求转发到另一个vnet中的AAD DNS服务器。