无法从私有子网中的实例连接到 Internet
Posted
技术标签:
【中文标题】无法从私有子网中的实例连接到 Internet【英文标题】:Cannot connect to Internet from instance in private subnet 【发布时间】:2019-07-28 06:08:36 【问题描述】:我在 Azure 中设置了一个最小环境,其中一个实例 (Linux) 在一个私有子网中,一个虚拟网络网关通过 IPSec 连接。我按照Azure docs 中的说明进行操作,我的设置应该与示例中的设置相同。
我在 Terraform 中完成了所有这些操作,并且我使用 strongSwan 作为 *** 客户端连接到网关。我可以毫无问题地通过 strongSwan 建立 *** 连接。我在 FrontEnd 子网中创建了我的测试实例。为了通过 SSH 访问我的机器,我添加了另一个 NSG 规则以允许访问端口 22。到目前为止一切正常。
我的问题是,我无法从这台机器访问互联网。
到目前为止我检查过的内容:
DNS 解析工作正常 Linux 将其默认路由设置为 Azure 网关地址 (192.168.1.1) NIC 连接到 NSG,它只有默认的出站流量规则(允许所有出站流量) 没有自定义路由规则 根据Azure docs SNAT/PAT 应该会自动应用到我的场景中。我错过了什么吗?
编辑:我忘了说实例的网卡只有一个私有IP。
【问题讨论】:
确保您没有在 Vnet 上配置自定义用户定义路由。 docs.microsoft.com/en-us/azure/virtual-network/… 【参考方案1】:您可能无法从该 Azure VM 正确验证 Internet 连接。我有与question 相同的场景。您可以尝试在 Azure 机器上通过 ping bing.com
验证这一点。有些网站似乎无法ping通,但是您可以直接通过Web Browser或curl访问这些网站以从互联网上下载内容。
我已经在 Windows 本地桌面上使用一个 Azure VNet 建立了 P2S *** 连接,该 VNet 有一个 GatewaySubnet 和一个 VMsubnet。 VMsubnet 中的一个 windows 虚拟机和一个 ubuntu 虚拟机。两个 VM 都没有实例级公共 IP。
通常,Azure VM 在同一子网中本地有一个系统默认网关。此网关有助于路由来自主网络接口的所有出站流量。如果设置了 *** 网关,Azure 将自动生成到 P2S 本地子网的路由。默认情况下,effective routes 中还有一条默认路由0.0.0.0/0
到 Internet。
我可以在网络资源管理器中访问google.com
和bing.com
,但不能直接ping google.com
,可以在Windows VM 上ping bing.com
。
同样的情况,我也不能直接pinggoogle.com
,但是可以在Linux VM上pingbing.com
或者curl www.google.com
。
希望对您有所帮助,如果您有任何问题,请告诉我。
【讨论】:
感谢您指出这一点。 curl/wget 正在按预期工作。我知道 google 不会响应 ping,所以我通常使用其他网站或 google DNS 服务。奇怪的是,我似乎无法在我的设置中 ping 任何公共 IP。知道这是为什么吗?我的有效出站规则说允许所有到 Internet 的出站流量。这不包括 ICMP 包吗? 因为默认情况下 Azure 在 Azure 负载均衡器级别阻止 ICMP,以避免任何有针对性的 Ping/ICMP 洪水攻击,这是一种 DDoS 攻击。参考this1和this2和this3以上是关于无法从私有子网中的实例连接到 Internet的主要内容,如果未能解决你的问题,请参考以下文章
如何将面向公众的负载均衡器连接到私有 VPC 中的 EC2 实例
如何使用 mySQL 工作台连接到 AWS 私有子网 VPC 中的 RDS