یک کلاینت ساده برای pfSense Captive Portal

اینم یه تجربه پراکنده دیگه!

این ماه‌ها خیلی شلوغه و من نرسیدم به وبلاگ سر بزنم و این پست قرار نیست خیلی بلند باشه. من مدت‌هاست که هرجا میرم pfsense رو به عنوان ورتر و فایروال اونجا توصیه میکنم و خب همه جا هم از استفاده ازش راضی بودن. کل این پست در مورد captive portal هست.

یکی از ویژگی‌های این محصول استفاده می‌کنیم captive portal هست. کاری که میکنه اینه که اولین چیزی که شما توی بروزر میزنی رو redirect میکنه به صفحه لاگین. حالا یکی از چیزایی که من توی محصولاتی مثل cyberoam دیدم که یه کلاینت دارن واسه لاگین کردن توی captive portal هست. من هم دچار این مشکل بودم که چون معمولا tab های زیادی توی بروزر باز دارم همه صفحات redirect میشه و خیلی مدیریتش سخت میشه. حالا من هم یه کلاینت با پایتون توسعه دادم که خیلی ساده این کار رو انجام میده. اون رو هم توی github گذاشتم که اگه کسی خواست استفاده کنه. امیدوارم این کلاینت کمک کنه که آدم‌های بیشتری از محصولات متن باز استفاده کنن.

همین!

معماری نرم‌افزار

معماری نرم‌افزار براساس پروژه‌های متن‌باز

اینم یه تجربه پراکنده دیگه!

این روزها متاسفانه خیلی شلوغ بوده و من اونقدر درگیر بودم که نتونستم به تعهد شخصیم یعنی نوشتن دو متن در هفته و در بدترین حالت یک متن در هفته پایبند باشم. اما بالاخره امروز گفتم که بنویسم.

سوال اصلی که قرار تو حوزه معماری نرم‌افزار بررسی بشه، اینه که اگه من بخواهم یه پروژه رو شروع کنم چطور می‌تونم از راه‌حلهای متن‌باز به نفع خودم استفاده کنم. به عنوان مثال در آخرین پروژه‌ای که انجام دادم اگه پروژه رو بدون استفاده از راه‌حل‌های متن باز پیش می‌بردم قطعا دو برابر مقدار فعلی زمان و هزینه می‌برد و اشک من رو هم در طی خودش در ‌می‌آورد.

اما به نظر من برای اینکه بتونید از راه‌حل‌های متن‌باز به خوبی استفاده کنید باید یه سری ویژگی رفتاری در خودتون ایجاد کنید تا بتونید انتخاب کنید:

  • اولا از لینوکس و یونیکس نترسید! اکثر راه‌حلهای متن باز در این بستر وجود دارند. از نظر من هزینه یادگیری و کار با این بسترها بسیار کم هزینه‌تر از توسعه راه‌حل‌هایی که هم اکنون بصورت آماده روی آنها وجود دارد.
  • از یادگیری نترسید: افزایش قدرت یادگیری باعث میشه که شما به راحتی در مواجه با یک راه‌حل جدید با اون کنار بیاید و بتونید با سرعت از اون استفاده کنید.
  • تعصب رو زبان و پلتفرم برنامه نویسی را کنار بگذارید: درسته که هر تیم تنها می‌تونه بصورت حرفه‌ای رو یک یا حداکثر دو زبان تسلط داشته باشه و متمرکز کار کنه اما استفاده از راه‌حل‌های آماده معمولا می‌طلبه که شما بتونید راه‌حل‌هایی با زبان‌های متفاوت رو مورد استفاده قرار داده و باهاشون سر و کله بزنید. وقتی از قید یک زبان خارج بشید قطعا موقعیت‌های جدید روبروی شما باز خواهد شد
  • لیستی از راه‌حل‌های متن باز داشته باشید: سعی کنید که لیستی از راه‌حلهای متن باز داشته باشید تا هنگام نیاز بتونید با استفاده از اونها تصمیم بگیرید. یک بخش از وبگردی روزانه رو به معمولا به آشنا شدن با راه‌حل‌های متفاوتی اختصاص بدید و راه‌حلها رو بصورت خلاصه یه جا مستند کنید چون ممکنه بعدا به دردتون بخوره

