1. Pengantar
Rute Berbasis Kebijakan
Rute berbasis kebijakan memungkinkan Anda memilih next hop berdasarkan lebih dari sekadar alamat IP tujuan paket. Anda juga dapat mencocokkan traffic menurut protokol dan alamat IP sumber. Traffic yang cocok akan dialihkan ke load balancer Jaringan Internal. Ini dapat membantu Anda memasukkan peralatan seperti {i>firewall<i} ke dalam jalur lalu lintas jaringan.
Saat membuat rute berbasis kebijakan, Anda memilih resource mana yang traffic-nya dapat diproses berdasarkan rute tersebut. Rute dapat berlaku untuk hal berikut:
- Seluruh jaringan: semua instance virtual machine (VM), gateway VPN, dan Interconnect
- Menggunakan tag jaringan: pilih instance VM di VPC
- Region Interconnect: Semua traffic yang memasuki jaringan VPC melalui lampiran VLAN untuk region
Hop berikutnya dari rute berbasis kebijakan harus berupa load balancer Jaringan Internal valid yang berada dalam jaringan VPC yang sama dengan rute berbasis kebijakan.
Load balancer Jaringan Internal menggunakan hashing simetris secara default, sehingga traffic dapat menjangkau perangkat yang sama di jalur keluar dan kembali tanpa perlu mengonfigurasi NAT sumber.
Rute berbasis kebijakan memiliki prioritas lebih tinggi daripada jenis rute lainnya kecuali untuk jalur pulang khusus.
Jika dua rute berbasis kebijakan memiliki prioritas yang sama, Google Cloud akan menggunakan algoritma internal yang determenistik untuk memilih satu rute berbasis kebijakan, dengan mengabaikan rute lain dengan prioritas yang sama. Rute berbasis kebijakan tidak menggunakan pencocokan awalan terpanjang dan hanya memilih rute prioritas tertinggi.
Anda dapat membuat satu aturan untuk traffic satu arah atau beberapa aturan untuk menangani traffic dua arah.
Untuk menggunakan rute berbasis kebijakan dengan Cloud Interconnect, rute tersebut harus diterapkan ke semua koneksi Cloud Interconnect di seluruh region. Rute berbasis kebijakan tidak dapat diterapkan hanya untuk koneksi Cloud Interconnect individual.
Instance VM yang menerima traffic dari rute berbasis kebijakan harus mengaktifkan penerusan IP.
Pertimbangan dengan PBR
Konfigurasi khusus diperlukan untuk menggunakan rute berbasis kebijakan dengan cara berikut.
Misalnya menggunakan PBR dengan GKE, PSC, atau dengan PGA/PSA.
Detail selengkapnya tentang PBR dengan GKE dapat ditemukan di sini dan bagian batasan PBR umum di sini.
Yang akan Anda pelajari
- Cara mengonfigurasi rute berbasis kebijakan
Yang Anda butuhkan
- Pengetahuan dalam men-deploy instance dan mengonfigurasi komponen jaringan
- Pengetahuan konfigurasi Firewall VPC
2. Lingkungan Pengujian
Codelab ini akan memanfaatkan VPC tunggal. Akan ada dua resource komputasi, clienta dan clientb, di lingkungan ini yang akan mengirim paket ke resource server lainnya. Dengan menggunakan PBR dan filter, kita akan memaksa traffic dari clienta melalui resource komputasi lain untuk penerapan firewall saat traffic clientb langsung diarahkan ke server. Diagram di bawah mengilustrasikan jalurnya.
Pada diagram di atas, secara teknis harus ada ILB (load balancer internal jaringan) untuk jalur PBR. Elemen ini telah dihilangkan agar diagram lebih mudah.
3. Sebelum memulai
Codelab memerlukan satu project.
Dari cloudshell:
export project_id=`gcloud config list --format="value(core.project)"` export region=us-central1 export zone=us-central1-a export prefix=codelab-pbr
4. Mengaktifkan API
Jika belum dilakukan, aktifkan API untuk menggunakan produk
Dari cloudshell:
gcloud services enable compute.googleapis.com gcloud services enable networkconnectivity.googleapis.com
5. Membuat subnet dan jaringan VPC
Jaringan VPC
Buat VPC codelab-pbr-vpc:
Dari cloudshell:
gcloud compute networks create $prefix-vpc --subnet-mode=custom
Subnet
Buat subnet yang sesuai di region yang dipilih:
Dari cloudshell:
gcloud compute networks subnets create $prefix-vpc-subnet \ --range=10.10.10.0/24 --network=$prefix-vpc --region=${region}
6. Buat Aturan Firewall
Agar IAP dapat terhubung ke instance VM Anda, buat aturan firewall yang:
- Berlaku untuk semua instance VM yang Anda inginkan agar dapat diakses dengan menggunakan IAP.
- Mengizinkan traffic masuk dari rentang IP 35.235.240.0/20. Rentang ini berisi semua alamat IP yang digunakan IAP untuk penerusan TCP.
Dari cloudshell:
gcloud compute firewall-rules create $prefix-allow-iap-proxy \ --direction=INGRESS \ --priority=1000 \ --network=$prefix-vpc \ --action=ALLOW \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
Untuk mengizinkan port HTTP standar (TCP 80) dan protokol ICMP ke server:
- Berlaku untuk resource dengan tag jaringan "server"
- Mengizinkan traffic masuk dari semua sumber
Dari cloudshell:
gcloud compute firewall-rules create $prefix-allow-http-icmp \ --direction=INGRESS \ --priority=1000 \ --network=$prefix-vpc \ --action=ALLOW \ --rules=tcp:80,icmp \ --source-ranges=0.0.0.0/0 \ --target-tags=server
Untuk memungkinkan FW menerima paket, izinkan traffic masuk di semua protokol dan port.
- Berlaku untuk resource dengan tag jaringan "fw"
- Mengizinkan masuk dari sumber 10.10.10.0/24
Dari cloudshell:
gcloud compute firewall-rules create $prefix-fw-allow-ingress \ --direction=INGRESS \ --priority=1000 \ --network=$prefix-vpc \ --action=ALLOW \ --rules=all \ --source-ranges=10.10.10.0/24 \ --target-tags=fw
Untuk mengizinkan pemeriksaan health check
- Berlaku untuk resource dengan tag jaringan "fw"
- Memungkinkan traffic masuk dari rentang health check
Dari cloudshell:
gcloud compute firewall-rules create $prefix-allow-hc-ingress \ --direction=INGRESS \ --priority=1000 \ --network=$prefix-vpc \ --action=ALLOW \ --rules=tcp:80 \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=fw
7. Membuat Cloud Router & Cloud NAT
Tujuan dari bagian ini adalah agar mesin virtual pribadi dapat mendownload paket software yang sesuai dari internet.
Membuat Cloud Router
Dari cloudshell:
gcloud compute routers create ${prefix}-cr \ --region=${region} \ --network=${prefix}-vpc
Membuat Gateway Cloud NAT
Dari cloudshell:
gcloud compute routers nats create ${prefix}-nat-gw-${region} \ --router=${prefix}-cr \ --router-region=${region} \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges
8. Membuat Instance Compute
Buat instance komputasi ClientA, ClientB, FW, dan Server:
Dari cloudshell:
gcloud compute instances create clienta \ --subnet=$prefix-vpc-subnet \ --no-address \ --private-network-ip=10.10.10.10 \ --zone $zone \ --tags client \ --metadata startup-script='#! /bin/bash apt-get update'
Dari cloudshell:
gcloud compute instances create clientb \ --subnet=$prefix-vpc-subnet \ --no-address \ --private-network-ip=10.10.10.11 \ --zone $zone \ --tags client \ --metadata startup-script='#! /bin/bash apt-get update'
Dari cloudshell:
gcloud compute instances create server \ --subnet=$prefix-vpc-subnet \ --no-address \ --private-network-ip=10.10.10.200 \ --zone $zone \ --tags server \ --metadata startup-script='#! /bin/bash sudo su apt-get update apt-get -y install tcpdump apt-get -y install nginx cat > /var/www/html/index.html << EOF <html><body><p>Server</p></body></html> EOF'
Dari cloudshell:
gcloud compute instances create fw \ --subnet=$prefix-vpc-subnet \ --can-ip-forward \ --no-address \ --private-network-ip=10.10.10.75 \ --zone $zone \ --tags fw \ --metadata startup-script='#! /bin/bash apt-get update sudo apt-get -y install tcpdump sudo apt-get -y install nginx sudo sysctl -w net.ipv4.ip_forward=1 sudo iptables -I FORWARD -d 10.10.10.200 -j REJECT'
9. Uji Konektivitas tanpa PBR
Lakukan SSH ke VM komputasi klien yang baru-baru ini kami buat dan memverifikasi konektivitas dari klien ke server.
Dari cloudshell1 login ke clienta:
gcloud compute ssh clienta --zone=$zone --tunnel-through-iap
Jalankan perintah berikut:
ping 10.10.10.200 -c 5
curl 10.10.10.200/index.html
Permintaan ping dan curl akan berhasil.
Output:
root@clienta:~$ ping 10.10.10.200 -c 5 PING 10.10.10.200 (10.10.10.200) 56(84) bytes of data. 64 bytes from 10.10.10.200: icmp_seq=1 ttl=64 time=1.346 ms 64 bytes from 10.10.10.200: icmp_seq=2 ttl=64 time=0.249 ms 64 bytes from 10.10.10.200: icmp_seq=3 ttl=64 time=0.305 ms 64 bytes from 10.10.10.200: icmp_seq=4 ttl=64 time=0.329 ms 64 bytes from 10.10.10.200: icmp_seq=5 ttl=64 time=0.240 ms
root@clienta:~$ curl 10.10.10.200/index.html <html><body><p>Server</p></body></html>
Buka tab cloudshell tambahan dengan mengklik +.
Dari cloudshell2, tetapkan variabel untuk digunakan:
export project_id=`gcloud config list --format="value(core.project)"` export region=us-central1 export zone=us-central1-a export prefix=codelab-pbr
Dari cloudshell2 SSH ke clientb:
gcloud compute ssh clientb --zone=$zone --tunnel-through-iap
Jalankan perintah berikut:
ping 10.10.10.200 -c 5
curl 10.10.10.200/index.html
Permintaan ping dan curl akan berhasil.
Output:
root@clientb:~$ ping 10.10.10.200 -c 5 PING 10.10.10.200 (10.10.10.200) 56(84) bytes of data. 64 bytes from 10.10.10.200: icmp_seq=1 ttl=64 time=1.346 ms 64 bytes from 10.10.10.200: icmp_seq=2 ttl=64 time=0.249 ms 64 bytes from 10.10.10.200: icmp_seq=3 ttl=64 time=0.305 ms 64 bytes from 10.10.10.200: icmp_seq=4 ttl=64 time=0.329 ms 64 bytes from 10.10.10.200: icmp_seq=5 ttl=64 time=0.240 ms
root@clientb:~$ curl 10.10.10.200/index.html <html><body><p>Server</p></body></html>
Sekarang keluar dari terminal VM dan kembali ke cloudshell.
10. Create an Instance Group
Buat grup instance yang tidak dikelola untuk VM fw Anda.
Dari cloudshell:
gcloud compute instance-groups unmanaged create pbr-uig --zone=$zone
Tambahkan instance fw ke grup instance yang tidak dikelola.
Dari cloudshell:
gcloud compute instance-groups unmanaged add-instances pbr-uig --instances=fw --zone=$zone
11. Membuat health check
Membuat health check untuk layanan backend. Kita akan melakukan health check TCP port 80 sederhana.
Dari cloudshell:
gcloud compute health-checks create tcp $prefix-hc-tcp-80 --region=$region --port 80
12. Buat layanan backend
Buat layanan backend untuk ditambahkan ke aturan penerusan.
Dari cloudshell:
gcloud compute backend-services create be-pbr --load-balancing-scheme=internal --protocol=tcp --region=$region --health-checks=$prefix-hc-tcp-80 --health-checks-region=$region
Sekarang tambahkan grup instance ke layanan backend.
Dari cloudshell:
gcloud compute backend-services add-backend be-pbr --region=$region --instance-group=pbr-uig --instance-group-zone=$zone
13. Membuat aturan penerusan
Dari cloudshell:
gcloud compute forwarding-rules create fr-pbr --region=$region --load-balancing-scheme=internal --network=$prefix-vpc --subnet=$prefix-vpc-subnet --ip-protocol=TCP --ports=ALL --backend-service=be-pbr --backend-service-region=$region --address=10.10.10.25 --network-tier=PREMIUM
14. Buat Aturan PBR
Aturan PBR ini berlaku untuk klien. Ini akan mengarahkan semua traffic IPv4 ke aturan penerusan 10.10.10.25 jika IP sumbernya adalah 10.10.10.10/32 (alamat clienta) dan IP tujuannya adalah 10.10.10.0/24.
Artinya, clienta akan cocok dengan PBR dan bukan clientb.
Dari cloudshell:
gcloud network-connectivity policy-based-routes create pbr-client \ --network=projects/$project_id/global/networks/$prefix-vpc \ --next-hop-ilb-ip=10.10.10.25 \ --source-range=10.10.10.10/32 \ --destination-range=10.10.10.0/24 \ --protocol-version=IPv4 \ --priority=1000 \ --tags=client
Aturan PBR ini berlaku untuk server. Ini akan mengarahkan semua lalu lintas IPv4 ke aturan penerusan 10.10.10.25 jika IP sumbernya adalah 10.10.10.200/32 dan IP tujuannya adalah 10.10.10.10/32.
Dari cloudshell:
gcloud network-connectivity policy-based-routes create pbr-server \ --network=projects/$project_id/global/networks/$prefix-vpc \ --next-hop-ilb-ip=10.10.10.25 \ --source-range=10.10.10.200/32 \ --destination-range=10.10.10.10/32 \ --protocol-version=IPv4 \ --priority=2000 \ --tags=server
15. Uji Konektivitas dengan PBR
Sekarang kita akan memverifikasi fungsi PBR. "Fw" dikonfigurasi dengan iptable untuk menolak permintaan yang ditujukan ke server. Jika PBR berfungsi, permintaan yang sebelumnya berfungsi di clienta sekarang akan gagal, sementara clientb masih berhasil.
Jalankan SSH ke VM komputasi clienta dan jalankan pengujian yang sama.
Dari cloudshell1:
gcloud compute ssh clienta --zone=$zone --tunnel-through-iap
Jalankan perintah berikut:
ping 10.10.10.200 -c 5
curl 10.10.10.200/index.html
Output:
root@clienta:~$ ping 10.10.10.200 -c 5 PING 10.10.10.200 (10.10.10.200) 56(84) bytes of data. From 10.10.10.75 icmp_seq=1 Destination Port Unreachable From 10.10.10.75 icmp_seq=2 Destination Port Unreachable From 10.10.10.75 icmp_seq=3 Destination Port Unreachable From 10.10.10.75 icmp_seq=4 Destination Port Unreachable From 10.10.10.75 icmp_seq=5 Destination Port Unreachable
root@clienta:~$ curl 10.10.10.200/index.html curl: (7) Failed to connect to 10.10.10.200 port 80: Connection refused
Karena permintaan gagal, kita dapat mengonfirmasi bahwa PBR secara aktif mengarahkan traffic untuk clienta ke instance fw yang dikonfigurasi untuk memblokir traffic ini.
SSH ke clientb dan jalankan uji konektivitas yang sama.
Dari cloudshell2:
gcloud compute ssh clientb --zone=$zone --tunnel-through-iap
Jalankan perintah berikut:
ping 10.10.10.200 -c 5
curl 10.10.10.200/index.html
Output:
root@clientb:~$ ping 10.10.10.200 -c 5 PING 10.10.10.200 (10.10.10.200) 56(84) bytes of data. 64 bytes from 10.10.10.200: icmp_seq=1 ttl=63 time=0.361 ms 64 bytes from 10.10.10.200: icmp_seq=2 ttl=63 time=0.475 ms 64 bytes from 10.10.10.200: icmp_seq=3 ttl=63 time=0.379 ms
root@clientb:~$ curl 10.10.10.200 <html><body><p>Server</p></body></html>
Seperti yang terlihat, permintaan dari clientb ke server berhasil. Ini karena permintaan tidak cocok dengan aturan PBR untuk IP sumber.
16. [Opsional] Memvalidasi dengan screenshot di firewall
Di bagian opsional ini, Anda memiliki kesempatan untuk memvalidasi PBR dengan mengambil tangkapan paket di VM firewall.
Anda harus tetap memiliki koneksi SSH di cloudshell1 dan cloudshell2 ke clienta dan clientb.
Buka tab cloudshell tambahan dengan mengklik +.
Dari cloudshell3, tetapkan variabel:
export project_id=`gcloud config list --format="value(core.project)"` export region=us-central1 export zone=us-central1-a export prefix=codelab-pbr
Jalankan SSH ke fw:
gcloud compute ssh fw --zone=$zone --tunnel-through-iap
Jalankan perintah berikut di fw (cloudshell3):
sudo tcpdump -i any icmp -nn
Dari clienta (cloudshell1) jalankan pengujian ping:
ping 10.10.10.200 -c 5
Dari clientb (cloudshell2) jalankan pengujian ping:
ping 10.10.10.200 -c 5
Output pada fw (cloudshell 3):
root@fw:~$ sudo tcpdump -i any icmp -nn tcpdump: data link type LINUX_SLL2 tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes 17:07:42.215297 ens4 In IP 10.10.10.10 > 10.10.10.200: ICMP echo request, id 25362, seq 1, length 64 17:07:42.215338 ens4 Out IP 10.10.10.75 > 10.10.10.10: ICMP 10.10.10.200 protocol 1 port 51064 unreachable, length 92 17:07:43.216122 ens4 In IP 10.10.10.10 > 10.10.10.200: ICMP echo request, id 25362, seq 2, length 64 17:07:43.216158 ens4 Out IP 10.10.10.75 > 10.10.10.10: ICMP 10.10.10.200 protocol 1 port 30835 unreachable, length 92 17:07:44.219064 ens4 In IP 10.10.10.10 > 10.10.10.200: ICMP echo request, id 25362, seq 3, length 64 17:07:44.219101 ens4 Out IP 10.10.10.75 > 10.10.10.10: ICMP 10.10.10.200 protocol 1 port 2407 unreachable, length 92
Anda tidak akan melihat paket apa pun di tcpdump dari clientb (10.10.10.11) karena PBR tidak berlaku.
Keluar kembali ke cloudshell untuk membersihkan resource.
17. Langkah-langkah pembersihan
Dari Cloud Shell, hapus aturan PBR, aturan penerusan, layanan backend, health check, grup instance, instance compute, NAT, Cloud Router, dan aturan firewall.
gcloud -q network-connectivity policy-based-routes delete pbr-client gcloud -q network-connectivity policy-based-routes delete pbr-server gcloud -q compute forwarding-rules delete fr-pbr --region=$region gcloud -q compute backend-services delete be-pbr --region=$region gcloud -q compute health-checks delete $prefix-hc-tcp-80 --region=$region gcloud -q compute instance-groups unmanaged delete pbr-uig --zone=$zone gcloud -q compute instances delete clienta --zone=$zone gcloud -q compute instances delete clientb --zone=$zone gcloud -q compute instances delete server --zone=$zone gcloud -q compute instances delete fw --zone=$zone gcloud -q compute routers nats delete ${prefix}-nat-gw-${region} \ --router=$prefix-cr --router-region=$region gcloud -q compute routers delete $prefix-cr --region=$region gcloud -q compute firewall-rules delete $prefix-allow-iap-proxy gcloud -q compute firewall-rules delete $prefix-allow-http-icmp gcloud -q compute firewall-rules delete $prefix-fw-allow-ingress gcloud -q compute firewall-rules delete $prefix-allow-hc-ingress
Hapus subnet dan VPC:
gcloud -q compute networks subnets delete $prefix-vpc-subnet \ --region $region gcloud -q compute networks delete $prefix-vpc
18. Selamat!
Selamat, Anda telah menyelesaikan codelab.
Yang telah kita bahas
- Rute Berbasis Kebijakan