AWS Client VPN કોઈ મેળ ખાતા રૂટ વિના ટ્રાફિક કેમ છોડી દે છે
એન્ડપોઈન્ટ પેકેટ ફોરવર્ડ કરે છે ત્યારે જ જ્યારે તેનું રૂટ ટેબલ ગંતવ્યને આવરી લે. રૂટ વાંચો, for_each સાથે પ્રીફિક્સ જાહેર કરો, પરત માર્ગ ચકાસો.
Client VPN ક્લાયંટને સરનામું આપે છે, હેન્ડશેક પૂરો થાય છે, અને કનેક્શન તો ક્યાંય પણ પહોંચતું નથી. સર્ટિફિકેટ કે ક્લાયંટ આવૃત્તિઓને સ્પર્શ કરતા પહેલાં એન્ડપોઈન્ટના પોતાના રૂટ ટેબલ પર નજર કરો. AWS Client VPN એન્ડપોઈન્ટ પેકેટ ફોરવર્ડ કરે છે ત્યારે જ જ્યારે તેના રૂટમાંથી એક ગંતવ્ય પ્રીફિક્સને આવરી લે; જો કંઈ મેળ ન ખાય, તો પેકેટ એન્ડપોઈન્ટ પર જ કાઢી નાખવામાં આવે છે અને લક્ષ્ય હોસ્ટને કદી SYN દેખાતું નથી.
આ ફોરવર્ડિંગ નિર્ણય છે, પ્રમાણીકરણનો નહીં. તે ટનલ ઊભી થયા પછી અને અધિકૃતિ નિયમો મૂલ્યાંકન પછી થાય છે, તેથી માન્ય સર્ટિફિકેટ અને માન્ય જૂથ હજુ પણ મૃત કનેક્શન આપી શકે છે.
એન્ડપોઈન્ટ ફક્ત તે જ ફોરવર્ડ કરે છે જે તેનું રૂટ ટેબલ આવરી લે
દરેક રૂટ એ ગંતવ્ય CIDR ઉપરાંત તે સબનેટ છે જેણે ટ્રાફિક મેળવવો જોઈએ. એન્ડપોઈન્ટ ક્લાયંટના ગંતવ્યને તે યાદી સાથે સરખાવે છે, મેળ ખાતી એન્ટ્રી પસંદ કરે છે અને પેકેટને સંકળાયેલા સબનેટમાં મોકલે છે. એન્ટ્રી ન હોય તો આગળનું હોપ નહીં.
ધ્યાન રાખો કે રૂટ શું નથી. તે VPC રૂટ ટેબલની એન્ટ્રી નથી, અને તે કંઈપણ અધિકૃત કરતું નથી. અધિકૃતિ નિયમો નક્કી કરે છે કે જૂથ ગંતવ્ય સુધી પહોંચી શકે છે કે નહીં; રૂટ નક્કી કરે છે કે એન્ડપોઈન્ટ પાસે પેકેટ મોકલવાની જગ્યા છે કે નહીં. બંને મેળ ખાવા જોઈએ, અને તે અલગ લક્ષણો સાથે નિષ્ફળ જાય છે, તેથી કયું તૂટેલું છે તે અનુમાન કરવું બપોર બગાડે છે.
અભિજાત અસંગતિ પિયર્ડ 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 માં લાવવા માટે બીજું એન્ડપોઈન્ટ ઊભું ન કરો.
તેના બદલે ઇમ્પોર્ટ કરો, અથવા ids ને ચલ તરીકે પાસ કરો અને વારસામાં મળેલા ઑબ્જેક્ટને અસંચાલિત રહેવા દો. ઇમ્પોર્ટને દરેક સંસાધન પ્રકાર માટે પ્રદાતા દસ્તાવેજ કરે તે ઓળખ ફોર્મેટ જોઈએ; તે એન્ડપોઈન્ટ, ગંતવ્ય પ્રીફિક્સ અને લક્ષ્ય સબનેટને એન્કોડ કરે છે. તે સ્ટ્રિંગને યાદશક્તિથી બનાવવાને બદલે સંસાધન દસ્તાવેજીકરણમાંથી કૉપિ કરો, પ્લાન ચલાવો, અને કંઈ નવું ઉમેરતા પહેલાં કોઈ ફેરફારની અપેક્ષા ન રાખો.
પેકેટ જે ક્રમમાં મુસાફરી કરે તે ક્રમમાં શોધો
જ્યારે રૂટ અસ્તિત્વમાં હોય અને કનેક્શન હજુ નિષ્ફળ જાય, ત્યારે ઉપરના સ્તરે અનુમાન કરવાને બદલે માર્ગ ક્રમમાં ચાલો.
- રૂટ: પ્રીફિક્સ ગંતવ્યને આવરે છે અને એન્ડપોઈન્ટ સાથે સંકળાયેલા સબનેટ તરફ ઈશારો કરે છે.
- અધિકૃતિ: અધિકૃતિ નિયમ વપરાશકર્તાના જૂથ માટે તે ગંતવ્યને મંજૂરી આપે છે. ફક્ત રૂટ કદી પ્રવેશ આપતું નથી.
- પરત માર્ગ: લક્ષ્ય સબનેટનું રૂટ ટેબલ જવાબોને એન્ડપોઈન્ટ તરફ પાછા મોકલે છે, અને સિક્યોરિટી ગ્રુપ ક્લાયંટ સરનામા પૂલમાંથી પોર્ટને મંજૂરી આપે છે.
- એપ્લિકેશન: ક્લાયંટમાંથી વાસ્તવિક TCP કનેક્શન ખોલો, પછી ખાતરી કરો કે લક્ષ્યના લોગ પૂલમાંથી અપેક્ષિત સ્રોત સરનામું દેખાડે છે.
દરેક apply માં એક પ્રીફિક્સ બદલો, પછી રૂટ યાદી ફરી વાંચો, અને ગંતવ્ય, અધિકૃત કરતો નિયમ અને પરત માર્ગ સાથે નોંધો. નકારેલી કનેક્શન ડિબગ કરનાર આગલી વ્યક્તિએ સર્ટિફિકેટ સિદ્ધાંતથી નહીં, આ યાદીમાંથી શરૂ કરવું જોઈએ.