ماسکوراد یا مسیریابی سیاستی: ترافیک LAN از طریق دروازه VPN
یک دروازه لینوکس میتواند منابع LAN را پشت نشانی تونل خود پنهان کند یا آنها را دستنخورده مسیریابی کند. انتخاب به این بستگی دارد که طرف دور متعلق به کیست و مسیر بازگشتش چیست.
قرار دادن یک LAN کامل پشت تونل VPN بخش آسان است؛ تصمیمگیری درباره اینکه طرف دور این کلاینتها را چگونه میبیند آسان نیست. ماسکوراد هر منبع LAN را به نشانی تونل دروازه بازنویسی میکند، بنابراین طرف دور به یک همتا پاسخ میدهد. مسیریابی سیاستی نشانیهای اصلی را حفظ میکند و میخواهد طرف دور بداند چگونه به آنها برسد. هیچیک پیشفرض نیست؛ انتخاب از این ناشی میشود که طرف دور مال کیست و آیا هویت هر دستگاه اهمیت دارد.
دو طرح چیزهای متفاوتی را وعده میدهند
ماسکوراد LAN را به یک میزبان مرئی کاهش میدهد: دروازه. شبکه دور به همان یک نشانی پاسخ میدهد و دروازه پاسخها را به کلاینتی که جریان را آغاز کرده بازمیگرداند. در طرف دور به هیچ مسیری برای پیشوندهای خصوصی شما نیازی نیست و به همین دلیل این طرح در برابر ارائهدهندهای که از حمل آنها سر باز میزند دوام میآورد. دروازه همچنین منبع هر اتصال میشود، بنابراین طرف دور نمیتواند دو کلاینت را از هم تشخیص دهد.
مسیریابی سیاستی نشانی هر کلاینت را دستنخورده نگه میدارد. شبکه دور منبع واقعی را میبیند و میتواند آن را ثبت کند، قاعدهای برای هر میزبان اعمال کند یا پاسخ را مستقیماً به همان نشانی بفرستد. این دید همان هدف اصلی است و یک تعهد به همراه دارد: طرف دور باید مسیری برای پیشوند LAN داشته باشد که از تونل بازگردد. پیش از فعال کردن قاعده آن مسیر را برنامهریزی کنید، چون تونل در هر حال بالا میآید و فقط پاسخها غایب خواهند بود.
حالتهای شکست به اندازه وعدهها متفاوتاند. نبود قاعده ماسکوراد بستههایی تولید میکند که با منابع خصوصی خارج میشوند و هرگز بازنمیگردند. نبود مسیر بازگشت همان نشانه را در مسیریابی سیاستی ایجاد میکند، اما اصلاح آن به روتر دور تعلق دارد نه به دروازه.
ماسکوراد: یک همتا در طرف دور
مسیر ماسکوراد ترتیبی دارد که اهمیت دارد. ابتدا باید ارسال فعال باشد تا هر قاعده NAT کاری مفید انجام دهد، جدول فیلتر باید عبور را در هر دو جهت مجاز کند و تنها پس از آن ترجمه روی رابط تونل اعمال میشود.
sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i eth1 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
کلاینتها هنوز به مسیری به سمت دروازه نیاز دارند. یا دروازه روتر پیشفرض آنهاست، یا مسیری مشخص برای پیشوند دور حمل میکنند؛ اگر روتری جداگانه پیشفرض بماند، آن روتر به مسیر ثابتی برای مقصدهای تونل نیاز دارد، وگرنه بسته پیش از آنکه دروازه آن را ببیند به گام اشتباه میرود.
DNS تصمیمی جداگانه است. یک حلکننده در طرف دور تنها زمانی پاسخ میدهد که پاسخش بتواند به کلاینت بازگردد. زیر ماسکوراد، درخواست به نظر میرسد از دروازه میآید، پس مسیر بازگشت حلکننده از قبل تأمین است؛ زیر مسیریابی سیاستی، حلکننده همان مسیر بازگشتی را لازم دارد که هر سرویس دور دیگری.
مسیریابی سیاستی: منبع را نگه دار، مسیر بازگشت بیفزا
مسیریابی سیاستی با یک جدول و قاعدهای که آن را برمیگزیند آغاز میشود. ترافیکی که از رابط LAN وارد میشود به جدولی اختصاصی فرستاده میشود و آن جدول مسیر پیشفرضی از میان تونل حمل میکند. جدول اصلی دستنخورده میماند، بنابراین ترافیکی که خود دروازه تولید میکند میتواند مسیر دیگری را دنبال کند.
ip rule add iif eth1 table vpn
ip route add default dev tun0 table vpn
سپس طرف دور باید پیشوند LAN را از تونل بازمسیریابی کند. این تنظیمی روی روتر دور است، نه روی این دروازه. دروازه همچنین باید پاسخهایی را بپذیرد که روی رابطی متفاوت از آنچه جدول اصلی پیشبینی میکند میرسند؛ فیلتر سست مسیر معکوس (rp_filter روی 2 تنظیمشده) تنظیم معمول است وقتی حالت سختگیرانه آن بستهها را دور میریزد.
وقتی دو تونل فعال است، هر جریان را هنگام ورود برچسب بزن و بگذار برچسب جدول را انتخاب کند. قاعدهای که فقط به رابط ورودی نگاه میکند ترافیک هر دو تونل را به یک جدول میفرستد، بنابراین تونل دوم جریانها را از اولی میدزدد. آن برچسب را با اتصالی بیازما که از اتصال دوباره جان سالم به در میبرد، چون سیاست ترکیبی همانجا خود را نشان میدهد.
بر اساس مالکیت و بر اساس آنچه طرف دور ثبت میکند تصمیم بگیر
اگر تونل نزد ارائهدهنده تمام میشود، از ماسکوراد استفاده کن. آن اپراتور بازههای خصوصی LAN تو را مسیریابی نخواهد کرد و دلیلی ندارد کلاینتهای جداگانه پشت دروازهات را از هم تشخیص دهد. یک همتای مرئی تنها الگویی است که سیاستش پشتیبانی میکند، پس همان را به او بده و ترجمه را در لبه خودت نگه دار. ارائهدهنده یک همتا میبیند، که دقیقاً همان چیزی است که سیاستش انتظار دارد، و کلاینتهایت همان هویت واحد را به ارث میبرند.
اگر هر دو سر مال تو باشد و سرویسهای دور بر اساس نشانی مبدأ عمل کنند، مسیریابی سیاستی مسیر اضافیاش را به دست میآورد. آنگاه قواعد دیوار آتش، دسترسی هر کاربر و گزارشهای حسابرسی میتوانند کلاینتها را از هم تمیز دهند. اگر طرف دور فقط به دسترسیپذیری نیاز دارد، ماسکوراد سادهتر است و یک دسته خطای مسیر بازگشت را از میان برمیدارد.
طرحهای ترکیبی عادی هستند: مسیریابی سیاستی درون شبکه خودت، ماسکوراد در لبه ارائهدهنده. مهم این است که بنویسی کدام گام ترجمه میکند و کدام گام مسیریابی، چون قاعده NAT تصادفی که برای یک کلاینت افزوده شود منبع را برای هر کلاینت در همان زنجیره پنهان میکند.
از یک کلاینت بررسی کن، سپس از کلاینت دوم
آزمایش را همانجا اجرا کن که ترافیک آغاز میشود. مسیری را که میزبان استفاده میکند بررسی کن، ببین بسته روی رابط تونل ظاهر میشود و برای ترجمه conntrack را بررسی کن. این توالی ثابت میکند بسته مسیر مقصود را گرفته است، نه اینکه فقط جایی رسیده باشد.
آزمایش را پس از اتصال دوباره تکرار کن. قاعده ماسکوراد که رابط را نام میبرد از نشانی تونل جدید جان سالم به در میبرد؛ قاعدهای که نشانی کهنه را نام میبرد نه. سپس یک میزبان دوم LAN را بیازما، چون طرحی که روی یک ماشین کار میکند غالباً به مسیر خود آن ماشین وابسته است نه به سیاست دروازه.
الگوی برگزیده، منبع ترجمهشده یا حفظشده و صاحب مسیر بازگشت را در یادداشتهای دروازه بنویس. وگرنه نفر بعدی که کلاینت یا تونلی اضافه میکند حدس میزند، و حدس همان راهی است که یک چیدمان کارآمد LAN به VPN به چیدمانی ناقص تبدیل میشود.