حالا یه نمونه موردی از کار خودم رو بهتون می‌گم:

صورت مساله پروژه اینه که رو UDP یه سری پکت دریافت کنه و بعد از محاسبات نتیجه رو برای یه سمت دیگه روی TCP ارسال کنه. مهم اینه که با حداقل delay و حداکثر کارایی این کار رو انجام بده. همچنین در پس زمینه اطلاعات رو روی DB هم ذخیره کنه. زبان برنامه نویسی در این حال c++ بود. حالا چیزای یکه من پیدا کردم ایناست:

  • یه راه حل خیلی خوب برای مدیریت سوکت سرور و همزمانی Boost هست که بسیار خوبه و خیلی عالی کانکشن ها و همزمانی و این چیزا رو مدیریت می‌کنه.
  • برای پایگاه داده از SOCI استفاده کردم
  • برای ThreadPool از یک ThreadPool متن باز که الان یادم نمی‌یاد آدرس گیت‌هابش رو دانلود کردم
  • برای مدیریت پارامترهای خط‌فرمان باز هم از Boost استفاده کردم

این باعث شد که من کمتر از نصف زمان لازم برای توسعه این نرم‌افزار زمان صرف کنم.

همین!

معرفی یک کتاب خوب: معماری نرم افزارهای متن باز

اینم یه تجربه پراکنده دیگه!

قبل از همه چیز سال نو شما مبارک باشه و سال خوب و خوشی داشته باشید

همیشه واسه من این سوال وجود داشته که چیزای مختلف چطور کار میکنن. این سوال باعث شده که برم و دنبال این موضوع باشم. در مورد نرم‌افزارهای متن باز هم همین ماجرا وجود داره. از اونجایی که من دوست داشتم بودم که پروژه‌های متن‌باز چطور کار میکنن گشتم و دیدم که یه کتاب وجود داره که توش پروژه‌های متن‌باز زیادی بررسی شده و معماری آونها خیلی خوب آورده شده. من تقریبا دوتا کتاب از این مجموعه رو خوندم و لذت بردم. کتاب سوم هم به نظر میرسه که اخیرا منتشر شده. شما رو هم به خوندن این کتاب دعوت میکنم.

لینک کتاب

همین!

تنظیمات dynamic dns در pfsense

اینم یه تجربه پراکنده دیگه!

خیلی وقته که از pfSense ننوشتم و حالا وقت خوبیه که یه پست کوتاه ولی کاربردی ازش بنویسم. کلا سرویس dns سعی میکنه که اسم یه سایت رو به یه آدرس ip تبدیل کنه. اما این تبدیل معمولا ایستا است یعنی با تعویض آی پی یه سایت کار سختیه و معمولا مدت قابل توجهی طول میکشه که آدرسها آپدیت بشن! حالا یه نوع خاص از dns وجود داره که میگه آدرس اولا به سهولت و دوما به سرعت تغییر میکنه پس اگه آدرس عوض بشه به سرعت این تغییرات اعمال میشه! توضیحات این قسمت فنی نیست فقط قرار به صورت کلی به شما ایده بده که این سرویس چطوری کار میکنه.

بخشای این سیستم‌ها عبارتند از

  1. ‍یک سرور dns عادی
  2. یک واسط وب برای تعریف آدرس سایت
  3. یک واسط وب برای آپدیت سریع آدرس ip

استفاده این سرویس هم برای اینه که اونهایی که آدرس ip ایستا ندارند بتونن یه دامنه به خودشون اختصاص بدن و بتونن از بیرون به روتر و شبکه داخلیشون دسترسی داشته باشن!

خب یکی از این سرویس ها https://freedns.afraid.org/ هست یه چنین سرویسی ارائه میکنه. حالا بعد از گرفتن آدرس از این سایت اگه بخوایم این سیستم رو روی pfsense تنظیم کنیم روندش خیلی ساده است!

  1. ثبت دامنه پویا در سرویس freedns.afraid.org
  2. رفتن به منوی services -> dynamic dns
    Menu_031
  3. اضافه کردن یک مورد جدید
    Selection_032
  4. وارد کردن اطلاعات دامنه
    Selection_033
  5. گرفتن اطلاعات از سایت freedns
    Selection_034

    Selection_036

