# VPC實作 ###### tags: `GCP實作` ## :rocket: 2: 〖實作示範〗VPC外網 - Public VM to the Internet (default internet gateway) ### Step1: 建立VPC ![](https://i.imgur.com/1PyvobA.png) ![](https://i.imgur.com/ZrqXTuD.png) ### Step2: 建立VM ![](https://i.imgur.com/wBOubYJ.png) ![](https://i.imgur.com/6DDV26F.png) ![](https://i.imgur.com/bip7uKg.png) ![](https://i.imgur.com/aHyBvby.png) ![](https://i.imgur.com/cN8Vo04.png) ![](https://i.imgur.com/8aTC6FP.png) 將network修改成剛剛建立的vpc ![](https://i.imgur.com/yWIl4w7.png) ### Step3: 回到VPC ![](https://i.imgur.com/5el1ULS.png) - 進到VPC頁面可以看到預設的rule,他們被放到network default上 - 我們剛剛建立新的vpc,這些都沒有被套用 - 但在gpc中有兩個Rule一定會套用到所有vpc上 1. 阻擋外部請求 2. 允許VM出去請求 **這兩個預設的rules在這看不到,是gcp自動提供的** ![](https://i.imgur.com/IpeOaxB.png) 在還沒套用rules時,用SSH測試進入,會是失敗的 ![](https://i.imgur.com/ljID2cO.png) 會一直卡在這畫面 建立自己的Rule ![](https://i.imgur.com/BuGb1Vg.png) ![](https://i.imgur.com/nK8oTjp.png) - Direction of traffic: Ingress 進入 - Action on match: Allow 允許進入VM - 0.0.0.0/0 不管從哪裡來的請求 都要套用這規則 - SSH用的是ports22 ![](https://i.imgur.com/ja0cLC1.png) ![](https://i.imgur.com/QEbvGOd.png) 有被套用的VM ### Step4: 回到VM測試SSH連線 ![](https://i.imgur.com/8yszeqW.png) 成功! ![](https://i.imgur.com/uDahN5O.png) - 0.0.0.0/0指的是去Internet的路線,這條Route會先把我們請求送到internet gateway,再透過internet gateway送到internet ## :rocket: 3: VPC內網 - VM to VM 透過Private IP來進行跨Subnet溝通方式 ### Step1: 建立另一個Subnet並放上另一台VM ![](https://i.imgur.com/In3tea2.png) ![](https://i.imgur.com/aXH6e3D.png) ![](https://i.imgur.com/SeitvW6.png) ### Step2: 建立另一個VM ![](https://i.imgur.com/xiSTkoh.png) ![](https://i.imgur.com/NZFGEU1.png) - 這次是要用private,所以不需要External IP ### Step3: 建立Rule ![](https://i.imgur.com/kmoE9D3.png) - ping 10.0.5.2的時候會導到這個Rule,然後在指下一站Virtual network - pulbic sunbet->private這時會出錯,因為這時的Private VM並沒有允許這樣的請求過來 ![](https://i.imgur.com/nQSvFKn.png) 在ping一次,成功! ![](https://i.imgur.com/EqFIbmy.png) ## :rocket: 4: VPC內部外網 - Private VM to the Internet (NAT) 雖然這個Private vm沒有external IP,但仍然可以點SSH直接連進去 ![](https://i.imgur.com/mDZ2QX1.png) 會發現出不去,儘管有Route,但沒有Public IP ![](https://i.imgur.com/uRmWksn.png) ### Step1: 把VM Private IP轉成Public IP ![](https://i.imgur.com/T17wskh.png) NAT與Subnet的region需相同 cloud router有其他功能,但對於NAT而言,我們只把它當作儲存NAT設定的地方 ![](https://i.imgur.com/zSUCnOW.png) 重ping一次,成功! ![](https://i.imgur.com/MgZFWO2.png) ## :rocket: 5: VPC安全 - Routes & Firewall Rules - Network Tags network tag - firewall rules 現在兩個vm都可以透過ssh連進去,是因為我們在firewall裡面有建立ssh進去的規則 ![](https://i.imgur.com/rYiMA5s.png) ### Step1: 回VM 現在只想要Public VM可以使用ssh rule,用Network tag來實現 ![](https://i.imgur.com/9t1OGV9.png) ![](https://i.imgur.com/8SCHH4H.png) ### Step2: 回vpc wirewall 刪除舊的rule ![](https://i.imgur.com/S6XFjd1.png) 重新建立 ![](https://i.imgur.com/jFpt6UX.png) - tag打上剛剛建立的tag - ip 0.0.0.0/0要對所有的來源進行檢查 ![](https://i.imgur.com/SEFvfST.png) 成功套用到public vm上 ![](https://i.imgur.com/n8Hg4mj.png) **network tag - routes** ### Step1: 回到VPC Routes 進到default ![](https://i.imgur.com/hpzvRGm.png) 可以看到現在裡面有兩個vm在使用這個route 先把它刪除 ![](https://i.imgur.com/b8NjkBA.png) 重新建立Routes,並給他tags ![](https://i.imgur.com/be021zV.png) ### Step2: 回到public vm 幫這台vm新增tags ![](https://i.imgur.com/FfE7eCT.png) ### Step3: VPC Routes 查看剛剛建立的Routes下有了public vm ![](https://i.imgur.com/bS8V75P.png) ## :rocket: 5: 跨Subnet溝通方式 (VM to VM) 在同一VPC中建立另一個subnet ![](https://i.imgur.com/POFJLHm.png) ![](https://i.imgur.com/UfuhM2s.png) ![](https://i.imgur.com/RwPQJwm.png) ![](https://i.imgur.com/pC2b9Ws.png) 回到Compute enigen頁面,建立另一個VM ![](https://i.imgur.com/XV0TvlV.png) ![](https://i.imgur.com/j9rAdDL.png) ![](https://i.imgur.com/bLEYtAv.png) ![](https://i.imgur.com/h16aAS5.png) ![](https://i.imgur.com/wBd0nZS.png) ![](https://i.imgur.com/2FLhNFf.png) ![](https://i.imgur.com/s9ymxTL.png) 接下來先透過SSH先連到Public VM 進到Public VM測試能不能連到另一個Subnet VM ![](https://i.imgur.com/hn1GXKD.png) ![](https://i.imgur.com/W8eIBlF.png) ![](https://i.imgur.com/VAqMm50.png) ![](https://i.imgur.com/3wGql3B.png) 打下Enter ,會套用在這個Route上面,再將請求導到下一站Virtual network 透過這個Route來進行跨Subnet的溝通 會失敗,因為Private VM並沒有允許這樣的請求過來 解決: ![](https://i.imgur.com/Nmf4kwW.png) 現在只有一個SSH In Rule 再去建造一個Rule 讓ping這個指令是允許的 ![](https://i.imgur.com/OAFvrll.png) ![](https://i.imgur.com/lFmsScp.png) ![](https://i.imgur.com/v10207h.png) ping屬於的Protocol是屬於ICMP的Protocol ![](https://i.imgur.com/phPAneh.png) 成功套用 連到public VM SSH,重新ping一次 ![](https://i.imgur.com/zhHnXxA.png) 成功ping上 ## :rocket: 6: Private VM to the Internet (NAT) NAT Gateway會將Private IP轉換成Public IP 將NAT Gateway套用到VM上 ### Step1: 回到VPC Routes ![](https://i.imgur.com/TLqRIYe.png) 對Internet得請求都會轉到Default internet gateway 雖然有route但沒有Public IP 解決: ![](https://i.imgur.com/iTx0KJa.png) NAT與subnet的Region需相同 ![](https://i.imgur.com/fnw8BmH.png) **CLoud router有另外的角色,但對於NAT而言只是一個儲存設定資料的地方 ![](https://i.imgur.com/8eNdLKC.png) 設定要影響的範圍有哪一些IP的範圍 到Private VM Ping 外面IP ![](https://i.imgur.com/OhLpADd.png) 成功~ ## :rocket: 6: Routes & Firewall Rules - Network Tags ![](https://i.imgur.com/HNKIj9O.png) ![](https://i.imgur.com/SyqH1j8.png) 現在是套用到所有的VM 改成只想要允許Public VM可以使用SSH 回到VM頁面 ![](https://i.imgur.com/iBEDVPZ.png) ![](https://i.imgur.com/s0Gpiah.png) ![](https://i.imgur.com/y9M2Vvp.png) 新增sshok的Tag 回VPC console,把舊的SSH IN RULE砍掉 ![](https://i.imgur.com/JVstZQp.png) ![](https://i.imgur.com/9mA2RTN.png) 建立新的 firewall rule ![](https://i.imgur.com/aDqjJm3.png) ![](https://i.imgur.com/2vwTq20.png) ![](https://i.imgur.com/7LE8pEF.png) ![](https://i.imgur.com/4LGnrrY.png) **network tag也可以用在Route上面** ![](https://i.imgur.com/q09R2zR.png) GCP預設會建立3個Route ![](https://i.imgur.com/8ZBOF3C.png) 在沒有設定tag情況下,兩個VM都被套用進去 把這個Roule砍掉,重新建立自己的Role到Inter,並加上tag ![](https://i.imgur.com/1byC8Cb.png) ![](https://i.imgur.com/XVZUOaf.png) 到public VM加上這個internetok tag ![](https://i.imgur.com/vLaAiIW.png) 加完後~ ![](https://i.imgur.com/FDMfVvI.png) 測試OK ![](https://i.imgur.com/liJ0T3U.png) ![](https://i.imgur.com/4D8j1kr.jpg) ![](https://i.imgur.com/XBL66tJ.png) ![](https://i.imgur.com/GoQ8D76.png)