بگذارید یک کلاینت OpenVPN از طریق SSH به دیگری برسد بدون باز کردن استخر
client-to-client را خاموش بگذارید، بگذارید هسته یک جریان را عبور دهد و بقیه استخر را بسته نگه دارید. دو قاعده روی سرور و یکی روی مقصد.
یک کلاینت باید به سرویس SSH کلاینت دیگری برسد و بقیه استخر باید به همان اندازه امروز جدا بماند. کلید وسوسهانگیز client-to-client است که دسترسی میان همتاها را یکجا برای همه روشن میکند و تصمیم را به OpenVPN میسپارد نه به هسته. پاسخ باریکتر آن کلید را خاموش نگه میدارد و میگذارد مسیریابی و دیوار آتش خود سرور دقیقاً یک جریان را حمل کنند.
سازوکار از متن قاعده مهمتر است، چون دو رویکرد بسته را در جاهای متفاوتی میگذارند. دانستن اینکه کدام را انتخاب کردهاید هم قاعدهای را توضیح میدهد که انگار کاری نمیکند و هم همتایی را که بدون آن متصل میشود.
client-to-client بسته را به کجا منتقل میکند
وقتی client-to-client روشن است، سرور بسته همتا را بهصورت داخلی عبور میدهد نه اینکه دوباره از دستگاه تونل بیرون بفرستد، پس بسته هرگز به مسیر عبوردهی هسته نمیرسد. این راحت است و همچنین یعنی دیوار آتش شما هرگز جریانی را که باید نظارت کند نمیبیند. گزینه را خاموش بگذارید و سرور بسته را دوباره از همان رابط بیرون میفرستد، که آن را جلوی netfilter قرار میدهد. همان رابط ورود، همان رابط خروج، و زنجیره FORWARD صاحب رأی است.
معاوضه روشن است: یک نقطه سیاست به دست میآورید و کار مسیریابی و عبوردهی را که میانبر برایتان انجام میداد برمیدارید. آن کار برای یک جریان کوچک است و با هر استثنایی که اضافه میکنید بزرگتر میشود. همین حالا استثناها را بشمارید، چون مجموعه قواعد همان جایی است که سیاست میان همتاها واقعاً زندگی میکند.
مسیری که بسته همتا واقعاً طی میکند
فرض کنید سرویس Linux Community OpenVPN 2.6، پردازش TUN در فضای کاربر بهجای DCO، توپولوژی زیرشبکه، tun0 و استخری از 10.44.0.0/24 با کلاینت A روی 10.44.0.21 و کلاینت B روی 10.44.0.37. با توپولوژی زیرشبکه، نشانی و ماسکی که A گرفته است از قبل استخر را پوشش میدهد، پس A بسته را بدون نیاز به مسیر هلداده اضافی به دستگاه تونل میفرستد. مسیر مؤثر روی A را بررسی کنید نه اینکه یکی را فرض کنید.
روی سرور بسته با نشانی B میرسد که نشانی محلی نیست، پس عبور داده میشود. عبوردهی IPv4 باید روشن باشد تا این کار اصلاً رخ دهد، و جستوجوی مسیر باید بسته را دوباره از tun0 بیرون بفرستد. بنابراین دیوار آتش جریانی عبوردادهشده با همان رابط در دو طرف میبیند، و این همان جزئیاتی است که بیشتر مجموعهقواعدها از دست میدهند. اینجا نیازی به ترجمه مبدأ نیست، و سالم نگه داشتن نشانی A همان چیزی است که به B اجازه میدهد قاعده مبتنی بر مبدأ خودش را اعمال کند.
دو قاعده روی سرور، به این ترتیب
سه قاعده کل اجازه را حمل میکنند: عبوردهی، استثنای جفت و دورریز پیشفرض برای جفت تونل. قاعده پذیرش جفت و سرویس را نام میبرد، پس اجازه در استخری که بزرگ میشود دوام میآورد. آن را پیش از هر منع کلی برای ترافیک تونلبهتونل بگذارید، چون اولین تطابق برنده است:
sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i tun0 -o tun0 -s 10.44.0.21 -d 10.44.0.37 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -j DROPاین فرمانها نمونهاند و به سازوکاری تعلق دارند که میزبان شما برای نگهداشتن قواعد به کار میبرد؛ درج در زمان اجرا در راهاندازی بعدی از میان میرود. قاعده حالتدار همان چیزی است که میگذارد پاسخهای B و دستدادن TCP بدون پذیرش دومی و آینهای بازگردند.
شمارندهها را بعداً بررسی کنید نه فهرست قواعد را، چون قاعدهای که هرگز تطابق نمییابد همانند قاعدهای است که کار میکند. اگر شمارندهها صفر بمانند، بسته مسیری را که فکر میکنید نمیرود.
چیزی که B هنوز باید اجازه دهد
B سرویس SSH را اجرا میکند، پس B تصمیم میگیرد چیزی روی نشانی تونل گوش میدهد یا نه و دیوار آتش خود میزبانش مبدأ را میپذیرد یا نه. اجازه شبکه روی سرور اجازهای برای هیچ حسابی روی B نیست، و بررسی کلید میزبان و احراز هویت کاربر همچنان مانند هر جای دیگر اعمال میشود.
نخست حالت مثبت را بیازمایید: یک اتصال SSH تازه از A به نشانی تونل B، پذیرفتهشده با کلید میزبان مورد انتظار. سپس همتای دیگری یا درگاه دیگری را بیازمایید و تأیید کنید که رد میشود، چون اجازهای که بیصدا همه چیز را میپذیرد تا زمانی که مهم شود از اجازهای که کار میکند قابل تفکیک نیست. هر دو نیمه آن آزمون لازم است، و نیمه دوم همان است که مردم از آن میگذرند.
نشانیهای تخصیصیافته، مسیرهای مؤثر روی هر دو کلاینت و قواعد دقیق روی سرور و روی B را ثبت کنید. یک ping موفق به دروازه یا درگاه باز روی سرور هیچیک از اینها را ثابت نمیکند، چون هر دو میتوانند درست باشند در حالی که عبوردهی میان همتاها هنوز مسدود است. آن شمارهها را وقتی تونل بالاست بنویسید، چون نشانیای که کلاینت پس از اتصال دوباره میگیرد ممکن است نشانی دیگری باشد.