همین امیدوارم به درد خورده باشه!

همه ایده‌های من: کسب و کار مبتنی بر pfSense

اینم یه تجربه پراکنده دیگه!

همینطور که گفته بودم میخوام در مورد ایده‌هام بنویسم. ایده اصلی اینجا اینه که چطور میشه حول یک محصول بسیار باکیفیت متن باز به نام pfSense کسب و کار درست کرد. من سعی میکنم اول یه مقدمه کوچک در مورد این سیستم بدم و بعدش کسب و کارها رو نام ببرم و اونها رو بصورت مختصر بررسی کنم.

با توجه به تجربه سه ساله کار با pfSense میدونم که بسیار خوش ساخت طراحی شده و با ثبات وکیفیت بسیار خوبی به کار  خودش ادامه میده. نیازمندی‌های سخت افزاری قابل قبولی داره و اون کاری که باید انجام بده رو به درستی انجام میده . باید اضافه کنم که شرکت‌های فعال در زمینه امنیت شبکه از این محصول به عنوان پایه محصولات بومیشون که اکثرا ورتر، فایروال و utm هست استفاده کردن. اما به نظر من این rebranding و توسعه، نیاز بازاری هست که شامل بخش دولتی و دستگاه‌های حساس میشه. این بازار معمولا بسیار پر رقابت هست و پول‌های بسیاری خوبی توش جابجا میشه پس جزابه اما این بازار دوتا ایراد داره اولا بسیار کوچک هست و دوما بزرگ نمیشه پس از نظر من واسه راه انداختن کسب و کار که بشه startup به درد نمیخوره. پس این ایده‌هایی که اینجا مطرح میشه هدفش بازار هرچه نزدیکتر به خونه مردم هست که تعدادش بزرگ باشه و بشه بصورت انبوه فروختش. ایده‌ها اینجا لیست شده:

  1. فروش سرویس نصب و راه‌اندازی pfSense: یعنی شما برای مشتری نهایی سیستم و پیکربندی کنی و راه‌اندازی کنی. این کار خوبه اما به دلیل محدود بودن نیروی متخصص pfSense این ایده که معمولا ساده‌ترین ایده استفاده از سیستم‌های متن باز هست خیلی جذاب نیست.
  2. فروش appliance که بصورت پیشفرض pfSense روی اونها نصب شده: نمونه این سخت افزارها اینجا و اینجا پیدا میشه. این کار بسیار خوب میتونه باشه چون نیاز نیروی انسانی کمی داره و شما خدماتی ارائه نمیدی و عملا یه سخت افزار میفروشی. ایراد این ایده اینه که در دنیای appliance ها معمولا از روترها و فایروال‌های cisco و یا mikrotik استفاده میشه. مهمترین دلیل این استفاده هم وجود آموزشهای تخصصی برای این روترها و آشنایی مدیران شبکه با این روترها هست. دومین مشکل این سیستم هم وارداته که خب اگه کسی از این کارها نکرده باشه بسیار میتونه به مشکل بر بخوره. همچنین قیمت تمام شده این محصول تقریبا هم سطح رقبا است و عملا رقبا به علت سابقه بیشتر برنده میشن. اما اگه کسی بتونه این مشکلات رو حل کنه که حل ناشدنی نیست بسیار میتونه موفق باشه.
  3. راه‌اندازی hotspot مبتنی بر pfsense و فروش اینترنت در سطح شهر: برای بسیاری از ما اتفاق افتاده که وسط خیابون باشیم و واقعا نیاز به اینترنت با کیفیت داشته باشیم. اخیرا با اومدا نسل سوم و چهارم موبایل این نیاز تا حدی مرتفع شده اما هنوز قیمت گران اینترنت نسل سه و  چهار جا رو برای این کار باز میگذاره. حالا شما به راحتی با config کردن pfsense اون رو به یه hotspot بسیار قوی تبدیل میکنی و با فروش اکانت اینترنت سود میبری. این کار تقریبا عملی ترین کار به حساب میاد. ممکله از نظر قانونی مشکلاتی وجود داشته باشه اما چیز خاصی به نظر نمیرسه. نیازمند یه سیستم اکانت ساختن و فروش اکانت هست که من برای حل این مشکل فاز اول رو نصب و راه‌اندازی این ایده در کنار کافی نت ها میدونم. یعنی کافی نت‌ها عامل فروش هستند و شما سیستم پورسانت اونها رو میدی. ایراد این ایده نیاز هماهنگی و همکاری با بخش‌های زیادی هست. همچنین سرمایه گذاری اولیه زیادی رو هم میطلبه. همچنین بازارش یکم نا آشناست یعنی اینکه معمولم نیست که واقعا این نیاز وجود داره یا نه.
  4. خاص منظوره کردن این سیستم مخصوص کافی شاپ‌ها، رستوران‌ها و هتل‌ها: الان وضعیت سرویس اینرنت مجانی کافی‌شاپ ها و رستوران‌ها خیلی داغونه در این حد که من تا بحال نتونستم از اینترنتشون به درستی استفاده کنم. واسه اونها ممکنه ارائه خدمات قابل اعتماد ارزشمند باشه. این کار هم بسیار به عملیاتی بودن نزدیکه اما مشکلش نیاز به سرمایه گذاری بالا و پشتیبانی زیاد هست
  5. راه اندازی سیستم accounting ساده روی این سیستم و استفاده از اشتراکی از اینترنت در ساختمان‌های بزرگ یا شرکت‌ها. در این ساختمان‌ها معمولا آدم‌هایی هستن که نمیخوان اینترنت داشته باشن و دوست دارن به اندازه مصرفشون پول بدن که میشه با استفاده از pfSense پیاده‌سازی شه. همچنین در شرکت‌ها معمولا حجم افراد محدود بوده و نباید بیشتر از یک حد در روز از اینترنت استفاده کنن. که با این سیستم قابل پیاده‌سازی هست.

