1. Giriş
Politikaya Dayalı Rotalar
Politikaya dayalı rotalar, bir paketin hedef IP adresinden daha fazlasına göre sonraki durağı seçmenize olanak tanır. Trafiği protokole ve kaynak IP adresine göre de eşleştirebilirsiniz. Eşleşen trafik, dahili ağ yük dengeleyicisine yönlendirilir. Bu, güvenlik duvarları gibi cihazları ağ trafiği yoluna yerleştirmenize yardımcı olabilir.
Politikaya dayalı bir rota oluşturduğunuzda, trafiği rotada işlenebilecek kaynakları seçersiniz. Rota aşağıdakiler için geçerli olabilir:
- Ağın tamamı: tüm sanal makine örnekleri, VPN ağ geçitleri ve Interconnect'ler
- Ağ etiketlerini kullanma: VPC'deki sanal makine örneklerini seçme
- Ara bağlantı bölgesi: Bölge için VLAN ekleri aracılığıyla VPC ağına giren tüm trafik
Politikaya dayalı bir rotanın sonraki hop'u, politikaya dayalı rotayla aynı VPC ağında bulunan geçerli bir dahili ağ yük dengeleyici olmalıdır.
Dahili ağ yükü dengeleyicileri varsayılan olarak simetrik karma kullandığından, kaynak NAT'ı yapılandırmadan giden ve dönüş yollarında trafik aynı cihaza ulaşabilir.
Politikaya dayalı rotalar, özel dönüş yolları hariç diğer rota türlerinden daha yüksek önceliğe sahiptir.
İki politika tabanlı rota aynı önceliğe sahipse Google Cloud, tek bir politika tabanlı rota seçmek için deterministik bir dahili algoritma kullanır ve aynı önceliğe sahip diğer rotaları yoksayar. Politika tabanlı rotalar, en uzun önek eşleşmesini kullanmaz ve yalnızca en yüksek öncelikli rotayı seçer.
Tek yönlü trafik için tek bir kural veya çift yönlü trafiği yönetmek için birden fazla kural oluşturabilirsiniz.
Politikaya dayalı rotaları Cloud Interconnect ile kullanmak için rotanın, bir bölgedeki tüm Cloud Interconnect bağlantılarına uygulanması gerekir. Politika tabanlı rotalar yalnızca tek bir Cloud Interconnect bağlantısına uygulanamaz.
Politikaya dayalı bir rotadan trafik alan sanal makine örneklerinde IP iletme etkinleştirilmelidir.
PBR ile ilgili dikkat edilmesi gereken noktalar
Politika tabanlı rotaları aşağıdaki şekillerde kullanmak için özel yapılandırma gerekir.
Örneğin, GKE, PSC veya PGA/PSA ile PBR kullanma.
GKE ile PBR hakkında daha fazla bilgiyi burada, genel PBR sınırlamaları bölümünü ise burada bulabilirsiniz.
Neler öğreneceksiniz?
- Politika tabanlı rotaları yapılandırma
İhtiyacınız olanlar
- Örnekleri dağıtma ve ağ bileşenlerini yapılandırma bilgisi
- VPC güvenlik duvarı yapılandırması hakkında bilgi
2. Test Ortamı
Bu Codelab'de tek bir VPC kullanılacak. Bu ortamda, paketleri başka bir sunucu kaynağına gönderecek iki bilgi işlem kaynağı (clienta ve clientb) bulunur. PBR ve filtreleri kullanarak, clienta'dan gelen trafiği güvenlik duvarı zorunluluğu için başka bir işlem kaynağı üzerinden yönlendirirken clientb trafiği doğrudan sunucuya gider. Aşağıdaki şemada bu yol gösterilmektedir.

