പൊരുത്തപ്പെടുന്ന റൂട്ട് ഇല്ലാതെ AWS Client VPN ട്രാഫിക് എന്തുകൊണ്ട് ഉപേക്ഷിക്കുന്നു
എൻഡ്പോയിന്റിന്റെ റൂട്ട് ടേബിൾ ലക്ഷ്യം ഉൾക്കൊള്ളുമ്പോൾ മാത്രമേ അത് പാക്കറ്റ് കൈമാറൂ. റൂട്ടുകൾ വായിക്കുക, for_each ഉപയോഗിച്ച് പ്രിഫിക്സുകൾ പ്രഖ്യാപിക്കുക, തിരിച്ചുള്ള വഴി പരിശോധിക്കുക.
Client VPN ക്ലയന്റിന് ഒരു വിലാസം നൽകുന്നു, ഹാൻഡ്ഷേക്ക് പൂർത്തിയാകുന്നു, എന്നിട്ടും കണക്ഷൻ എങ്ങും എത്തുന്നില്ല. സർട്ടിഫിക്കറ്റുകളിലോ ക്ലയന്റ് പതിപ്പുകളിലോ തൊടുന്നതിന് മുൻപ് എൻഡ്പോയിന്റിന്റെ സ്വന്തം റൂട്ട് ടേബിൾ നോക്കുക. AWS Client VPN എൻഡ്പോയിന്റ് അതിന്റെ റൂട്ടുകളിൽ ഒന്ന് ലക്ഷ്യ പ്രിഫിക്സ് ഉൾക്കൊള്ളുമ്പോൾ മാത്രമേ പാക്കറ്റ് കൈമാറൂ; ഒന്നും പൊരുത്തപ്പെട്ടില്ലെങ്കിൽ പാക്കറ്റ് എൻഡ്പോയിന്റിൽ തന്നെ ഉപേക്ഷിക്കപ്പെടുന്നു, ലക്ഷ്യ ഹോസ്റ്റ് ഒരിക്കലും SYN കാണുന്നില്ല.
ഇത് ഫോർവേഡിംഗ് തീരുമാനമാണ്, പ്രാമാണീകരണ തീരുമാനമല്ല. ടണൽ ഉയർന്നതിനും അനുമതി നിയമങ്ങൾ വിലയിരുത്തിയതിനും ശേഷമാണ് ഇത് സംഭവിക്കുന്നത്, അതുകൊണ്ടാണ് സാധുവായ സർട്ടിഫിക്കറ്റും സാധുവായ ഗ്രൂപ്പും ഇപ്പോഴും മരിച്ച കണക്ഷൻ നൽകാൻ കഴിയുന്നത്.
എൻഡ്പോയിന്റ് അതിന്റെ റൂട്ട് ടേബിൾ ഉൾക്കൊള്ളുന്നത് മാത്രമേ കൈമാറൂ
ഓരോ റൂട്ടും ഒരു ലക്ഷ്യ CIDR-ഉം ട്രാഫിക് സ്വീകരിക്കേണ്ട സബ്നെറ്റും ചേർന്നതാണ്. എൻഡ്പോയിന്റ് ക്ലയന്റിന്റെ ലക്ഷ്യത്തെ ആ പട്ടികയുമായി താരതമ്യം ചെയ്ത് പൊരുത്തപ്പെടുന്ന എൻട്രി തിരഞ്ഞെടുത്ത് പാക്കറ്റ് ബന്ധപ്പെട്ട സബ്നെറ്റിലേക്ക് അയയ്ക്കുന്നു. എൻട്രി ഇല്ലെങ്കിൽ അടുത്ത ഹോപ്പും ഇല്ല.
റൂട്ട് എന്തല്ല എന്നത് ശ്രദ്ധിക്കുക. അത് VPC റൂട്ട് ടേബിളിലെ എൻട്രിയല്ല, ഒന്നിനും അനുമതി നൽകുന്നുമില്ല. അനുമതി നിയമങ്ങൾ ഗ്രൂപ്പിന് ലക്ഷ്യത്തിൽ എത്താമോ എന്ന് തീരുമാനിക്കുന്നു; റൂട്ടുകൾ എൻഡ്പോയിന്റിന് പാക്കറ്റ് അയയ്ക്കാൻ സ്ഥലമുണ്ടോ എന്ന് തീരുമാനിക്കുന്നു. രണ്ടും ഒരുപോലെ വേണം, അവ വ്യത്യസ്ത ലക്ഷണങ്ങളോടെ പരാജയപ്പെടുന്നു, അതുകൊണ്ട് ഏതാണ് തകർന്നതെന്ന് ഊഹിക്കുന്നത് ഒരു ഉച്ചയ്ക്ക് ശേഷം നഷ്ടപ്പെടുത്തുന്നു.
സാധാരണ പൊരുത്തക്കേട് പിയർ ചെയ്ത VPC ആണ്. ഹോസ്റ്റ് 10.20.4.0/24-ൽ ആയിരിക്കെ ആരോ 10.20.0.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-കൾ വേരിയബിളുകളായി കൈമാറി പാരമ്പര്യ ഒബ്ജക്റ്റുകൾ കൈകാര്യം ചെയ്യാതെ വിടുക. ഇംപോർട്ടിന് ഓരോ റിസോഴ്സ് തരത്തിനും പ്രൊവൈഡർ രേഖപ്പെടുത്തുന്ന ഐഡന്റിഫയർ ഫോർമാറ്റ് വേണം; അത് എൻഡ്പോയിന്റും ലക്ഷ്യ പ്രിഫിക്സും ലക്ഷ്യ സബ്നെറ്റും എൻകോഡ് ചെയ്യുന്നു. ആ സ്ട്രിംഗ് ഓർമ്മയിൽ നിന്ന് രൂപപ്പെടുത്തുന്നതിന് പകരം റിസോഴ്സ് ഡോക്യുമെന്റേഷനിൽ നിന്ന് പകർത്തുക, ഒരു പ്ലാൻ ഓടിക്കുക, പുതിയത് ചേർക്കുന്നതിന് മുൻപ് മാറ്റങ്ങൾ ഒന്നും പ്രതീക്ഷിക്കരുത്.
പാക്കറ്റ് സഞ്ചരിക്കുന്ന ക്രമത്തിൽ അതിനെ പിന്തുടരുക
റൂട്ട് ഉണ്ടായിരിക്കുകയും കണക്ഷൻ ഇപ്പോഴും പരാജയപ്പെടുകയും ചെയ്യുമ്പോൾ, മുകളിലെ പാളിയിൽ ഊഹിക്കുന്നതിന് പകരം വഴി ക്രമത്തിൽ നടക്കുക.
- റൂട്ട്: ഒരു പ്രിഫിക്സ് ലക്ഷ്യത്തെ ഉൾക്കൊള്ളുന്നു, എൻഡ്പോയിന്റുമായി ബന്ധപ്പെട്ട സബ്നെറ്റിലേക്ക് ചൂണ്ടുന്നു.
- അനുമതി: ഒരു അനുമതി നിയമം ഉപയോക്താവിന്റെ ഗ്രൂപ്പിന് ആ ലക്ഷ്യം അനുവദിക്കുന്നു. ഒരു റൂട്ട് മാത്രം ഒരിക്കലും പ്രവേശനം നൽകുന്നില്ല.
- തിരിച്ചുള്ള വഴി: ലക്ഷ്യ സബ്നെറ്റിന്റെ റൂട്ട് ടേബിൾ മറുപടികൾ എൻഡ്പോയിന്റിലേക്ക് തിരികെ അയയ്ക്കുന്നു, സെക്യൂരിറ്റി ഗ്രൂപ്പ് ക്ലയന്റ് വിലാസ പൂളിൽ നിന്നുള്ള പോർട്ട് അനുവദിക്കുന്നു.
- ആപ്ലിക്കേഷൻ: ക്ലയന്റിൽ നിന്ന് യഥാർത്ഥ TCP കണക്ഷൻ തുറക്കുക, പിന്നീട് ലക്ഷ്യത്തിന്റെ ലോഗുകൾ പൂളിൽ നിന്ന് പ്രതീക്ഷിക്കുന്ന സ്രോതസ്സ് വിലാസം കാണിക്കുന്നുവെന്ന് സ്ഥിരീകരിക്കുക.
ഓരോ apply-യിലും ഒരു പ്രിഫിക്സ് മാറ്റുക, പിന്നീട് റൂട്ട് പട്ടിക വീണ്ടും വായിക്കുക, ലക്ഷ്യവും അനുമതി നൽകുന്ന നിയമവും തിരിച്ചുള്ള വഴിയും ഒരുമിച്ച് രേഖപ്പെടുത്തുക. നിരസിക്കപ്പെട്ട കണക്ഷൻ ഡീബഗ് ചെയ്യുന്ന അടുത്ത വ്യക്തി സർട്ടിഫിക്കറ്റ് സിദ്ധാന്തത്തിൽ നിന്നല്ല, ഈ പട്ടികയിൽ നിന്ന് തുടങ്ങണം.