این‌های به نظرم عملیاتی‌ترین ایده‌ها بود اما به علت تعدد پکیجهای این سیستم عملامیشه کارهای بسیار دیگه‌ای ازش استفاده کرد. مثلا استفاده به عنوان loadbalancer بین چند اینترنت، استفاده به عنوان cache سرور با استفاده از squid. اما این ایده‌ها خیلی خام هستن ونیاز به پختن زیادی دارن.

همین

اندازه گیری ترافیک مصرفی کاربران در pfsense

اینم یه تجربه پراکنده دیگه!

دوستان توی کامنتا سوال پرسیده بودن که چطور میشه پهنای باند مصرفی کاربران رو اندازه گرفت. من سعی میکنم بصورت خلاصه توضیح بدم که این روند چطوره

پیش‌نیازها

پیش‌نیازها به شرح زی هست:

  1. مهمترین پیش‌نیاز برای راه‌اندازی این سیستم یه کامپیوتر هست که بتونه بصورت ۲۴ ساعته روشن باشه
  2. دومین ویژگی اینه که اون کامپیوتر یا دوتا کارت شبکه داشته باشه یا اونقدر قوی باشه که بشه روش ماشین مجازی اجرا کرد
  3. حداقل هارد مورد نیاز ۱ گیگ هست
  4. حداقل رم مورد نیاز ۲۵۶ مگ هست

نصب pfSense