Yukarıdaki şemada, PBR yolları için teknik olarak bir ILB (ağ dahili yük dengeleyici) olmalıdır. Bu, şemayı basitleştirmek için çıkarılmıştır.
3. Başlamadan önce
Codelab için tek bir proje gerekir.
Cloud Shell'den:
export project_id=`gcloud config list --format="value(core.project)"` export region=us-central1 export zone=us-central1-a export prefix=codelab-pbr
4. API'leri etkinleştir
Henüz yapmadıysanız ürünleri kullanmak için API'leri etkinleştirin.
Cloud Shell'den:
gcloud services enable compute.googleapis.com gcloud services enable networkconnectivity.googleapis.com
5. VPC ağı ve alt ağı oluşturma
VPC Ağı
codelab-pbr-vpc VPC'sini oluşturun:
Cloud Shell'den:
gcloud compute networks create $prefix-vpc --subnet-mode=custom
Alt ağ
Seçilen bölgede ilgili alt ağları oluşturun:
Cloud Shell'den:
gcloud compute networks subnets create $prefix-vpc-subnet \
--range=10.10.10.0/24 --network=$prefix-vpc --region=${region}
6. Güvenlik Duvarı Kuralları Oluşturma
IAP'nin sanal makine örneklerinize bağlanmasına izin vermek için aşağıdaki özellikleri içeren bir güvenlik duvarı kuralı oluşturun:
- IAP kullanarak erişmek istediğiniz tüm sanal makine örnekleri için geçerlidir.
- 35.235.240.0/20 IP aralığından gelen giriş trafiğine izin verir. Bu aralık, IAP'nin TCP yönlendirme için kullandığı tüm IP adreslerini içerir.
Cloud Shell'den:
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
Standart HTTP bağlantı noktasının (TCP 80) ve ICMP protokolünün sunucuya ulaşmasına izin vermek için:
- "server" ağ etiketine sahip kaynaklar için geçerlidir.
- Tüm kaynaklardan girişe izin verir.
Cloud Shell'den:
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
Güvenlik duvarının paket almasına izin vermek için tüm protokollerde ve bağlantı noktalarında giriş trafiğine izin verin.
- "fw" ağ etiketine sahip kaynaklar için geçerlidir.
- 10.10.10.0/24 kaynaklarından girişe izin verir.
Cloud Shell'den:
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
Durum denetimi yoklamalarına izin vermek için
- "fw" ağ etiketine sahip kaynaklar için geçerlidir.
- Durum denetimi aralıklarından gelen trafiğe izin verir.
Cloud Shell'den:
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. Cloud Router ve Cloud NAT oluşturma
Bu bölümün amacı, özel sanal makinelerin internetten uygun yazılım paketlerini indirebilmesidir.
Cloud Router oluşturma
Cloud Shell'den:
gcloud compute routers create ${prefix}-cr \
--region=${region} \
--network=${prefix}-vpc
Cloud NAT ağ geçidi oluşturma
Cloud Shell'den:
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. İşlem örnekleri oluşturma
ClientA, ClientB, FW ve Server adlı işlem örneklerini oluşturun:
Cloud Shell'den:
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'
Cloud Shell'den:
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'
Cloud Shell'den:
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'
Cloud Shell'den:
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. PBR olmadan bağlantıyı test etme
Kısa süre önce oluşturduğumuz istemci işlem sanal makinelerine SSH ile bağlanın ve her iki istemciden de sunucuya bağlantıyı doğrulayın.
cloudshell1'den clienta'ya giriş yapın:
gcloud compute ssh clienta --zone=$zone --tunnel-through-iap
Aşağıdaki komutları çalıştırın:
ping 10.10.10.200 -c 5
curl 10.10.10.200/index.html
Ping ve curl istekleri başarılı olmalıdır.
Çıkış:
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>
+ simgesini tıklayarak ek bir Cloud Shell sekmesi açın.

