GCP Cloud VPN Kurulumu ve Yapılandırması
Şirket ağınızı Google Cloud’a güvenli bir şekilde bağlamak istiyorsunuz ama IPsec tünelleri, BGP oturumları ve gateway yapılandırmaları kafanızı karıştırıyor mu? Endişelenmeyin, bu yazıda GCP Cloud VPN kurulumunu baştan sona, gerçek dünya senaryolarıyla birlikte ele alacağız.
Cloud VPN Nedir ve Ne Zaman Kullanılır?
Google Cloud VPN, şirket içi ağınızı (on-premises) veya başka bir bulut sağlayıcısındaki ağınızı GCP VPC’nize IPsec protokolü üzerinden şifreli bir tünel aracılığıyla bağlamanızı sağlar. Veriyi public internet üzerinden taşısa da IPsec şifrelemesi sayesinde güvenli bir bağlantı elde edersiniz.
Birkaç tipik senaryo düşünelim. Bir fintech startup’ındasınız ve şirket içindeki PostgreSQL veritabanlarınızın GCP’deki uygulama sunucularıyla doğrudan konuşması gerekiyor. Ya da hybrid bir mimari kuruyorsunuz; bazı iş yükleri on-premises kalacak, bazıları GCP’e taşınacak. Belki de iki farklı GCP projesindeki VPC’leri birbirine bağlamanız gerekiyor. Tüm bu senaryolarda Cloud VPN devreye giriyor.
GCP Cloud VPN’in iki ana tipi var:
- Classic VPN: Eski nesil, tek tünel, 99.9% SLA, maksimum 3 Gbps bant genişliği
- HA VPN (High Availability VPN): Yeni nesil, çift tünel, 99.99% SLA, önerilen çözüm
Üretim ortamları için her zaman HA VPN kullanmanızı tavsiye ederim. Classic VPN artık yeni özellikler almıyor ve Google da HA VPN’e geçişi teşvik ediyor.
Ön Hazırlık ve Gereksinimler
Kuruluma geçmeden önce elinizde olması gerekenleri netleştirelim.
Öncelikle GCP tarafında ihtiyaçlarınız:
- Aktif bir GCP projesi ve yeterli IAM izinleri (
compute.networkAdminveyaroles/owner) - Bir VPC network (default VPC kullanmaktan kaçının, üretimde dedicated VPC oluşturun)
- Cloud VPN API’sinin aktif olması
On-premises veya karşı taraf için:
- Statik IP adresine sahip bir VPN gateway cihazı (Cisco ASA, Fortinet, pfSense, strongSwan vb.)
- BGP desteği (HA VPN için gerekli) veya statik routing bilgisi
- Paylaşılan bir pre-shared key (PSK)
Şimdi gcloud CLI ile ortamımızı hazırlayalım:
# Projenizi ayarlayın
gcloud config set project YOUR_PROJECT_ID
# Compute Engine API'yi etkinleştirin
gcloud services enable compute.googleapis.com
# Mevcut VPC'lerinizi listeleyin
gcloud compute networks list
# Eğer yoksa üretim VPC'si oluşturun
gcloud compute networks create prod-vpc
--subnet-mode=custom
--bgp-routing-mode=regional
# VPC'ye subnet ekleyin
gcloud compute networks subnets create prod-subnet
--network=prod-vpc
--region=europe-west1
--range=10.10.0.0/24
HA VPN Gateway Oluşturma
HA VPN gateway’i oluşturmak, kurulumun ilk adımıdır. Bu gateway GCP tarafında iki interface’e (INTERFACE_0 ve INTERFACE_1) sahip olur ve her birine otomatik olarak harici IP adresi atanır.
# HA VPN Gateway oluşturun
gcloud compute vpn-gateways create prod-ha-vpn-gateway
--network=prod-vpc
--region=europe-west1
# Gateway'in durumunu ve atanan IP'leri görüntüleyin
gcloud compute vpn-gateways describe prod-ha-vpn-gateway
--region=europe-west1
Komutu çalıştırdıktan sonra çıktıda vpnInterfaces altında iki IP adresi göreceksiniz. Bu IP’leri not edin, on-premises tarafında VPN yapılandırması yaparken kullanacaksınız.
Örnek çıktı şöyle görünür:
vpnInterfaces:
- id: 0
ipAddress: 34.90.XXX.XXX
- id: 1
ipAddress: 34.90.YYY.YYY
Peer VPN Gateway Tanımlama
GCP’ye karşı taraftaki VPN cihazını tanıtmanız gerekiyor. Bu, on-premises router’ınızın GCP’deki temsilidir.
# Karşı tarafın tek IP'si varsa (örneğin Cisco ASA)
gcloud compute external-vpn-gateways create on-prem-gateway
--interfaces 0=203.0.113.1
# Karşı tarafta HA için iki IP varsa (örneğin çift Fortinet)
gcloud compute external-vpn-gateways create on-prem-ha-gateway
--interfaces 0=203.0.113.1,1=203.0.113.2
# Peer gateway'i doğrulayın
gcloud compute external-vpn-gateways describe on-prem-gateway
Gerçek dünya senaryomuzda şirket merkezinde bir Cisco ASA firewall var ve tek bir statik IP üzerinden internet bağlantısı sağlanıyor. Bu yüzden tek interface’li peer gateway tanımlıyoruz. Ancak HA VPN’in %99.99 SLA garantisi için GCP’nin iki farklı gateway interface’ini de bu tek peer IP’ye bağlayacağız.
Cloud Router Oluşturma
HA VPN, dinamik routing için BGP kullanır ve bu nedenle Cloud Router zorunludur. Cloud Router, on-premises ağınızla BGP oturumu kurarak route bilgilerini otomatik olarak değiştirir.
# Cloud Router oluşturun
gcloud compute routers create prod-cloud-router
--network=prod-vpc
--region=europe-west1
--asn=65001
--advertisement-mode=custom
# Router'ı doğrulayın
gcloud compute routers describe prod-cloud-router
--region=europe-west1
ASN seçimi hakkında önemli bir not: GCP’nin otomatik olarak kullandığı ASN 64512-65534 arasında private ASN’lerden birini seçin. On-premises tarafında da farklı bir private ASN kullanın (örneğin 65002). Aynı ASN’i her iki tarafta kullanmayın, BGP oturumu kurulamaz.
VPN Tünellerini Oluşturma
HA VPN için iki tünel oluşturmanız gerekiyor. Her tünel için farklı bir pre-shared key kullanmak güvenlik açısından önemlidir.
# Birinci tüneli oluşturun (Interface 0 -> Peer Interface 0)
gcloud compute vpn-tunnels create prod-tunnel-1
--peer-external-gateway=on-prem-gateway
--peer-external-gateway-interface=0
--region=europe-west1
--ike-version=2
--shared-secret=YOUR_STRONG_PSK_1
--router=prod-cloud-router
--vpn-gateway=prod-ha-vpn-gateway
--vpn-gateway-interface=0
# İkinci tüneli oluşturun (Interface 1 -> Peer Interface 0)
gcloud compute vpn-tunnels create prod-tunnel-2
--peer-external-gateway=on-prem-gateway
--peer-external-gateway-interface=0
--region=europe-west1
--ike-version=2
--shared-secret=YOUR_STRONG_PSK_2
--router=prod-cloud-router
--vpn-gateway=prod-ha-vpn-gateway
--vpn-gateway-interface=1
# Tünellerin durumunu kontrol edin
gcloud compute vpn-tunnels list --region=europe-west1
IKE versiyon seçimi: Mümkün olan her durumda IKEv2 kullanın. Daha güvenli ve daha verimlidir. Sadece eski cihazlarla uyumluluk sorunlarında IKEv1’e düşün.
Pre-shared key güvenliği: PSK olarak en az 32 karakter uzunluğunda, büyük/küçük harf, rakam ve özel karakter içeren bir string kullanın. Şu komutla güçlü PSK üretebilirsiniz:
# Güçlü PSK üretme
openssl rand -base64 32
BGP Oturumlarını Yapılandırma
Tüneller oluşturulduğunda otomatik olarak “waiting” durumuna geçer. BGP oturumlarını yapılandırarak routing’i aktif hale getirmeniz gerekiyor.
# Cloud Router'a BGP interface ekleyin - Tünel 1 için
gcloud compute routers add-interface prod-cloud-router
--interface-name=bgp-interface-1
--vpn-tunnel=prod-tunnel-1
--ip-address=169.254.0.1
--mask-length=30
--region=europe-west1
# Cloud Router'a BGP interface ekleyin - Tünel 2 için
gcloud compute routers add-interface prod-cloud-router
--interface-name=bgp-interface-2
--vpn-tunnel=prod-tunnel-2
--ip-address=169.254.1.1
--mask-length=30
--region=europe-west1
# BGP peer ekleyin - Tünel 1 için
gcloud compute routers add-bgp-peer prod-cloud-router
--peer-name=bgp-peer-1
--peer-asn=65002
--interface=bgp-interface-1
--peer-ip-address=169.254.0.2
--region=europe-west1
# BGP peer ekleyin - Tünel 2 için
gcloud compute routers add-bgp-peer prod-cloud-router
--peer-name=bgp-peer-2
--peer-asn=65002
--interface=bgp-interface-2
--peer-ip-address=169.254.1.2
--region=europe-west1
BGP link-local adresleri (169.254.x.x) için birkaç kural:
- Her tünel çifti için farklı /30 subnet kullanın
- GCP tarafı genellikle .1, peer tarafı .2 alır
- Bunlar sadece BGP oturumu için kullanılan özel adreslerdir, gerçek trafiği bunlar üzerinden taşımazsınız
On-Premises Tarafı Yapılandırma (strongSwan Örneği)
GCP’nin bir Linux sunucusunda çalışan strongSwan VPN ile nasıl bağlanacağını gösterelim. Bu senaryo, bulutta test ortamı kurduğunuzda ya da küçük ofisler için yazılım tabanlı VPN kullandığınızda işe yarar.
# Ubuntu/Debian üzerinde strongSwan kurulumu
sudo apt-get update
sudo apt-get install -y strongswan strongswan-pki
# /etc/ipsec.conf dosyasını düzenleyin
cat > /etc/ipsec.conf << 'EOF'
config setup
charondebug="ike 1, knl 1, cfg 0"
conn %default
ikelifetime=600m
keylife=180m
rekeymargin=3m
keyingtries=%forever
keyexchange=ikev2
authby=secret
conn gcp-tunnel-1
left=203.0.113.1
leftid=203.0.113.1
leftsubnet=192.168.0.0/16
right=34.90.XXX.XXX
rightid=34.90.XXX.XXX
rightsubnet=10.10.0.0/24
ike=aes256-sha256-modp2048!
esp=aes256-sha256!
auto=start
dpdaction=restart
dpddelay=30
dpdtimeout=120
conn gcp-tunnel-2
left=203.0.113.1
leftid=203.0.113.1
leftsubnet=192.168.0.0/16
right=34.90.YYY.YYY
rightid=34.90.YYY.YYY
rightsubnet=10.10.0.0/24
ike=aes256-sha256-modp2048!
esp=aes256-sha256!
auto=start
dpdaction=restart
dpddelay=30
dpdtimeout=120
EOF
# /etc/ipsec.secrets dosyasına PSK ekleyin
cat > /etc/ipsec.secrets << 'EOF'
203.0.113.1 34.90.XXX.XXX : PSK "YOUR_STRONG_PSK_1"
203.0.113.1 34.90.YYY.YYY : PSK "YOUR_STRONG_PSK_2"
EOF
# Servisi yeniden başlatın
sudo systemctl restart strongswan
sudo systemctl enable strongswan
# Tünel durumunu kontrol edin
sudo ipsec status
Firewall Kuralları
VPN tüneli kurulduktan sonra trafiğin geçebilmesi için GCP firewall kurallarını yapılandırmanız gerekiyor. Sıfır güven prensibini unutmayın: sadece gerekli portlara izin verin.
# On-premises ağından VPC'ye gelen trafiğe izin verin
gcloud compute firewall-rules create allow-from-onprem
--network=prod-vpc
--action=allow
--direction=ingress
--source-ranges=192.168.0.0/16
--rules=tcp:22,tcp:443,tcp:5432,icmp
--priority=1000
--description="On-premises den gelen trafige izin ver"
# VPC'den on-premises'e giden trafiği kontrol etmek için egress kuralı
gcloud compute firewall-rules create allow-to-onprem
--network=prod-vpc
--action=allow
--direction=egress
--destination-ranges=192.168.0.0/16
--rules=all
--priority=1000
--description="On-premises e giden trafige izin ver"
Bağlantıyı Test Etme ve Sorun Giderme
Tünel kurulduktan sonra bağlantıyı doğrulamak için birkaç yöntem kullanabilirsiniz:
# Tünellerin durumunu kontrol edin
gcloud compute vpn-tunnels describe prod-tunnel-1
--region=europe-west1
--format="get(status,detailedStatus)"
# BGP oturumlarının durumunu görüntüleyin
gcloud compute routers get-status prod-cloud-router
--region=europe-west1
# Öğrenilen route'ları listeleyin
gcloud compute routers get-status prod-cloud-router
--region=europe-west1
--format="json(result.bgpPeerStatus)"
# GCP VM'den on-premises sunucusuna ping testi
# Önce test VM oluşturun
gcloud compute instances create test-vm
--network=prod-vpc
--subnet=prod-subnet
--zone=europe-west1-b
--machine-type=e2-micro
# IAP tüneli üzerinden bağlanın ve ping atın
gcloud compute ssh test-vm --zone=europe-west1-b -- ping -c 4 192.168.1.1
Sık karşılaşılan sorunlar ve çözümleri:
- Tünel “waiting” durumunda kalıyor: On-premises tarafında tünel henüz başlatılmamıştır. Karşı taraftaki VPN cihazında tüneli manuel olarak başlatın veya
auto=startayarını kontrol edin. - “No proposal chosen” hatası: IKE ve ESP şifreleme algoritmalarının her iki tarafta eşleşmediğini gösterir. GCP’nin desteklediği cipher suite listesini kontrol edin ve uyumlu olanı seçin.
- BGP oturumu kurulamıyor: Link-local IP adreslerinin doğru yapılandırıldığından ve her iki taraftaki ASN değerlerinin farklı olduğundan emin olun.
- Tünel kuruldu ama ping atılamıyor: Firewall kurallarını ve on-premises tarafındaki routing tablosunu kontrol edin. GCP subnet’ine giden route’un VPN üzerinden yönlendirildiğinden emin olun.
Terraform ile Otomatik Kurulum
Üretim ortamlarında manuel komut çalıştırmak yerine Terraform kullanmak hem tekrarlanabilirlik hem de versiyon kontrolü açısından çok daha iyidir. İşte temel bir Terraform yapılandırması:
# main.tf
resource "google_compute_ha_vpn_gateway" "ha_gateway" {
name = "prod-ha-vpn-gateway"
network = google_compute_network.vpc.id
region = var.region
}
resource "google_compute_external_vpn_gateway" "external_gateway" {
name = "on-prem-gateway"
redundancy_type = "SINGLE_IP_INTERNALLY_REDUNDANT"
interface {
id = 0
ip_address = var.onprem_gateway_ip
}
}
resource "google_compute_router" "router" {
name = "prod-cloud-router"
network = google_compute_network.vpc.name
region = var.region
bgp {
asn = 65001
advertise_mode = "CUSTOM"
advertised_groups = ["ALL_SUBNETS"]
}
}
resource "google_compute_vpn_tunnel" "tunnel_1" {
name = "prod-tunnel-1"
region = var.region
vpn_gateway = google_compute_ha_vpn_gateway.ha_gateway.id
peer_external_gateway = google_compute_external_vpn_gateway.external_gateway.id
peer_external_gateway_interface = 0
shared_secret = var.tunnel1_psk
router = google_compute_router.router.id
vpn_gateway_interface = 0
ike_version = 2
}
resource "google_compute_vpn_tunnel" "tunnel_2" {
name = "prod-tunnel-2"
region = var.region
vpn_gateway = google_compute_ha_vpn_gateway.ha_gateway.id
peer_external_gateway = google_compute_external_vpn_gateway.external_gateway.id
peer_external_gateway_interface = 0
shared_secret = var.tunnel2_psk
router = google_compute_router.router.id
vpn_gateway_interface = 1
ike_version = 2
}
Terraform state dosyasında PSK’ların plain text olarak saklandığını unutmayın. Production ortamda Terraform state’i mutlaka encrypted bir backend’de (GCS bucket with CMEK) saklayın ve PSK değerlerini Secret Manager’dan çekin.
Monitoring ve Alerting
Kurulum tamamlandıktan sonra VPN’in sağlıklı çalışıp çalışmadığını izlemek kritik önem taşır. GCP Cloud Monitoring üzerinden birkaç temel metriği takip edin:
- vpn.googleapis.com/tunnel/status: Tünelin aktif olup olmadığı (1 = aktif, 0 = pasif)
- vpn.googleapis.com/network/received_bytes_count: Tünelden alınan byte sayısı
- vpn.googleapis.com/network/sent_bytes_count: Tünelden gönderilen byte sayısı
# Monitoring için log filter oluşturun
gcloud logging sinks create vpn-tunnel-logs
storage.googleapis.com/YOUR_BUCKET_NAME
--log-filter='resource.type="vpn_tunnel"'
# Tünel durumu için alerting policy oluşturun (JSON alert policy)
# Cloud Console üzerinden veya Terraform ile daha kolay yapılabilir
gcloud alpha monitoring policies create
--policy-from-file=vpn-alert-policy.json
Slack veya PagerDuty entegrasyonuyla tünel düştüğünde anında bildirim almak için bir notification channel ve alerting policy oluşturmanızı kesinlikle öneririm. Müşteri bir sorunu siz fark etmeden önce bildirirse bu hiç iyi bir deneyim olmaz.
Maliyet Optimizasyonu
Cloud VPN maliyeti birkaç kalemden oluşur:
- Her aktif tünel saati başına ücret (yaklaşık $0.05/saat, bölgeye göre değişir)
- Tünel üzerinden geçen çıkış trafiği (egress) ücreti
Maliyeti optimize etmek için:
- Kullanılmayan test tünellerini silin
- Trafiği mümkün olduğunca sıkıştırın
- Aynı region içindeki GCP VPC-to-VPC bağlantıları için VPC Peering’i tercih edin (çok daha ucuz ve hızlı)
- Yüksek bant genişliği gerektiren iş yükleri için Cloud Interconnect değerlendirin (VPN’den pahalı ama dedicated bağlantı)
Sonuç
GCP Cloud VPN kurulumu ilk bakışta karmaşık görünse de adımları tek tek izlediğinizde mantıklı bir akış olduğunu görürsünüz. Özetlemek gerekirse: HA VPN gateway oluşturun, peer gateway’i tanımlayın, Cloud Router ile BGP kurun, tünelleri ve BGP oturumlarını yapılandırın, firewall kurallarını ayarlayın ve monitoring’i ihmal etmeyin.
Üretim ortamı için önerilerimi bir kez daha vurgulayayım: Classic VPN yerine HA VPN kullanın, Terraform ile kodlayın, PSK’larınızı Secret Manager’da saklayın, tünel durumu için alerting kurun ve en az altı ayda bir PSK rotasyonu yapın. Bu best practice’leri uygulayan bir VPN kurulumu sizi hem güvenlik hem de operasyonel süreklilik açısından rahatlatacaktır.
Sorularınız veya karşılaştığınız özel durumlar için yorumları kullanabilirsiniz. Bir sonraki yazıda Cloud Interconnect ile Dedicated bağlantıyı inceleyeceğiz.
