Client VPN додељује клијенту адресу, руковање се завршава, а веза ипак не води нигде. Пре него што додирнете сертификате или верзије клијента, погледајте сопствену табелу рута крајње тачке. AWS Client VPN крајња тачка прослеђује пакет само када једна од њених рута покрива префикс одредишта; ако се ништа не поклапа, пакет се одбацује на крајњој тачки и циљни домаћин никада не види SYN.

То је одлука о прослеђивању, а не о аутентификацији. Доноси се након што се тунел подигне и након што се оцене правила ауторизације, зато важећи сертификат и важећа група ипак могу дати мртву везу.

Крајња тачка прослеђује само оно што покрива њена табела рута

Свака рута је CIDR одредишта плус подмрежа која треба да прими саобраћај. Крајња тачка упоређује одредиште клијента са тим списком, бира одговарајући запис и шаље пакет у повезану подмрежу. Нема записа значи нема следећег скока.

Обратите пажњу шта рута није. Она није запис у табели рута VPC-а и ништа не ауторизује. Правила ауторизације одлучују да ли група може да достигне одредиште; руте одлучују да ли крајња тачка има где да пошаље пакет. Оба морају да се поклапају, а отказују са различитим симптомима, па нагађање шта је покварено троши цело поподне.

Класична неусклађеност је peered VPC. Неко дода руту за 10.20.0.0/24 док домаћин живи у 10.20.4.0/24, па адреса пада изван сваког записа. Снимак на страни клијента показује поновљене SYN без одговора, а записи циља не показују баш ништа.

Прочитајте списак рута пре сертификата

Руте крајње тачке су засебан објекат, па их питајте директно уместо да читате табелу VPC-а:

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

Узмите тачну адресу и дужину префикса од клијента који не успева, па проверите покривеност знак по знак. Примењује се подударање најдужег префикса, па вас шира рута не спашава када ужа показује негде другде.

Један ресурс по одредишту уз for_each

Ручно писани блокови рута се разилазе оног тренутка када неко дода префикс у конзоли. Држите одредишта у мапи и креирајте један ресурс по кључу, да свако додавање или уклањање остане изоловано.

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]
}

Задржите зависност од мрежне асоцијације. Рута захтева повезану подмрежу, па apply који креира обоје мора прво да поређа асоцијацију, а без те референце Terraform је слободан да прво покуша руту. Затим прочитајте план: број додавања рута треба да одговара префиксима које сте додали. Ако план такође замењује крајњу тачку, ресурс крајње тачке је погрешно написан, а његова примена прекида сваког повезаног клијента.

Преузимање крајње тачке коју нисте креирали

Већина тимова наследи крајњу тачку изграђену у конзоли, зато не постоји код за руте. Не подижите другу крајњу тачку само да бисте убацили руте у Terraform.

Уместо тога увезите, или проследите id-јеве као променљиве и оставите наслеђене објекте неуправљаним. Увоз захтева формат идентификатора који провајдер документује за сваки тип ресурса; он кодира крајњу тачку, префикс одредишта и циљну подмрежу. Копирајте тај низ из документације ресурса уместо да га састављате по сећању, покрените план и очекујте да нема промена пре него што додате нешто ново.

Пратите пакет редом којим путује

Када рута постоји а веза и даље не успева, прођите пут редом уместо да нагађате на горњем слоју.

  1. Рута: префикс покрива одредиште и показује на подмрежу повезану са крајњом тачком.
  2. Ауторизација: правило ауторизације дозвољава то одредиште за корисникову групу. Сама рута никада не даје приступ.
  3. Повратни пут: табела рута циљне подмреже шаље одговоре назад ка крајњој тачки, а сигурносна група дозвољава порт из базена адреса клијента.
  4. Апликација: отворите стварну TCP везу са клијента, па потврдите да записи циља показују очекивану изворну адресу из базена.

Мењајте један префикс по apply, затим поново прочитајте списак рута и забележите заједно одредиште, правило које ауторизује и повратни пут. Следећа особа која буде отклањала одбијену везу треба да почне од тог списка, а не од теорије о сертификатима.

Повезани чланци