本文介紹NAT Gateway的常見故障及排查方案。
- 流量不通類故障排查:
- 訪問流量異常類故障排查:用戶端訪問公網服務時出現連線逾時、下載速度慢等現象
ECS執行個體配置DNAT條目後無法被公網訪問
ECS執行個體已經配置了DNAT條目,但是無法被公網訪問,可能原因如下:- 安全性群組不允許公網訪問DNAT條目中配置的ECS執行個體的私網連接埠。
請確認ECS執行個體中的安全性群組是否允許公網訪問DNAT條目中配置的ECS執行個體的私網連接埠。如果安全性群組不允許ECS執行個體的私網連接埠,請開放該連接埠,具體操作,請參見添加安全性群組規則。
您可以在同VPC內的其他ECS執行個體執行telnet <ECS執行個體私網IP地址> <私網連接埠>命令,確認DNAT條目中配置的ECS執行個體的私網連接埠是否可被訪問。- 系統出現類似以下回顯,表明DNAT條目中配置的ECS執行個體的私網連接埠可被訪問。
Connected to <ECS執行個體私網IP地址> - 系統出現類似以下回顯,表明DNAT條目中配置的ECS執行個體的私網連接埠不可被訪問。
unable connect to remote host: Connection timed out
- 系統出現類似以下回顯,表明DNAT條目中配置的ECS執行個體的私網連接埠可被訪問。
- 路由表中沒有目標網段為0.0.0.0/0,下一跳為NAT Gateway的自訂路由條目。
因為DNAT條目中配置的ECS執行個體被訪問後回複響應報文時,也需要有去往NAT Gateway的路由。因此,請確認您使用的系統路由表或自訂路由表中是否有上述自訂路由條目,如果沒有,請手動進行添加,具體操作,請參見添加路由表中的路由條目。
VPC內建立交換器的ECS無法通過SNAT訪問公網
VPC內建立交換器的ECS執行個體無法通過SNAT訪問公網,而該VPC內其他交換器下的ECS執行個體可以通過SNAT訪問公網。可能原因如下:- NAT Gateway中的SNAT條目中不包含建立的交換器的網段。
NAT Gateway不會為建立的交換器配置SNAT條目,您需要檢查建立的交換器的網段是否已經包含在NAT Gateway已有SNAT條目中。如果未包含,則該交換器下的ECS執行個體無法訪問公網。請您手動設定SNAT條目,具體操作,請參見建立和管理SNAT條目。
- 建立的交換器綁定了自訂路由表,但自訂路由表中沒有目標網段為0.0.0.0/0,下一跳為NAT Gateway的自訂路由條目。
請確認自訂路由表中是否有上述路由條目,如果沒有,請手動進行添加,具體操作,請參見添加路由表中的路由條目。
VPC記憶體在多個NAT Gateway時,某交換器的ECS執行個體不能訪問公網
如果該VPC內只使用系統路由表,且只有一條目標網段為0.0.0.0/0,下一跳指向其中一個NAT Gateway的自訂路由條目。當VPC內某個交換器的網段不在該NAT Gateway的SNAT條目中,則該交換器下的ECS執行個體不能訪問公網。
- 如果無需使用多個NAT Gateway,建議您刪除不需要使用的NAT Gateway,並為保留的NAT Gateway增加SNAT條目配置。
- 如果需要使用多個NAT Gateway,請參見同VPC內多公網NAT Gateway部署方案。
用戶端訪問公網服務時出現連線逾時、下載速度慢等現象
用戶端(例如ECS執行個體的應用程式)訪問某公網服務時,出現連線逾時、下載速度變慢等異常現象。排查方法如下:
- 如果通過監控查看到以下兩種情況並無異常,出現的異常為偶發現象,且您ECS執行個體較多不便排查ECS執行個體的異常流量情況,您可以開通NAT Gateway流量監控來排查異常流量來源。具體操作,請參見查看網關流量監控。
- 如果您的NAT Gateway是按固定規格計費,您可以通過NAT Gateway監控來查看並發串連數、建立串連速率是否存在超規格丟棄的情況。具體操作,請參見查看NAT Gateway監控。如果存在超規格丟棄的情況,建議您升級NAT Gateway的規格解決該問題。
- 通過NAT Gateway監控排查您的NAT Gateway綁定的EIP監控是否存在超過頻寬節流設定丟包的情況。具體操作,請參見查看公網NAT Gateway綁定的Elastic IP Address監控。如果有這種情況,建議您升級EIP的頻寬解決該問題。
- 如果您存在多台Linux作業系統的ECS執行個體通過NAT Gateway並發訪問基於Linux作業系統服務端的情境,由於Linux作業系統核心實現的原因,可能存在TCP串連請求被Linux作業系統核心丟棄而導致連線逾時或失敗的情況。建議您關閉服務端Linux net.ipv4.tcp_tw_recycle選項,或關閉用戶端Linux net.ipv4.tcp_timestamps選項。