روند اجرای مرحله به مرحله به صورت زیره:

  1. اول تنظیمات مودمتون رو عوض کنید و dhcp اون رو خاموش کنید. فرض میکنم که آی پی مودم ۱۹۲٫۱۶۸٫۱٫۱/۲۴ هست. البته برای راحت‌تر بودن میتونید تنظیمات رو ۱۹۲٫۱۶۸٫۱٫۱/۱۶ بدید.
  2. فرض میکنم که رنج آدرس جدیدی که قرار pfsense به کاربرها بده ۱۹۲٫۱۶۸٫۲٫۰/۲۴ هست.
  3. آدرس کامپیوتری که برای پیکربندی قراره استفاده بشه رو ۱۹۲٫۱۶۸٫۲٫۵۰/۱۶ بدید که همزمان بتونید هم مودم رو ببینید هم pfsense
  4. حالا شروع به نصب pfsense روی سیستم اصلی کنید. نصب خیلی راحته در حد next زدن فقط حواستون باشه که در هنگام نصب اطلاعات هاردتون رو از دست ندید.
  5. مهمترین قسمت بعد از نصب انتخاب درست کارتهای شبکه است. یعنی اینکه کدوم کارت شبکه به عنوان LAN و کدوم کارت شبکه به عنوان WAN استفاده بشه. منظور از WAN اون کارت شبکه است که قراره ازش اینترنت بگیره و منظور از LAN هم شبکه داخلیه. اینجا فرض من اینه که هردوی اونها به یک سوئیچ وصل میشن پس فقط مهمه که درست کانفیگ بشه
  6. قدم بعد تخصیص IP به کارت شبکه wan هست. از توی منویی که نشون داده شده گزینه ۲ رو انتخاب کنید و با انتخاب wan اول گرفتن IP رو از DHCP غیر فعال کنید آدرس اون رو مثلا مقدار ۱۹۲٫۱۶۸٫۱٫۱۰ بدید. مقدار subnet mask رو هم ۲۴ بدید و آدرس gateway رو هم مقدار ۱۹۲٫۱۶۸٫۱٫۱ که همون آدرس مودم هست بدید
    منوی اصلی pfsense
    تنظیم wan
  1. قدم بعد آدرس دادن به LAN هست که در این مرحله مثل مرحله قبل عمل میکنید و آدرس رو ۱۹۲٫۱۶۸٫۲٫۱ میدید با subnet mask به مقدار ۲۴ بدون gateway

بعد از این عمل پیکربندی از طریق وب قابل انجامه و آدرس اون https://192.168.2.1 هست.

اندازه گیری ترافیک

بعد از راه‌اندازی نوبت به اندازه گیری ترافیک هست. راه‌های مختلفی وجود داره اما من ساده ترین راه رو توضیح میدم. البته اگه عمری بود راه‌های دیگه رو هم توضیح میدم.

  1. مرحله اول پیکربندی DHCP هست. برای اینکار به منوی services->dhcp server میریم
    03_pfsense_dhcp_server
  2. روی lan کلیک میکنیم
  3. اگه dhcp غیر فعاله اون رو فعال میکنیم.
    04_pfsense_dhcp_server_config
  4. رنج آی پی رو درست میکنیم
  5. و مهمتر از همه برای کسایی که توی خونه هستن توی قسمت DHCP static mapping یه entry اضافه میکنیم و به mac اونها یه آی پی اختصاص میدیم
    04_pfsense_dhcp_server_static
  6. بعد از اینکار میریم به منوی system->packages
  7. به بخش available packages میریم
  8. در این بخش پکیج bandwidthd رو نصب میکنیم
  9. بعد از نصب توی منو services->bandwidthd میریم و این پکیج رو برای LAN فعال میکنیم.
  10. دوتا گزینه output_cdf و recover_cdf رو تیک میزنیم که اطلاعات با reset شدن سیستم از دست نره
    05_pfsense_bandwidthd
  11. تغییرات رو ذخیره میکنیم
  12. بایستی بگذارید سیستم یه چند دقیقه‌ای کار کنه. بعد از قسمت access bandwidthd میتونید نمودارهای ساعتی هفتگی و ماهیانه رو ببینید.

با این کار بصورت ساده میتونید ببینید هر کسی در ساعت گذشته، هفته گذشته و ماه گذشته حتی سال گذشته چقدر مصرف داشته.

همین

لذت برنامه نویسی پروتکل های یک کلاغ چل کلاغ

اینم یه تجربه پراکنده دیگه!

