
我的大腦有點想弄清楚這一點,但我似乎無法讓私有子網路連接到網路以獲取更新。基本上我想要的只是這些伺服器的網路存取。我已經嘗試過在其他帖子中找到的解決方案,但很容易會丟失一些東西,因為我已經研究這個問題很長一段時間了。
到目前為止,我已經完成了以下設定:
- 停用對我的 NAT 實例的來源/目標檢查
- 為公用子網路建立路由表並將其來源設定為 IGW(已驗證此方法有效)
- 為私有子網路建立路由表並將其來源設定為 NAT 實例
- 為 NAT 實例建立安全性群組,並使用 80/443 和 ssh 的入站和出站規則
- 為私有實例建立安全群組,入站和出站80/443和ssh
我能夠透過 SSH 跳到 NAT 實例,然後轉向私人伺服器,所以我知道這一切都在起作用。我已經透過 ping 內部位址驗證了我的規則,但是當我離開本地網路時,我就開始遇到問題。
我需要在哪裡找到或需要排除哪些故障才能幫助縮小範圍?是否有一些我忽略的 NAT 實例上需要完成的配置?
編輯:配置更新
- 專有網路:172.16.0.0./16
- 私有子網路:172.16.1.0/24
- 公有子網路:172.16.0.0/24
私有子網路由表:
指向公有子網路中的 NAT 實例。無法存取互聯網,已將 EIP 附加到面向公共互聯網的介面。
公有子網路由表:
將公共子網路指向 IGW,我已驗證網路存取。
想法:
我開始認為需要在公共子網路中的 NAT 實例上設定或建立一些東西,以轉送來自私有實例的流量,但我不太確定需要添加什麼。我發現這個帖子這解釋了在 iptables 中添加偽裝規則,這是否適用於我的情況?
答案1
是的,您必須在 nat 主機上設定 iptables 偽裝。
iptables -A POSTROUTING -t nat -s (private-subnet/cidr) -j MASQUERADE
我們有相同的設置,您已經正確完成了其他所有操作(禁用來源檢查,將私有子網路指向 nat 實例的接口,將公用子網路指向 igw)。
答案2
剛剛偶然發現這個有類似的問題。假設您使用精靈建立 NAT 實例,則上面提到的偽裝規則已經存在 - 如果您要「推出自己的」NAT 實例,則只需新增此規則。 (我通常會這樣做,這樣我就可以加倍於此,並使其成為 OpenSWAN L2TP/IPSec 遠端用戶 VPN 伺服器)。
自從上次創建其中一個以來,我忘記添加的是允許來自所有私有安全群組或子網路的所有流量(或至少是您想要允許的流量)的規則,這些流量將透過 NAT 執行個體路由流量。如果沒有規則允許,NAT 實例不會接受此類出站流量 - 不要只考慮從 Internet 傳入的流量。不確定這是否是您的問題,因為您確實提到將 22/80/443 添加到您的 NAT 安全群組,但我想我會建議其他可能有類似問題的人這樣做。
答案3
我為此奮鬥了一段時間,直到我發現:
然後,從已配置為作為 NAT 執行個體執行的 AMI 啟動一個執行個體到您的公有子網路。 Amazon 提供配置為作為 NAT 執行個體運作的 Amazon Linux AMI。這些 AMI 的名稱中包含字串 amzn-ami-vpc-nat,因此您可以在 Amazon EC2 控制台中搜尋它們。
http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html#NATInstance
我已將 NAT 伺服器設定為我自己的標準 (Ubuntu) 實例,一旦我使用 Amazon Linux AMI 並更新了我的路由表,它就開始工作。