دو کلاینت VPN روی یک رایانه: چه چیزی برخورد میکند و چه چیزی کار میکند
دو کلاینت بر سر مسیر پیشفرض، حلکننده نام و درایورهای فیلتر با هم میجنگند. ثبت کنید خروجی در اختیار کدام است، سپس تونل دوم را با یک VM یا netns جدا کنید.
کلاینت دوم شما متصل میشود، منابع کلاینت اول دیگر حل نمیشوند، و تیکت میگوید VPN کاری، VPN شخصی را خراب کرده است. هیچ چیز به معنای نقص خراب نیست: هر دو کلاینت همان کاری را کردند که برایش طراحی شده بودند، و دستگاه فقط یک جدول مسیریابی دارد. برخورد بر سر چهار منبع است که هر کلاینت آنها را متعلق به خود میداند. آنها را به ترتیب بررسی کنید و راهحل معمولاً به یک انتخاب طراحی تبدیل میشود، نه یک تعمیر.
گام 1: پیدا کنید کدام کلاینت صاحب خروجی است
پیش از هر تغییری، تصمیم خروجی فعلی را بخوانید. جستجوی مسیر برای یک نشانی عمومی به شما میگوید بسته اکنون از کدام واسط و کدام گام بعدی استفاده میکند، و این پاسخ این است که چه کسی برده است. آن را با نام واسطهایی که کلاینتها ساختهاند مقایسه کنید، که معمولاً نام محصول یا پروتکل را دارند. اگر جستجو به تونلی اشاره کند که انتظارش را نداشتید، برخورد را یافتهاید.
ip route get 1.1.1.1
ip route show default
route print
برخی کلاینتها مسیر پیشفرض را اصلاً جایگزین نمیکنند؛ دو نیمه اضافه میکنند، یکی برای نیمه پایین فضای نشانی و یکی برای نیمه بالا، که با هم همه چیز را پوشش میدهند. این کار مسیر پیشفرض اصلی را دیدنی نگه میدارد و تعمیر دستی را درست نشان میدهد، در حالی که ترافیک هنوز از تونل خارج میشود. متریک و طول پیشوند را بخوانید، نه فقط وجود یک ورودی پیشفرض.
اگر هر دو کلاینت همان پیشوند را با همان متریک ادعا میکنند، توقف کنید. هسته یکی را انتخاب میکند و دیگری متصل نشان داده میشود در حالی که چیزی حمل نمیکند.
گام 2: حلکننده نام و پیشوندهای همپوشان را بررسی کنید
DNS دومین برخورد است و نشانهای متمایز تولید میکند: نامها شکست میخورند در حالی که نشانیها کار میکنند. هر کلاینت حلکننده خودش را تحمیل میکند و آخرین نویسنده برای پرسوجوهای بعدی برنده میشود. به جای خواندن صفحه تنظیمات کلاینت، از سرویس حلکننده بپرسید برای هر پیوند از چه چیزی استفاده میکند.
resolvectl status
Get-DnsClientServerAddress
dig +short intranet.corp.example
سپس پیشوندهای خصوصیای را که دو شبکه استفاده میکنند مقایسه کنید. اگر هر دو طرف از یک بازه تخصیص دهند، هیچ ترتیبی در سمت کلاینت آن را درست نمیکند، زیرا دستگاه نمیتواند بگوید کدام مقصد 10.0.0.0/8 به کدام تونل تعلق دارد. یک طرف باید شمارهگذاری مجدد یا ترجمه شود، و این گفتگو با صاحبان شبکه است نه تغییر تنظیمات. همپوشانی تنها برخوردی است که پاسخ صادقانه در آن این است که طراحی باید تغییر کند.
اگر پیشوندها همپوشانی دارند، اینجا توقف کنید. همه چیز در ادامه این فهرست فرض میکند که همپوشانی ندارند.
گام 3: الگوی جداسازیای انتخاب کنید که دوام بیاورد
الگوهای قابل اعتماد از اجرای دو کلاینت روی یک جدول مسیریابی پرهیز میکنند. یک کلاینت با سیاست تونل تقسیمشده که به هر دو شبکه خصوصی میرسد سادهترین است، به شرطی که مقصدها همپوشانی نداشته باشند و صاحب سیاست موافق باشد. ماشین مجازی یا فضای نام شبکه گام بعدی است، زیرا هر کدام جدول و حلکننده خودش را میگیرد.
sudo ip netns add vpn2
sudo ip netns exec vpn2 ip link show
sudo ip netns exec vpn2 curl -sI https://intranet.corp.example/
فضای نام همان جداسازی ماشین مجازی را بدون سیستمعامل دوم میدهد، اما لبههای ناهمواری دارد: دستگاه تونل باید به داخل آن منتقل شود و برنامه باید درون آن اجرا شود. یک دستگاه فیزیکی جداگانه اغلب کمشگفتترین گزینه برای یک VPN شخصی در کنار کلاینت کاری مدیریتشده است. روی هم چیدن یک تونل درون تونل دیگر الگوی جداسازی نیست؛ نقطه پایانی درونی باید از طریق تونل بیرونی قابل دسترس بماند و این چیدمان مشکلات MTU و تأخیر را هم روی آن اضافه میکند.
یک الگو انتخاب کنید و دلیلش را بنویسید. آمیختن یک فضای نام برای یک برنامه با تونل تقسیمشده برای بقیه، برخورد اصلی را در شکلی سختتر برای اشکالزدایی باز میسازد.
گام 4: هر دو شبکه را از یک نشست بررسی کنید
یک منبع در هر شبکه خصوصی را از محیطی آزمایش کنید که برنامه واقعاً در آن اجرا میشود، نه از پوسته خودتان اگر برنامه درون یک فضای نام اجرا میشود. واسط خروجی، نشانی حلشده و کد پاسخ را با هم بررسی کنید، زیرا موفقیت در یکی از سه مورد میتواند شکست در بقیه را پنهان کند. پس از راهاندازی مجدد تکرار کنید، زیرا ترتیبی که کلاینتها شروع میشوند تعیین میکند کدام برنده میشود. همین ترتیب است که مردم فراموش میکنند ثبت کنند.
curl -sI https://intranet.corp.example/
curl -sI https://files.personal.example/
ip route get 10.20.30.40
نسخههای کلاینت، واسطها، وضعیت حلکننده و پیشوندهای هر شبکه را ثبت کنید. وقتی کلاینتی بهروزرسانی میشود و رفتار مسیریابیاش تغییر میکند، آن ثبت تفاوت میان تعمیر پنج دقیقهای و بازسازی است. نفر بعدی حافظه شما درباره اینکه کدام تونل اول بالا آمد را شریک نمیشود.
فهرست زمانی کامل است که بتوانید واسط صاحب مسیر پیشفرض، حلکنندهای که هر نام استفاده میکند، الگویی که تونل دوم را جدا میکند و نتیجه یک درخواست برای هر شبکه پس از راهاندازی مجدد را نام ببرید. هر چیزی کمتر از این، تنظیماتی است که امروز تصادفاً کار میکند.