همیشه در سیستم‌هایی که بصورت توزیع شده اجرا میشن و نیاز هست که یک سری اطلاعات رو اولا با هم دیگه توافق کنن و دوما همه به اون اطلاعات دسترسی داشته باشن و سوما اینکه بتونن اون اطلاعات رو آپدیت کنن. این عملیات رو میشه بصورت‌ها مختلف انجام داد. ایده‌هایی که واقعا پیاده سازی شدن همون‌هایی هستن که به ذهن من و شما میرسن. میشه از یه دیتابیس برای اینکار استفاده کرد. میشه اطلاعات رو بوسیله یک سرویس مشترک در اختیار بقیه گذاشت. این دوتا روش بزرگترین ایرادشون اینه که اگه از دسترس خارج بشن معمولا هیچ کس دیگه‌ای به این اطلاعات که معمولا حیاتی هم هستن دسترسی نداره. خب راه حل بعدی اینه که سرویس‌های توزیع شده یا کلاستر شده استفاده کرد که خب یه راه‌حل هایی مثل zookeeper این راهبرد رو انتخاب کردن. راهبرد سوم برای این مساله استفاده از روشهای نقطه به نقطه یا peer-to-peer هست که توی این روش‌ها همه نودها همه اطلاعات رو دارن و در صورتی که یکی از دست بره بقیه این اطلاعات رو به تازه واردهای اطلاع رسانی میکنن. خوبی این روشها معمولا اینه که مقاومتشون نسبت به از دست رفتن نودهای زیاد بالاست.

یکی از مهمترین پروتکل‌هایی که توی این زمینه استفاده میشه به اصطلاح پروتکل‌های شایعه است. بدین صورت که هر نودی وقتی شایعه‌ای رو میشنوه بصورتی انتخابی اون شایعه‌ به چندتا از نودهای همسایش انتقال میده. این رفتار، رفتار شیوع پیدا کردن بیماری‌های مسری هم هست. مقالات زیادی در این زمینه به چاپ رسیده ولی دوتا از پیاده‌سازی‌های متن بازی که من میشناسم etcd و serf هست. هر دوی این‌ها براساس «یک کلاغ چل کلاغ» عمل می‌کنند و بصورت کاملا توزیع شده به کارشون ادامه میدن.

همین.

تقسیم پهنای باند بین کاربران فعال در pfSense

اینم یه تجربه پراکنده دیگه!

یکی از مشکلاتی که همیشه در محل‌هایی که من فعالیت داشتن وجود داشته اینه که چطور پهنای باند رو بین تمام استفاده کنندگان تقسیم کرد بصورتی که اگه ۱۰ کاربر داریم که در حال حاضر ۲ تاشون فعالن، پهنای باند بین دو نفر تقسیم بشه و اگه به عنوان مثال ۳ نفر فعال باشن پهنای باند بین اون ۵ نفر تقسیم بشه. مزایای این اتفاق بسیاره که اگه عمری بود در موردش مینویسم. سعی میکنم مراحل کار رو اینجا با مثال رو شکل توضیح بدم:

  1. ابتدا باید به منوی firewall -> traffic shaper -> limiter رفته و یه limiter جدید میسازیم
    1.0
  2. سپس اسم limiter رو برای راحتی کار آینده download میگذاریم و اون رو فعال میکنیم
    1.1
  3. سپس تو قسمت bandwidth یک گزینه جدید اضافه می‌کنیم
    1.2
  4. بعد توی قسمت bandwidth حد دانلود رو وارد می‌کنیم. و ذخیره می‌کنیم
    1.3
  5. توی صفحه بعد گزینه اضافه کردن یک صف جدید رو انتخاب می‌کنیم
    2.0
  6. توی این قسمت هم تنها یه اسم وارد کنید که بعدا بتونید به یاد بیاردش و مثلا download_lan باشه و نحوه انتخاب رو براساس آدرس مقصد انتخاب کنید و تنظیمات رو ذخیره کنید
    2.1
  7. حالا بایستی همین کار برای آپلود هم انجام بشه پس یه limiter جدید ساخته میشه
    3.0
  8. یه اسم برای آپلود انتخاب کنید و تنظیمات رو ذخیره کنید
    3.1
  9. حال دوباره توی قسمت bandwidth یک گزینه جدید اضافه کنید
    3.2
  10. پهنای باند آپلود رو اینجا وارد کنید و تغییرات رو ذخیره کنید
    3.3
  11. دوباره برای این قسمت هم یک صف اضافه می‌کنیم
    4.0
  12. توی این قسمت هم تنها یه اسم وارد کنید که بعدا بتونید به یاد بیاردش و مثلا upload_lan باشه و نحوه انتخاب رو براساس آدرس مبدا انتخاب کنید و تنظیمات رو ذخیره کنید
    4.1
  13. حالا به بخش قوانین مسیریابی برید و قانون اصلی رو که اجازه میده ترافیک رد بشه ویرایش کنید
    5.0
  14. به بخش In/Out برید و روی گزینه advance کلیک کنید
    5.1
  15. و برای خروجی از صف upload_lan و برای ورودی از صف download_lan استفاده کنید.
    5.2