cloudshell2'den kullanılacak değişkenleri ayarlayın:
export project_id=`gcloud config list --format="value(core.project)"` export region=us-central1 export zone=us-central1-a export prefix=codelab-pbr
cloudshell2'den clientb'ye SSH:
gcloud compute ssh clientb --zone=$zone --tunnel-through-iap
Aşağıdaki komutları çalıştırın:
ping 10.10.10.200 -c 5
curl 10.10.10.200/index.html
Ping ve curl istekleri başarılı olmalıdır.
Çıkış:
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>
Şimdi sanal makine terminalinden çıkın ve Cloud Shell'e geri dönün.
10. Create an Instance Group
Güvenlik duvarı sanal makineniz için yönetilmeyen bir örnek grubu oluşturun.
Cloud Shell'den:
gcloud compute instance-groups unmanaged create pbr-uig --zone=$zone
FW örneğini yönetilmeyen örnek grubuna ekleyin.
Cloud Shell'den:
gcloud compute instance-groups unmanaged add-instances pbr-uig --instances=fw --zone=$zone
11. Durum denetimi oluşturma
Arka uç hizmeti için bir durum denetimi oluşturun. Basit bir TCP bağlantı noktası 80 durum denetimi yapacağız.
Cloud Shell'den:
gcloud compute health-checks create tcp $prefix-hc-tcp-80 --region=$region --port 80
12. Arka uç hizmeti oluşturma
İletim kuralına eklenecek bir arka uç hizmeti oluşturun.
Cloud Shell'den:
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
Şimdi örnek grubunu arka uç hizmetine ekleyin.
Cloud Shell'den:
gcloud compute backend-services add-backend be-pbr --region=$region --instance-group=pbr-uig --instance-group-zone=$zone
13. İletim kuralı oluşturma
Cloud Shell'den:
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. PBR kuralı oluşturma
Bu PBR kuralı istemciler için geçerlidir. Kaynak IP 10.10.10.10/32 (clienta'nın adresi) ve hedef IP 10.10.10.0/24 ise tüm IPv4 trafiğini 10.10.10.25 iletme kuralına yönlendirir.
Bu durumda, clienta, PBR ile eşleşir ve clientb ile eşleşmez.
Cloud Shell'den:
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
Bu PBR kuralı, sunucu için geçerlidir. Kaynak IP 10.10.10.200/32 ve hedef IP 10.10.10.10/32 ise tüm IPv4 trafiğini 10.10.10.25 iletme kuralına yönlendirir.
Cloud Shell'den:
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. PBR ile bağlantıyı test etme
Şimdi PBR işlevini doğrulayacağız. "fw" örneği, sunucuya yönelik istekleri reddetmek için iptables ile yapılandırılır. PBR işlevselse daha önce istemci üzerinde çalışan istekler artık başarısız olurken istemci üzerinde çalışmaya devam eder.
clienta compute VM'ye SSH üzerinden bağlanın ve aynı testleri çalıştırın.
cloudshell1'den:
gcloud compute ssh clienta --zone=$zone --tunnel-through-iap
Aşağıdaki komutları çalıştırın:
ping 10.10.10.200 -c 5
curl 10.10.10.200/index.html
Çıkış:
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
İstekler başarısız olduğundan, PBR'nin, bu trafiği engelleyecek şekilde yapılandırılmış olan FW örneğine, clienta için trafiği aktif olarak yönlendirdiğini doğrulayabiliriz.
SSH ile clientb'ye bağlanın ve aynı bağlantı testini çalıştırın.
cloudshell2'den:
gcloud compute ssh clientb --zone=$zone --tunnel-through-iap
Aşağıdaki komutları çalıştırın:
ping 10.10.10.200 -c 5
curl 10.10.10.200/index.html
Çıkış:
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>
Gördüğünüz gibi, clientb'den sunucuya yapılan istekler başarılı. Bunun nedeni, isteklerin kaynak IP için bir PBR kuralıyla eşleşmemesidir.
16. [İsteğe bağlı] Güvenlik duvarındaki yakalamalarla doğrulama
Bu isteğe bağlı bölümde, güvenlik duvarı VM'sinde paket yakalama işlemleri yaparak PBR'yi doğrulama fırsatı bulacaksınız.
cloudshell1 ve cloudshell2'de clienta ve clientb ile SSH bağlantınız olmaya devam eder.
+ simgesini tıklayarak ek bir Cloud Shell sekmesi açın.

cloudshell3'ten değişkenleri ayarlayın:
export project_id=`gcloud config list --format="value(core.project)"` export region=us-central1 export zone=us-central1-a export prefix=codelab-pbr
fw'ye SSH uygulayın:
gcloud compute ssh fw --zone=$zone --tunnel-through-iap
fw (cloudshell3) üzerinde aşağıdaki komutu çalıştırın:
sudo tcpdump -i any icmp -nn
clienta (cloudshell1) üzerinden ping testini çalıştırın:
ping 10.10.10.200 -c 5
clientb (cloudshell2) adlı istemcide ping testini çalıştırın:
ping 10.10.10.200 -c 5
fw (cloudshell 3) üzerindeki çıkış:
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
PBR geçerli olmadığından, tcpdump'ta clientb'den (10.10.10.11) gelen paketleri görmezsiniz.
Kaynakları temizlemek için Cloud Shell'e geri dönün.
17. Temizleme adımları
Cloud Shell'den PBR kuralını, yönlendirme kuralını, arka uç hizmetini, durum denetimini, örnek grubunu, bilgi işlem örneklerini, NAT'yi, Cloud Router'ı ve güvenlik duvarı kurallarını kaldırın.
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
Alt ağı ve VPC'leri kaldırın:
gcloud -q compute networks subnets delete $prefix-vpc-subnet \
--region $region
gcloud -q compute networks delete $prefix-vpc
18. Tebrikler!
Codelab'i tamamladığınız için tebrik ederiz.
İşlediğimiz konular
- Politikaya Dayalı Rotalar