AWS Site-to-Site VPN: بیرون، درون و پیشوند LAN
سه نقش آدرس روی یک AWS VPN با هم اشتباه میشوند: همتاهای بیرونی، پیوند درونی /30 و پیشوندهای LAN محافظتشده. آنها را از پیکربندی دانلودشده بخوانید.
بیشتر خطاهای AWS Site-to-Site VPN خطای آدرس هستند و پیش از حرکت هر بستهای رخ میدهند. آدرسهای بیرونی تونل به همتاهای IPsec میرسند، آدرسهای درونی پیوند مسیریابی میان آنها را میسازند، و پیشوندهای محافظتشده همان چیزی هستند که این پیوند برای آن است. یک نقش را در نقش دیگر کپی کنید: تونل بالا میآید در حالی که هیچ چیز مسیریابی نمیشود. این ترتیب بخوان-بررسی کن-پیکربندی کن است که روی دروازهٔ مشتری BGP به کار میبرم، با مقادیری که از پیکربندی دانلودشدهٔ دستگاه گرفته شدهاند، نه از حافظه.
سه نقش آدرس، یک تونل
آدرسهای بیرونی عمومیاند و به همتاهای IPsec تعلق دارند: یکی برای هر تونل در سمت AWS، و هویت قابلدسترس دروازهٔ مشتری در سمت شما، سازگار با هر ترتیب NAT که واقعاً دارید. آدرسهای درونی خصوصیاند و به پیوند منطقی تعلق دارند که AWS آن را /30 برگرفته از 169.254.0.0/16 مستند میکند. پیشوندهای محافظتشده همان شبکههای VPC، محلی یا ترانزیتی هستند که از طریق آن پیوند مسیریابی و اعلام میکنید.
اختصاص یک پیشوند LAN بهعنوان آدرس رابط تونل، شکل کلاسیک این خطاست. رابط پیکربندیشده به نظر میرسد، LAN اعلام نمیشود و طرف مقابل مسیری برای آن ندارد. تونل حتی میتواند پینگ درونی خودش را رد کند در حالی که هر نام برنامهای به پایان مهلت میرسد. مرجع گزینههای تونل محدودیتهای CIDR درونی را فهرست میکند، از جمله بازهٔ آدرسی که باید از آن بیاید.
مقادیر را از پیکربندی دانلودشده بخوانید
پیکربندی مدل دستگاه مشخص خود را از اتصال دانلود کنید و سپس جدول آدرس آن را منبع حقیقت بدانید. کنسول همان مقادیر را برای هر تونل نشان میدهد: IP بیرونی، CIDR درونی و آدرس همتای BGP در سمت AWS. دو تونل اشیای جداگانهای با نقاط پایانی بیرونی جدا و /30های درونی جدا هستند، هرچند هر دو همان شبکههای محافظتشده را حمل میکنند.
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]'اگر فایل دانلودشده و کنسول زنده اختلاف داشته باشند، فایل کهنه است. بهجای ویرایش دستی آدرسها دوباره دانلود کنید، زیرا ناهمخوانی میان جفت درونی و همسایهٔ پیکربندیشدهٔ همتا یک شکست خاموش BGP است.
پیوند را با آدرس درست روی آن بسازید
روی دروازهٔ Linux تونل یک رابط VTI یا XFRM است و /30 درونی روی همان رابط مینشیند. دو تونل یعنی دو رابط و دو همسایهٔ BGP، یکی برای هر نقطهٔ پایانی AWS. قراردادی که AWS در پیکربندی دانلودشدهٔ دستگاه چاپ میکند، دروازهٔ خصوصی مجازی را روی آدرس اول هر /30 درونی و دروازهٔ مشتری شما را روی دومی میگذارد، پس آدرس بالاتر را میگیرید و با پایینتر همتا میشوید. هیچچیز اینجا به آدرس LAN نیاز ندارد.
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 1400اگر فایل مدل دستگاه شما جفتشدن برعکس را چاپ میکند، از اعداد آن استفاده کنید و قاعده را نگه دارید: آدرس روی رابط مال شماست، آدرس همتا مال AWS است. برعکس انجام دادن، تونلی میسازد که هرگز به Established نمیرسد، چون همسایهای که پیکربندی کردهاید همان آدرسی است که رابط خودتان از قبل دارد.
نشانه و کلید VTI را با آنچه دیمن IKE برای بستن یک SA فرزند به رابط به کار میبرد همتراز نگه دارید، وگرنه ترافیک روی تونل میرسد بدون رابطی که رویش بنشیند. MTU را در برابر مسیر و در برابر تنظیمات خود دیمن IKE بررسی کنید، نه با کپی کردن یک عدد از سایت دیگر.
پیش از بررسی مسیرها، BGP را بررسی کنید
بالا آمدن IPsec فقط ثابت میکند همتاها دربارهٔ یک انجمن امنیتی توافق دارند و بس. نشست BGP مذاکرهای جدا روی پیوند درونی است، پس وضعیت همسایه و شمارندههای پیشوند را بخوانید و سپس با آنچه قصد اعلامش را داشتید مقایسه کنید.
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 با صفر پیشوند دریافتی یک مشکل سیاست یا اعلام است، نه مشکل تونل. کل بررسی را روی تونل دوم تکرار کنید؛ یک تونل اولِ کارکن به شما میگوید آدرسها باورپذیرند، نه اینکه تونل دوم اصلاً پیکربندی شده است.
یک بستهٔ مسیریابیشده را دنبال کنید و سپس بایستید
وقتی نشست پیشوندها را حمل میکند، مسیر را در هر دو جهت از دروازه بیازمایید: آدرس مبدأ، گام بعدی و سیاست امنیتی که ترافیک را مجاز میکند. ممکن است نشست BGP بالا باشد در حالی که پیشوند مشخصی که برنامهٔ شما نیاز دارد فیلتر شده، خلاصه شده یا به رابط اشتباه اشاره میکند.
Reachability Analyzer ابزار سمت AWS است که مبدأ، مقصد و مسیر میگیرد و گزارش میدهد کدام مؤلفه در یک پیکربندی پشتیبانیشده آن را مسدود کرده است. از آن برای آزمودن مسیر از VPC تا آدرس دروازهٔ مشتری خود استفاده کنید، نه از یک میزبان برنامه. این ابزار پیکربندی را تحلیل میکند و بستهای از دیوار آتش محلی عبور نمیدهد، پس حکم آن را از شمارندههای رابط و ضبط بستهٔ خودتان جدا نگه دارید.
جفت بیرونی، /30 درونی و پیشوندهای اعلامشده برای هر تونل را در یک جدول ثبت کنید. همان جدول است که تغییر بعدی را قابل بازبینی میکند.