با این مراحل شما یه اینترنت خواهید داشت که پهنای باندش به نسبت کاربرهای فعال تقسیم میشه.

منبع: اینجا

استفاده از pfsense در محیط تجاری/عملیات

اینم یه تجربه پراکنده دیگه

من تقریبا دو سال میشه که در محل کار و خونه از pfSense به عنوان روتر و فایروال استفاده کردم. حالا میخواستم یکم در مورد درستی یا غلطی استفاده از یه روتر متن باز تو محیط عملیاتی بگم. شاید به درد کسی بخوره و توی تصمیم گیری کمکش کنه.

اگه به شخص من باشه، من در برای کسب و کارهای کوچک و متوسط پیشنهاد میکنم که از pfSense استفاده بشه. چون کیفیت این محصول خوبه و کنترل کافی روی پهنای باند و شبکه رو فراهم میکنه و نگهداریش سربار اضافی برای اون کسب و کار به همراه نداره. هزینه راه‌اندازی به نسبت  کمی هم داره تنها چیزایی که میخواد یه کامپیوتر قدیمی که دارای حداقل دوتا کارت شبکه باشه هست.

اما برای شرکت‌های بزرگ با نیازهای پیچیده جرات نمیکنم که این سیستم رو پیشنهاد بدم چون نیاز به علم زیاد در مورد این فایروال هست که خب معمولا این علم وجود نداره و خب کار یکم سخت میشه. اما سناریوهایی رو هم دیدم که در دنیا شرکت‌های بزرگ اون رو پیاده سازی کردن و موفق هم بودن.

از نظر ویژگی‌ها هم کارهای بسیار خوب زیادی میشه باهاش انجام داد. که من لیست کارهایی که باهاش کردم رو مینویسم:

  • سر هم کردن دوتا اینترنت برای افزایش پهنای باند و افزایش ثبات
  • راه اندازی یک captive portal برای احراز هویت کاربران برای دسترسی به اینترنت
  • استفاده از ویژگی NAT برای تخصیص پورتهایی به یکی از سیستم‌های داخلی
  • پشتیبانی از سیستم تلفنی مبتنی بر IP به نام Asterisk
  • پشتیبانی از محدود کردن پهنای باند و ترافیک کاربران
  • محدود کردن دسترسی عده‌ای یا گروهی از کاربران به اینترنت
  • پشتیبانی از squid‌به منظور افزایش کارایی استفاده از اینترنت
  • امکان بررسی ترافیک عبوری و ویروسیابی آن
  • امکان اعمال سیاستهای تضمین کیفیت

این کارهایی که من انجام دادم اکثرا توسط پکیج‌های جانبی این سیستم انجام شده و اگه عمری بود سناریوی اجرای تک تک این قسمت‌ها رو میگم

همین!

اصول ۱۲ گانه نرم‌افزارهای مدرن!

اینم یه تجربه پراکنده دیگه

این مطلب رو من بخاطر اینکه این اصول در طراحی نرم‌افزارهایی که من تاکنون دیدم رعایت نشده مینویسم پس امیدوارم اول خودم و شاید هم دیگران بهش عمل کنیم.

