Client VPN istemciye bir adres verir, el sıkışma tamamlanır ve bağlantı yine hiçbir yere gitmez. Sertifikalara veya istemci sürümlerine dokunmadan önce uç noktanın kendi rota tablosuna bakın. Bir AWS Client VPN uç noktası, yalnızca rotalarından biri hedef ön ekini kapsadığında paketi iletir; hiçbir şey eşleşmezse paket uç noktada atılır ve hedef ana bilgisayar SYN'i hiç görmez.

Bu bir iletme kararıdır, kimlik doğrulama kararı değil. Tünel ayağa kalktıktan ve yetkilendirme kuralları değerlendirildikten sonra oluşur, bu yüzden geçerli bir sertifika ve geçerli bir grup yine de ölü bir bağlantı üretebilir.

Uç nokta yalnızca rota tablosunun kapsadığını iletir

Her rota bir hedef CIDR ve trafiği alması gereken alt ağdır. Uç nokta istemcinin hedefini bu listeyle karşılaştırır, eşleşen girdiyi seçer ve paketi ilişkili alt ağa gönderir. Girdi yoksa sonraki atlama da yok.

Rotanın ne olmadığına dikkat edin. VPC rota tablosunda bir girdi değildir ve hiçbir şeyi yetkilendirmez. Yetkilendirme kuralları bir grubun hedefe ulaşıp ulaşamayacağını belirler; rotalar uç noktanın paketi gönderecek bir yeri olup olmadığını belirler. İkisi de uyuşmalıdır ve farklı belirtilerle başarısız olurlar, bu yüzden hangisinin bozuk olduğunu tahmin etmek bir öğleden sonrayı harcar.

Klasik uyumsuzluk eşlenmiş bir VPC'dir. Ana bilgisayar 10.20.4.0/24 içindeyken biri 10.20.0.0/24 için rota ekler, böylece adres her girdinin dışında kalır. İstemci tarafındaki yakalama, yanıtsız tekrarlanan SYN'ler gösterir ve hedefin günlükleri hiçbir şey göstermez.

Sertifikadan önce rota listesini okuyun

Uç noktanın rotaları ayrı bir nesnedir, bu yüzden VPC tablosunu okumak yerine doğrudan onlara sorun:

aws ec2 describe-client-vpn-routes --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 --query 'Routes[].{Dest:DestinationCidr,Target:TargetSubnet,Origin:Origin}'

Başarısız istemciden tam adresi ve ön ek uzunluğunu alın, ardından kapsamı karakter karakter denetleyin. En uzun ön ek eşleşmesi geçerlidir, bu yüzden daha dar bir rota başka bir yeri gösterdiğinde daha geniş bir rota sizi kurtarmaz.

for_each ile her hedef için bir kaynak

Elle yazılan rota blokları, biri konsolda ön ek eklediği anda kayar. Hedefleri bir haritada tutun ve her anahtar için bir kaynak oluşturun, böylece her ekleme veya kaldırma yalıtılmış kalır.

variable "client_vpn_routes" {
  type = map(string)
  default = {
    "10.20.0.0/16"  = "subnet-0aa11bb22cc33dd44"
    "172.31.0.0/20" = "subnet-0aa11bb22cc33dd44"
  }
}

resource "aws_ec2_client_vpn_route" "this" {
  for_each               = var.client_vpn_routes
  client_vpn_endpoint_id = var.client_vpn_endpoint_id
  destination_cidr_block = each.key
  target_vpc_subnet_id   = each.value
  depends_on             = [aws_ec2_client_vpn_network_association.this]
}

Ağ ilişkilendirmesine olan bağımlılığı koruyun. Bir rota ilişkili alt ağa ihtiyaç duyar, bu yüzden ikisini de oluşturan apply önce ilişkilendirmeyi sıralamalıdır ve bu referans olmadan Terraform rotayı önce denemekte özgürdür. Sonra planı okuyun: rota eklemelerinin sayısı eklediğiniz ön eklerle eşleşmelidir. Plan uç noktayı da değiştiriyorsa uç nokta kaynağı yanlış yazılmıştır ve uygulanması bağlı her istemcinin bağlantısını keser.

Kendinizin oluşturmadığı bir uç noktayı devralmak

Çoğu ekip konsolda oluşturulmuş bir uç noktayı devralır, bu yüzden rota kodu yoktur. Yalnızca rotaları Terraform'a almak için ikinci bir uç nokta kurmayın.

Bunun yerine içe aktarın, ya da id'leri değişken olarak geçirin ve devralınan nesneleri yönetimsiz bırakın. İçe aktarma, sağlayıcının her kaynak türü için belgelediği tanımlayıcı biçimini gerektirir; bu biçim uç noktayı, hedef ön ekini ve hedef alt ağı kodlar. Bu dizeyi bellekten oluşturmak yerine kaynak belgelerinden kopyalayın, bir plan çalıştırın ve yeni bir şey eklemeden önce hiçbir değişiklik olmamasını bekleyin.

Paketi gittiği sırayla izleyin

Rota varken bağlantı hâlâ başarısız oluyorsa, en üst katmanda tahmin etmek yerine yolu sırayla yürüyün.

  1. Rota: ön ek hedefi kapsar ve uç noktayla ilişkili alt ağa işaret eder.
  2. Yetkilendirme: bir yetkilendirme kuralı o hedefi kullanıcının grubuna izin verir. Tek başına rota asla erişim vermez.
  3. Dönüş yolu: hedef alt ağın rota tablosu yanıtları uç noktaya geri gönderir ve güvenlik grubu istemci adres havuzundan gelen bağlantı noktasına izin verir.
  4. Uygulama: istemciden gerçek bir TCP bağlantısı açın, sonra hedefin günlüklerinin havuzdan beklenen kaynak adresini gösterdiğini doğrulayın.

Her apply'da bir ön ek değiştirin, ardından rota listesini yeniden okuyun ve hedefi, yetki veren kuralı ve dönüş yolunu birlikte kaydedin. Reddedilen bir bağlantıda sonra hata ayıklayacak kişi sertifika teorisinden değil, bu envanterden başlamalıdır.

İlgili makaleler