使用Azure CLI创建防火墙遇问题:无法解析GitHub域名
问题描述
本人网络技术基础薄弱,编写了Azure CLI脚本创建Azure防火墙,在本地私人账户可正常运行,但切换至其他账户后出现异常:配置后后端VM无法连接GitHub,执行ping https://github.com时返回ping: https://github.com: Name or service not known错误。
脚本中的问题点及修复
1. 重复创建虚拟网络(VNet)
脚本中重复执行了两次az network vnet create命令创建同一个VNet(lesson28VN),虽然Azure支持幂等操作,但可能导致子网配置出现不可预期的冲突,直接删除其中重复的一行即可。
2. 子网路由表关联时的大小写错误
在更新workloadSubnet关联路由表的命令中,VNet名称使用了小写的lesson28vn,但之前创建的VNet名称是大写结尾的lesson28VN。Azure资源名称大小写敏感,这会导致路由表无法正确关联到子网,流量根本没经过Azure防火墙,直接导致外部访问失败。
修复:将--vnet-name lesson28vn改为--vnet-name lesson28VN
3. DNS解析相关问题
- ping命令使用错误:
ping工具不支持带https://前缀的URL,正确用法是ping github.com或ping www.github.com,带协议前缀会被当作无效主机名。 - DNS流量规则与VM DNS配置不匹配:当前网络规则仅允许访问
209.244.0.3和209.244.0.4这两个DNS服务器,但如果后端VM的DNS服务器未配置为这两个地址,会导致域名解析失败。建议将VM的DNS服务器设置为Azure防火墙的私有IP($firewallPrivateIp),或者扩展DNS规则允许更多公共DNS服务器(比如8.8.8.8)。
4. 应用规则的FQDN覆盖不全
当前应用规则仅允许www.github.com,但GitHub的部分访问(比如API拉取代码)可能直接使用github.com域名,导致这类请求被防火墙拦截。
修复:修改应用规则的--target-fqdns参数,同时包含github.com和www.github.com:
--target-fqdns github.com www.github.com
5. 变量大小写错误导致IP获取失败
脚本最后获取workVM公网IP的变量是workIp,但echo输出的是$workIP(大写结尾),bash变量大小写敏感,所以输出为空。
修复:将echo $workIP改为echo $workIp
修复后的关键命令片段示例
修正后的子网路由关联命令
az network vnet subnet update \ --name workloadSubnet \ --resource-group $resource \ --vnet-name lesson28VN \ --address-prefixes 10.0.2.0/24 \ --route-table firewallRouteTable
修正后的GitHub应用规则
az network firewall application-rule create \ --firewall-name myFirewall \ --name allowGithub \ --collection-name myAppCollection1 \ --target-fqdns github.com www.github.com \ --protocols Http=80 Https=443 \ --resource-group $resource \ --source-addresses 10.0.2.0/24 \ --priority 280 \ --action Allow
修正后的IP输出命令
workIp=$(az vm show -d --resource-group $resource --name workVm --query publicIps -o tsv) echo $workIp
内容的提问来源于stack exchange,提问作者tmn