در مجموع این اصول برای طراحی «نرم‌افزار به عنوان سرویس» مورد استفاده قرار میگیره که:

  •  از فرمت‌های declarative برای روند اتوماتیک نصب استفاده می‌کند به منظور کاهش زمان و هزینه لازم برای پیوستن توسعه دهندگان جدید
  • دارای ارتباط دقیق و تمیز با سیستم عامل به منظور بیشینه کردن قابلیت حمل میان محیط‌های اجرایی مختلف
  • برای اجرا روی سیستم‌های مبتنی بر محاسبات ابری مناسب هستند.
  • حداقل تفاوت میان محیط عملیاتی و محیط آزمایش را دارا هستند
  • قابلیت افزایش کارایی را بدون تغییر در ابزار، ساختار و نحوه اجرا را دارا هستند

این دوازده اصل از این قرارند

  1. داشتن یک منبع کد و چندین deploy: هر نرم افزار در یک منبع کد  همانند git، mercurial و subversion وجود دارد و یک ارتباط یک به یک میان نرم‌افزارهای و منبع کد وجود دارد. بدین منظور که اگر چند منبع کد وجود دارد، اینها هریک یک سیستم نرم‌افزاری مجزا هستند
  2. تمامی وابستگی‌های نرم افزار بصورت صریحی در تعریف نرم‌افزار وجود داشته و یک نرم‌افزار هیچ‌گاه به دنبال نیازمندی‌های اجرایی خود بصورت global در سیستم عامل اجرایی خود نیست
  3. تمامی اطلاعات مرتبط با پیکربندی در متغیرهای محیطی ذخیره می شوند از قبیل نحوه ارتباط با پایگاه داده، یوزر نیم و پسورد ارتباط با سرویسهای خارجی و …
  4. سرویسهای پشتیبان سرویسهایی هستند که نرم‌افزار آنها از طریق شبکه مورد استفاده قرار می‌دهد همانند سوریس پایگاه داده، سرویس ارسال ایمیل و یا سرویس صف هستند. هیچ تفاوتی میان سوریسهای پشتیبان داخلی و یا خارجی وجود نداشته و تمامی اطلاعات مرتبط با آنها در پیکربندی ذخیره می شوند.
  5. منبع کد بایستی بصورت صریحی مراحل build، release و run را از یکدیگر جدا کند. بدین معنا که تغییرات هیچگاه روی محیط run اعمال نشده بلکه ابتدا در محیط توسعه پیاده سازی و تست شده سپس مرحله build توسط توسعه دهنده اجرا شده و سپس محیط عملیاتی (run) بصورت اتوماتیک بروزرسانی میشود
  6. هریک از بخش‌های نرم‌افزار در یک پروسه بدون حالت(stateless) اجرا شوند. این بذین معناست که هیچ اطلاعاتی در پروسه در زمان اجرا ذخیره نشده و در صورت نیاز در یک سیستم ذخیره سازی مجزا ذخیره می‌شود
  7. برای اجرا نرم افزارها معمولا نیاز به یک وب سرور همانند apache است اما یکی از اصول طراحی اینجا عدم اعتماد به وجود سرویسهایی از قبیل apache بوده و استفاده از وب سرورهای موجود در زبان های برنامه نویسی همانند tornado و … بوده و ارائه سرویس‌ها از طریق استفاده از پورتهای مجزا است.
  8. از افزایش حجم عرضی برای افزایش کارایی سیستم استفاده شود بدین صورت که از چندین پروسه استفاده شود.
  9. هریک از روندهای یک نرم‌افزار بایستی با سرعت لود شده و بصورت دقیق و قابل اعتماد خارج شوند
  10. محیطهای توسعه، پایلوت و عملیاتی بایستی کاملا به یکدیگر شبیه باشند.
  11. لاگها یک جریان از داده‌های زماندار هستند که نرم افزار آنها را در جایی ذخیره نکرده بلکه آنها را بصورت ساده در stdout نوشته و سرویسهای دیگر مسئول ذخیره‌سازی، نگهداری و بازیابی لاگ ها هستند.
  12. عملیات مرتبط به نصب و راه‌اندازی سیستم که معمولا تنها یک بار اجرا می شوند همانند بروزرسانی ساختار پایگاه داده و یا درست کردن اطلاعات ناقص در پایگاه داده بخاطر یک باگ سیستم بایستی در همان محیط اجرا شوند که پروسه‌های اصلی سیستم اجرا می‌شوند.

همین

منبع