---
# System prepended metadata

title: VPC實作
tags: [GCP實作]

---

# 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而言，我們只把它當作儲存ＮＡＴ設定的地方
![](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)

ＮＡＴ與subnet的Region需相同


![](https://i.imgur.com/fnw8BmH.png)

**CLoud router有另外的角色，但對於ＮＡＴ而言只是一個儲存設定資料的地方

![](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)
現在是套用到所有的ＶＭ
改成只想要允許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)

測試ＯＫ
![](https://i.imgur.com/liJ0T3U.png)



![](https://i.imgur.com/4D8j1kr.jpg)
![](https://i.imgur.com/XBL66tJ.png)
![](https://i.imgur.com/GoQ8D76.png)
