AWS Site-to-Site VPN: tashqi, ichki va LAN prefiksi
Bitta AWS VPN da uch manzil roli chalkashadi: tashqi hamkorlar, ichki /30 bog‘lanishi va himoyalangan LAN prefikslari. Ularni yuklab olingan konfiguratsiyadan o‘qing.
AWS Site-to-Site VPN dagi xatolarning ko‘pchiligi manzil xatolari bo‘lib, ular bitta ham paket harakatlanmasdan oldin yuzaga keladi. Tunnelning tashqi manzillari IPsec hamkorlariga yetib boradi, ichki manzillar ular orasidagi marshrutlash bog‘lanishini tashkil qiladi, himoyalangan prefikslar esa o‘sha bog‘lanish nima uchun kerakligidir. Bir rolni boshqasiga ko‘chiring, tunnel ko‘tariladi, lekin hech narsa marshrutlanmaydi. BGP mijoz shlyuzida men ishlatadigan o‘qi-tekshir-sozla ketma-ketligi quyidagicha, qiymatlar xotiradan emas, yuklab olingan qurilma konfiguratsiyasidan olinadi.
Uch manzil roli, bitta tunnel
Tashqi manzillar ommaviy bo‘lib, IPsec hamkorlariga tegishli: AWS tomonida har bir tunnel uchun bitta, sizning tomoningizda esa mijoz shlyuzining yetib boriladigan identifikatori, sizda haqiqatan mavjud NAT tuzilishiga moslangan. Ichki manzillar xususiy bo‘lib, mantiqiy bog‘lanishga tegishli; AWS buni 169.254.0.0/16 dan olingan /30 deb hujjatlashtiradi. Himoyalangan prefikslar — o‘sha bog‘lanish orqali marshrutlaydigan va e’lon qiladigan VPC, lokal yoki tranzit tarmoqlar.
LAN prefiksini tunnel interfeysining manzili sifatida berish bu xatoning klassik shaklidir. Interfeys sozlangan ko‘rinadi, LAN e’lon qilinmaydi, qarshi tomonda esa unga marshrut yo‘q. Tunnel o‘zining ichki pingini ham o‘tkazishi mumkin, lekin har bir dastur nomi vaqt tugashi bilan yakunlanadi. Tunnel parametrlari ma’lumotnomasi ichki CIDR cheklovlarini, jumladan qaysi manzil oralig‘idan bo‘lishi kerakligini sanab o‘tadi.
Qiymatlarni yuklab olingan konfiguratsiyadan o‘qing
Ulanishdan o‘zingizning aniq qurilma modelingiz uchun konfiguratsiyani yuklab oling, so‘ng uning manzillar jadvalini haqiqat manbai deb hisoblang. Konsol har bir tunnel uchun bir xil qiymatlarni ko‘rsatadi: tashqi IP, ichki CIDR va AWS tomonidagi BGP hamkor manzili. Ikki tunnel alohida obyektlar bo‘lib, alohida tashqi nuqtalar va alohida ichki /30 larga ega, garchi ikkalasi ham bir xil himoyalangan tarmoqlarni tashisa.
aws ec2 describe-vpn-connections --vpn-connection-ids vpn-0123456789abcdef0 \
--query 'VpnConnections[0].Options.TunnelOptions[].[OutsideIpAddress,TunnelInsideCidr]'
aws ec2 describe-customer-gateways --customer-gateway-ids cgw-0123456789abcdef0 \
--query 'CustomerGateways[0].[IpAddress,BgpAsn]'Agar yuklab olingan fayl va jonli konsol mos kelmasa, fayl eskirgan. Manzillarni qo‘lda tahrirlash o‘rniga qayta yuklab oling, chunki ichki juftlik bilan hamkorning sozlangan qo‘shnisi orasidagi nomuvofiqlik jim BGP nosozligidir.
Bog‘lanishni to‘g‘ri manzil bilan quring
Linux shlyuzida tunnel VTI yoki XFRM interfeysi bo‘lib, ichki /30 o‘sha interfeysga qo‘yiladi. Ikki tunnel ikki interfeys va ikki BGP qo‘shni degani, har bir AWS nuqtasi uchun bittadan. AWS yuklab olingan qurilma konfiguratsiyasida chop etadigan qoida virtual xususiy shlyuzni har bir ichki /30 ning birinchi manziliga, mijoz shlyuzingizni esa ikkinchisiga qo‘yadi, shuning uchun siz yuqori manzilni olasiz va pastrog‘i bilan peer bo‘lasiz. Bu yerda hech narsaga LAN manzili kerak emas.
ip tunnel add tun0 mode vti local 203.0.113.10 remote 18.230.1.1 key 42
ip addr add 169.254.10.2/30 dev tun0
ip link set tun0 up mtu 1400
ip tunnel add tun1 mode vti local 203.0.113.10 remote 18.230.2.1 key 43
ip addr add 169.254.10.6/30 dev tun1
ip link set tun1 up mtu 1400Agar qurilma modelingiz fayli teskari juftlikni chop etsa, uning raqamlaridan foydalaning va qoidani saqlang: interfeysdagi manzil sizniki, hamkor manzili AWS ga tegishli. Buni teskari qilish hech qachon Established ga yetmaydigan tunnel hosil qiladi, chunki siz sozlagan qo‘shni o‘z interfeysingiz allaqachon ushlab turgan manzildir.
Belgini va VTI kalitini IKE demoni bola SA ni interfeysga bog‘lash uchun ishlatadigan narsa bilan mos tuting, aks holda trafik tunnelga keladi, lekin qo‘nish uchun interfeys bo‘lmaydi. MTU ni boshqa saytdan raqam ko‘chirmasdan, yo‘lga va IKE demonining o‘z sozlamalariga qarab tekshiring.
Marshrutlarni tekshirishdan oldin BGP ni tekshiring
IPsec ning ko‘tarilishi hamkorlar xavfsizlik assotsiatsiyasi bo‘yicha kelishganini isbotlaydi, boshqa hech narsani emas. BGP sessiyasi ichki bog‘lanish ustidagi alohida muzokara, shuning uchun qo‘shni holati va prefiks hisoblagichlarini o‘qing, so‘ng e’lon qilmoqchi bo‘lganingiz bilan solishtiring.
ip -s addr show dev tun0
vtysh -c 'show bgp summary'
vtysh -c 'show bgp neighbors 169.254.10.1'
vtysh -c 'show ip bgp neighbors 169.254.10.1 advertised-routes'Established holati va nol qabul qilingan prefiks — bu siyosat yoki e’lon muammosi, tunnel muammosi emas. Butun tekshiruvni ikkinchi tunnelda takrorlang; ishlayotgan birinchi tunnel manzillar ishonchli ekanini aytadi, ikkinchi tunnel umuman sozlanganini emas.
Marshrutlangan paketni kuzatib boring, so‘ng to‘xtang
Sessiya prefikslarni tashiy boshlagach, marshrutni shlyuzdan ikki yo‘nalishda sinab ko‘ring: manba manzili, keyingi sakrash va trafikka ruxsat beruvchi xavfsizlik siyosati. BGP sessiyasi ko‘tarilgan bo‘lishi mumkin, lekin dasturingizga kerak bo‘lgan aniq prefiks filtrlangan, jamlangan yoki noto‘g‘ri interfeysga yo‘naltirilgan bo‘lishi mumkin.
Reachability Analyzer — AWS tomonidagi vosita bo‘lib, manba, manzil va yo‘lni oladi hamda qo‘llab-quvvatlanadigan konfiguratsiyada qaysi komponent uni to‘sganini xabar qiladi. Uni VPC dan mijoz shlyuzingiz manziligacha yo‘lni sinash uchun ishlating, dastur xostidan emas. U konfiguratsiyani tahlil qiladi va paketni lokal xavfsizlik devori orqali yubormaydi, shuning uchun uning hukmini o‘z interfeys hisoblagichlaringiz va paket yozuvlaringizdan alohida saqlang.
Har bir tunnel uchun tashqi juftlikni, ichki /30 ni va e’lon qilingan prefikslarni bitta jadvalga yozib qo‘ying. Keyingi o‘zgarishni ko‘rib chiqish mumkin bo‘lishini aynan o‘sha jadval ta’minlaydi.