وبگاه شخصی حمیدرضا حسین خانی

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

وبگاه شخصی حمیدرضا حسین خانی

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

وبگاه شخصی حمیدرضا حسین خانی

حمیدرضا حسین‌خانی، دانش آموخته مهندسی نرم‌افزار از دانشگاه آزاد واحد تهران مرکزی و کارشناسی ارشد هوش مصنوعی و رباتیک از دانشگاه آزاد واحد علوم و تحقیقات است.
او از سال ۹۲ به عنوان مهندس نرم‌افزار وارد صنعت شد و همکاری با استارتاپ‌های خوش‌نام و در حال رشدی مثل ایران‌اپس، دیجی‌کالا، دیجی استایل، اسنپ و بامیلو، در سمت‌های مختلف مهندسی، مدیریت و مشاوره را در کارنامه‌ی خود دارد.
وی بیش از ۱۰ سال از سوابق حرفه‌ای خود را مشغول تدریس در کارگاه‌های مختلف برنامه‌نویسی، رباتیک و هوش مصنوعی در مدارس، پژوهش‌سرا‌ها، دانشگاه‌ها و همین‌طور آموزشگاه‌هایی چون لایتک دانشگاه صنعتی شریف، هواپیمایی هما و شبکه ملی مدارس ایران (رشد) بوده و همین‌طور منتور تعداد زیادی از تیم‌های شرکت‌کننده در مسابقات مختلف برنامه‌نویسی، رباتیک و روبوکاپ و همچنین داور و برگزار‌کننده اولین دوره‌ی مسابقات دانش‌آموزی برنامه‌نویسی موبایل در دانشگاه صنعتی شریف (Nadcup 2016) است.

او در حال حاضر استاد درس کارگاه کامپیوتر در دانشگاه صنعتی شریف و از نمایندگان بنیاد جهانی School of AI در ایران است که در زمینه ترویج و آموزش هوش مصنوعی به دانشجویان و استارتاپ‌ها فعالیت می‌کند.

آخرین نظرات

۸ مطلب با موضوع «مهندسی نرم‌افزار» ثبت شده است

۱۰آذر

مقدمه

نرم‌افزار Nginx (بخوانید اِنجین اِکس) در واقع یک نرم‌افزار Web server است که می‌تواند به عنوان Reverse proxy یا Load balancer یا Web cache نیز مورد استفاده قرار گیرد.

- تعریف Web server :Web server یا HTTP server نرم افزاری است که بر روی یک سرور سخت‌افزاری نصب شده، Request ها را در بستری مثل HTTP از Client ها دریافت کرده و به آنها پاسخ می‌دهد. این پاسخ ها یا به صورت Static از قبل در مسیری روی سرور ذخیره شده و یا به صورت Dynamic توسط یک Web Application ساخته شده و به سمت Client ها ارسال می‌شوند. مثلا تصاویر، ویدیو ها یا فایل های CSS و Javascript و ... می‌توانند به صورت Static روی سرور ذخیره شده و توسط Web server به Client ارسال شوند. اما اطلاعاتی مثل محصولات خریداری شده توسط کاربر، دانشجویان برتر ترم جاری، آگهی های منقضی شده و ... باید به صورت لحظه ای و Dynamic از دیتابیس ها و ... جمع آوری و تجمیع شده و در قالب یک پاسخ مناسب برای Client ها ارسال شوند.
- تعریف Reverse proxy: یک Proxy server در حالت عادی، یک سرور واسط میان یک Client و سایر سرور ها است. این سرور واسط، جلوی همه درخواست های یک Client قرار گرفته، آنها را دریافت کرده و به جای او به سرور های مقصد ارسال می‌کند. تحریم شکن ها و فیلترشکن های قدیمی تر در واقع یک Proxy server بودند که همه درخواست های کاربر را گرفته و آنها را به جای او به سرور های مورد نظرش ارسال کرده و پاسخ دریافتی را به کاربر بر می گرداندند. (فیلترشکن های امروزی به جای Proxy server از VPN استفاده می‌کنند). اما Reverse proxy برعکس Proxy server معمولی است. این نوع از پراکسی به جای دریافت همه درخواست های یک Client و ارسال آنها به سرور های مختلف (Forward proxy)، درخواست های همه Client ها را دریافت کرده و به یک سرور خاص ارسال می‌کند (Reverse Proxy).
- تعریف Load balancer: با افزایش تعداد Request های وارد شده به یک سرور، منابع بیشتری از آن سرور اشغال می‌شود (Load روی سرور افزایش می‌یابد). با افزایش Load روی سرور، عملکرد آن تحت تاثیر قرار گرفته و پاسخ‌دهی به درخواست ها با کندی روبرو می‌شود. در این صورت، سرور های فعلی جوابگوی نیاز ما نیستند و باید سرور ها را Scale کنیم. ممکن است اولین ایده ای که برای Scale کردن سرور ها به ذهن برسد افزایش قدرت پردازنده و حافظه RAM باشد. به این روش Vertical Scaling می‌گوییم. اما معمولا ایده بهتر استفاده از Server Farm (چند سرور متوسط به جای یک سرور قوی) است که به روش Horizontal Scaling معروف است. در این صورت Load balancer با قرار گرفتن در جلوی ورودی Server Farm، درخواست های وارد شده را دریافت و آنها را بین چند سرور مختلف با عملکرد یکسان توزیع می‌کند.
- تعریف Web cache: معمولا سرو کردن محتوای Static توسط Web server ها بسیار ساده تر و سریعتر از محتوای Dynamic صورت می‌گیرد. برای ساختن محتوای Dynamic معمولا کوئری های نسبتا زمان‌بری به Database ها زده می‌شود و یا الگوریتم های نسبتا پیچیده ای اجرا می‌شوند. بنابراین واضح است که آماده شدن چنین محتوایی نه تنها کندتر از محتوای Static صورت می‌گیرد، بلکه منابع سخت افزاری (RAM و CPU) بیشتری را از سرور اشغال می‌کند. Web cache یا HTTP cache محتوای Dynamic تولید شده برای Request های پرتکرار را به صورت Static در سرور Cache کرده و برای درخواست های بعدی در صورت امکان از آنها استفاده می‌کند. بنابراین پاسخ درخواست های پرتکرار، بسیار سریعتر از حالت عادی داده می‌شود و همچنین بار (Load) وارد شده به سرور نیز بطور چشمگیری کاهش می‌یابد.

با اینکه بیشترین سهم از بازار Web server ها در حال حاضر (۲۰۱۹) در دست Apache HTTP Server است، با این حال Nginx به علت عملکرد بهتر در مواجهه با منابع محدود و همینطور scale پذیری بیشتر، در حال ربودن گوی سبقت از Apache است. البته Web server های دیگری مثل Microsoft IIS و LiteSpeed هم در رده های سوم و چهارم قراردارند که وقت شما را با پرداختن به آنها نمیگیریم ;)

یکی از تفاوت های Nginx با Apache HTTP Server در این است که Apache ماژول هایی دارد که به کمک آنها قادر است محتوای Dynamic (از طریق اسکریپت های PHP یا Python یا ...) را خودش پردازش و تولید کند، اما Nginx برای اینکه سبک تر و سریع تر باشد روی وظیفه اصلی خودش تمرکز کرده و ساختن محتوای Dynamic را به نرم‌افزار های مخصوص این کار مثل php-fpm برای PHP یا uWSGI برای Python می‌سپارد.

یگی دیگر از تفاوت های Apache HTTP Server و Nginx در این است که Apache هنگام سرو محتوای Static می‌تواند از هر Directory، یک فایل به نام htaccess. شامل تنظیمات Apache برای آن دایرکتوری را بخواند و تنظیمات خود را برای آن دایرکتوری Override کند. Override کردن تنظیمات به ازای هر دایرکتوری باعث پیچیدگی در مدیریت تنظیمات می‌شود و همینطور به علت در دسترس بودن، امنیت پایین تری دارد، به همین دلیل Nginx در کل چنین قابلیتی را ارایه نمی‌دهد.

ادامه مطلب: https://vrgl.ir/A3pVz

حمیدرضا حسین خانی
۱۰آذر

مقدمه

این روز ها، Gitlab یکی از اصلی ترین ابزار هایی است که بیشتر برنامه‌نویس ها و متخصصان حوزه نرم‌افزار با آن سر و کار دارند. Gitlab در واقع مجموعه ای کامل از ابزار های توسعه محصول، از برنامه‌ریزی تا استقرار را شامل می‌شود.

  • با استفاده از Gitlab Issue Tracker می‌توان issue ها (کارهایی که برای بهبود محصول لازم است مثل پیاده‌سازی قابلیت های جدید یا رفع باگ ها) را برنامه‌ریزی و پیگیری کرد. معروف ترین رقیب Gitlab Issue Tracker نرم افزار Jira است که بسیاری از افراد فعال در حوزه مدیریت پروژه های نرم افزاری آن را ترجیح می‌دهند.
  • با استفاده از Gitlab Version Control می‌توان سورس‌کد نرم‌افزار ها را مدیریت کرد. معروف ترین رقیب Gitlab Version Control، سایت Github است که اخیراً کاربران ایرانی را تحریم کرده و به همین دلیل، شرکت ها استفاده از Gitlab Version Control را ترجیح می‌دهند.
  • با استفاده از Gitlab CI/CD می‌توان فرآیندهای Build و Test و Deploy نرم‌افزار ها را خودکار‌سازی کرد. معروف ترین رقیب Gitlab CI/CD نرم‌افزار Jenkins است که محبوب ترین ابزار در حوزه CI/CD محسوب می‌شود.

مجموعه نرم‌افزار Gitlab در واقع تمام ابزار های لازم برای توسعه نرم‌افزار در قالب متدولوژی های توسعه‌ چابک (Agile Software Development) با فرهنگ DevOps را در قالب یک اکوسیستم یکپارچه ارایه داده است. با این حال، بسیاری از تیم های توسعه نرم‌افزار ترجیح می‌دهند که تنها از بخشی از این اکوسیستم گسترده بهره برده و برای سایر بخش ها از نرم‌افزار های دیگر استفاده کنند. یکی از مرسوم ترین این ترکیب ها، استفاده از نرم‌افزار Jira به عنوان Issue Tracker به همراه Gitlab Version Control است.

به لطف انعطاف پذیری بالای Gitlab می‌توان Gitlab Version Control را به نرم‌افزار Jira متصل کرد و از مزایای هر دو به صورت یکپارچه بهره برد.
به لطف انعطاف پذیری بالای Gitlab می‌توان Gitlab Version Control را به نرم‌افزار Jira متصل کرد و از مزایای هر دو به صورت یکپارچه بهره برد.

گاهی محصولات شما در یک Git Repository واحد ذخیره نمی‌شوند. مثلا ممکن است محصول شما یک پلتفرم تاکسی اینترنتی باشد که به رانندگان و مسافران در یک اپلیکیشن واحد سرویس می‌دهد. شما در واقع از نظر بیزنس دو محصول دارید. محصول رانندگان و محصول مسافران و این دو، issue ها و نیازمندی های خود را دارند که می‌توان در دو پروژه مستقل Jira آنها را مدیریت کرد. اما سورس کد های شما در قالب پنج پروژه مستقل در Gitlab ذخیره می‌شوند. برای مثال این پنج پروژه عبارتند از: Android Application و iOS Application و Web App و Backend و Admin Dashboard.
در چنین شرایطی، Gitlab Issue Tracker به شما اجازه مدیریت Issue ها در قالب دو محصول رانندگان و مسافران را نمی‌دهد و شما را مجبور می‌کند هر Git Repository را به عنوان یک پروژه در نظر بگیرید. حال فرض کنید میخواهید یک قابلیت جدید برای مسافران اضافه کنید تا بتوانند مکان های پر تردد خود را ذخیره کنند. Issue مربوط به این قابلیت در کدام پروژه باید ردگیری شود؟!
با اتصال Gitlab به Jira میتوان دو محصول رانندگان و مسافران را در Jira ایجاد کرد و Product Owner می‌تواند بدون درگیر شدن با مسایل فنی، Issue های هر کدام را به طور مستقل از طریق Jira پیگیری کند. برنامه‌نویسان Task های مربوط به هر Issue را در داخل یکی از پنج پروژه ی Gitlab انجام می‌دهند و با Commit کردن کد ها در Git، وضعیت Issue ها در Jira به صورت خودکار به روز می‌شود.

اتصال Gitlab به Jira به برنامه‌نویسان اجازه می‌دهد که هنگام Commit کردن کد‌های مربوط به یک Issue بتوانند به کارت مربوط به آن Issue در Jira، یک Comment و یا Worklog اضافه کنند و یا با Merge شدن Branch ها به صورت خودکار وضعیت Issue مربوط به آن در Jira را به Done تغییر دهند.

این یکپارچگی برای برنامه‌نویسان و البته مدیران پروژه بسیار ارزشمند است زیرا نیاز برنامه‌نویس به مراجعه به Jira برای افزودن Comment و Worklog و تغییر وضعیت Issue ها را به حداقل می‌رساند و از طرفی باعث می‌شود که وضعیت ها و Worklog های Jira همیشه به روز باشند.

یکی از گله هایی که همیشه Product Owner ها از برنامه‌نویسان دارند این است که به جای وارد کردن Worklog ها به صورت پیوسته و در طول اسپرینت، همه آنها را یک جا در انتهای اسپرینت وارد می‌کنند که این موضوع نه تنها باعث فراموشی زمان واقعی صرف شده برای یک Issue می‌شود بلکه تحلیل زمان در طول اسپرینت را برای Product Owner ناممکن می‌سازد.
دومین گله ای که همیشه Product Owner ها از برنامه‌نویسان دارند، مربوط به آپدیت نکردن وضعیت Issue ها در نرم‌افزار Issue Tracker است.
حق با چه کسی است؟! طبیعتا هر دو! آپدیت بودن وضعیت Issue ها و Worklog ها لازمه کار Product Owner است اما قطعا برنامه‌نویسان کار های مهمتری برای انجام دارند، پس بهتر است به جای آزار خود و دیگران، تا جای ممکن این فرآیند ها را خودکار کنیم.

تنظیمات مربوط به Jira

۱. با اکانت Administrator وارد Jira شوید.

۲. از منوی تنظیمات Jira (چرخ‌دنده بالا سمت راست) گزینه User Management را انتخاب کنید.

۳. در صورت نیاز، مجددا پسورد Administrator را وارد کنید.

۴. با کلیک بر روی دکمه Create User یک کاربر به نام gitlab ساخته و پسورد آن را در جایی یادداشت کنید. این کاربر به نرم افزار Gitlab اجازه می‌دهد تا بتواند بر روی Issue های Jira تغییراتی را اعمال کند. بنابراین در مرحله بعد به این کاربر اجازه نوشتن روی همه پروژه های Jira را خواهیم داد.

۵. در سمت چپ صفحه بر روی Groups کلیک کنید. در سمت راست با وارد کردن نام gitlab-developers و فشردن دکمه Add Group یک گروه جدید با این نام ایجاد کنید.

گروه gitlab-developers به لیست گروه ها در پایین صفحه اضافه می ‌‌‌‌شود.

۶. با کلیک کردن بر روی گزینه Edit members در روبروی آن، وارد صفحه افزودن کاربر به این گروه می‌شویم تا کاربری که ساخته ایم را به آن اضافه کنیم.

۷. در بخش Add members to selected groups نام کاربری که ساخته بودید (gitlab) را وارد کرده و بر روی دکمه Add selected users کلیک کنید. در ستون دوم می‌توانید ببینید که کاربر gitlab به گروه gitlab-developers اضافه شده است.

۸. برای اینکه Gitlab بتواند روی Issue ها، Comment و ... بگذارد، لازم است که به گروه gitlab-developers دسترسی نوشتن (Write) روی همه پروژه های Jira را بدهیم. برای این کار از منوی تنظیمات Jira (چرخ‌دنده بالا سمت راست) گزینه Issues را انتخاب کنید.

۹. در سمت چپ صفحه روی گزینه Permission Schemes کلیک کرده و در سمت راست، دکمه Add Permission Scheme را بزنید.

۱۰. در صفحه بعد یک نام به Permission Scheme داده و بر روی Add کلیک کنید.

با کلیک بر روی دکمه Add به صفحه قبل بازگشته و میبینید که Permission Scheme ای که ساختید به لیست اضافه شده است.

۱۱. بر روی گزینه Permissions مقابل Permission Scheme اضافه شده کلیک کنید.

۱۲. در صفحه باز شده بر روی گزینه Edit در بخش Administer Projects کلیک کنید.

۱۳. در دیالوگ باز شده گزینه Group را از قسمت Granted to انتخاب کرده، سپس گروهی که ساخته بودید (gitlab-developers) را از منوی زیر آن انتخاب کنید و بر روی دکمه Grant کلیک کنید.

حال کاربر gitlab عضو گروه gitlab-developers است و اعضای این گروه اجازه نوشتن روی همه پروژه ها را دارند.

تنظیمات مربوط به Gitlab

۱. با اکانت Administrator وارد Gitlab شوید.

۲. از نوار منوی بالای صفحه بر روی علامت آچار (Admin Area) کلیک کنید.

۳. در سمت چپ صفحه ی باز شده بر روی Service Templates و در سمت راست صفحه بر روی سرویس Jira کلیک کنید.

۴. در صفحه باز شده، با کلیک بر روی گزینه Active سرویس Jira را فعال کنید. (توجه کنید که گزینه های Commit و Merge request نیز فعال باشند)

۵. در بخش Web URL، آدرس اینترنتی Jira (مثلا http://jira.school.ai) را وارد کنید.

۶. بخش Jira API URL را خالی بگذارید.

۶. نام کاربری و کلمه عبوری که برای Gitlab در Jira ساختید را در بخش های Username و Password وارد کنید.

۷. در بخش Transition IDs باید ID های مربوط به Transition های تعریف شده در Jira را به ترتیب وارد کرده و با کاما (,) از هم جدا کنید. در غیر اینصورت Gitlab نمی‌تواند وضعیت Issue ها در Jira را تغییر دهد. Transition ها در واقع همان وضعیت ها در Issue ها اند. (مثلا To-Do یا In Progress یا Done)

برای پیدا کردن Transition ID های Jira می‌توانید از API زیر استفاده کنید. با باز کردن آدرس زیر در مرورگر وب و بررسی پاسخ آن متوجه Transition ID ها در Jira خواهید شد.

https://jira.school.ai/rest/api/2/issue/DRIVER_232/transitions

لازم است در آدرس بالا، http://jira.school.ai را به آدرس اینترنتی Jira و DRIVER-232 را به شناسه یکی از Issue های موجود در Jira که در وضعیت Open قرار دارد تغییر دهید.

در آخر بر روی دکمه Save کلیک کنید.

حال که Gitlab به Jira متصل شده، باید لینک آن در منوی سمت چپ پروژه ها و در زیر بخش Issues قابل دسترس باشد.

۸. حال که از Jira استفاده می کنید در صورت تمایل می‌توانید Issue Tracker خود Gitlab را غیر فعال کنید. برای این کار از منوی سمت چپ پروژه وارد بخش Setting و سپس General شوید و از بخش Visibility, project features, permissions گزینه Issues را غیر فعال کنید.

تغییر وضعیت Issue ها در Jira با Commit کردن در Gitlab

به کمک مفهوم Smart Commit در Jira می‌توان بدون استفاده از دشبورد Jira و تنها با Commit کردن کد ها در Gitlab، روی Issue ها، Comment و Worklog گذاشت و یا وضعیت آنها را هنگام Merge شدن برنچ ها تغییر داد.

اطلاعات بیشتر: https://vrgl.ir/dUZtx

حمیدرضا حسین خانی
۱۰آذر

مقدمه

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

در مبحث مدیریت پروژه‌های نرم‌افزاری، به کوچکترین واحد کاری که برای بهبود و توسعه یک محصول باید انجام شود، یک issue می‌گویند. یک issue می‌تواند یک قابلیت (Feature) جدید در نرم‌افزار، یک ایراد (Bug) یا هر نوع کار قابل انجام برای بهبود و توسعه سیستم باشد. Jira در واقع یک ابزار برای تعریف و پیگیری issue ها یا به عبارتی یک Issue Tracking System است که به مدیران پروژه کمک می‌کند issue ها را تعریف و اولویت‌بندی کرده و به افراد مختلف در تیم بسپارند، همینطور پیشرفت آنها را طی فرآیند‌های استانداردی مثل Scrum و Kanban پیگیری کنند. از طرف دیگر Jira می‌تواند به ابزارهای مدیریت سورس کد مثل Gitlab یا Bitbucket متصل شده و issue ها را به کد‌های مربوط به آنها در پروژه لینک کند.

نرم‌افزار Jira رقبای دیگری مثل YouTrack، Gitlab Issue Tracker، ‌PivotalTracker، Redmine، Bugzilla و ... نیز دارد که هر کدام نقاط قوت و ضعف خود را دارند.

نرم‌افزار Jira در قالب سه بسته نرم‌افزاری مختلف به فروش می‌رسد که بسته به نیاز می‌توان یکی از آنها را خریداری کرد:

  • پکیج Jira Core شامل امکانات پایه برای مدیریت پروژه های بیزنسی (غیر نرم‌افزاری) است.
  • پکیج Jira Software علاوه بر امکانات Jira Core شامل امکانات مربوط به مدیریت پروژه‌های نرم‌افزاری در قالب متدولوژی هایی مثل Scrum است.
  • پکیج Jira Service Desk علاوه بر امکانات Jira Core و Jira Software قابلیت های مربوط به پشتیبانی و امور مشتریان را نیز شامل می‌شود.

قیمت لایسنس نرم‌افزار Jira برای استارتاپ‌های کوچک (حداکثر ۱۰ نفر) ماهیانه ۱۰ دلار است که پیشنهاد می‌کنیم در صورت امکان آن را خریداری کنید اما برای شرکت‌های بزرگتر این هزینه به مراتب بیشتر است و با در نظر گرفتن مسایل مربوط به تحریم‌ها و نرخ ارز و ... متاسفانه چاره ای به جز کرک کردن این نرم‌افزار وجود ندارد.

در این نوشتار به آموزش نصب و البته کرک کردن پکیج Jira Software نسخه ۸.۱.۰ (۶۴ بیتی) بر روی یک سرور Ubuntu خواهیم پرداخت.

نیازمندی‌ها

قبل از هر چیز، به یک کامپیوتر سرور که توسط اعضای تیم قابل دسترس باشد نیاز داریم. این سرور می‌تواند یک لپ‌تاپ روشن در شبکه داخلی شرکت و یا یک VPS در طرف دیگر سیاره زمین باشد. البته واضح است که روشن گذاشتن یک سیستم در شرکت به عنوان سرور Jira نه تنها مقرون به صرفه نیست،‌ بلکه امنیت لازم را هم ندارد و هر لحظه ممکن است اطلاعات مربوط به پروژه‌ها را از دست بدهیم. از طرف دیگر کرک کردن لایسنس Jira روی سرور‌های خارجی نیز ممکن است به دلیل نقض قوانین کپی‌رایت عواقبی را برای سرور و حتی شرکت در پی داشته باشد. بنابراین احتمالا بهترین گزینه استفاده از یک VPS داخل کشور (یا مثلا ابرک های آروان) است. پیشنهاد می‌شود برای این سرور، یک یا دو هسته پردازشی، حداقل ۴ گیگابایت حافظه RAM و حداقل ۲۰ گیگابایت حافظه دیسک در نظر بگیرید. (برای اطلاعات بیشتر و دقیق‌تر اینجا کلیک کنید.) سیستم عامل نصب شده روی این سرور اهمیت خاصی ندارد، با این حال فرض ما در این نوشتار نسخه 64 بیتی Ubuntu است.
برای نصب Jira بر روی سیستم عامل Windows اینجا کلیک کنید.

ادامه: https://vrgl.ir/auat4

حمیدرضا حسین خانی
۱۰آذر

مقدمه

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

پروتکل SSH با رمزنگاری محتوای رد و بدل شده در شبکه (مثل Password و ...) از آنها در مقابل خوانده شدن توسط افراد غیر مجاز در شبکه محافظت می‌کند. اگر چه اسناد افشا شده توسط Edward Snowden در سال ۲۰۱۳ نشان داد که این پروتکل آنقدر ها هم امن نیست و آژانس امنیت ملی آمریکا بارها توانسته اطلاعات رمز شده در این پروتکل را رمزگشایی کند.
پروتکل SSH امنیت محتوای رد و بدل شده در یک شبکه ناامن مثل اینترنت را تامین می‌کند.
پروتکل SSH امنیت محتوای رد و بدل شده در یک شبکه ناامن مثل اینترنت را تامین می‌کند.

معمولا سرویسی به نام ssh (در سیستم عامل های مبتنی بر Debian مثل Ubuntu) یا sshd (در سیستم عامل های مبتنی بر Redhat مثل CentOS) روی سرور فعال و در حال گوش کردن به پورت ۲۲ است. با نصب یک SSH Client مانند OpenSSH یا PuTTY روی کامپیوتر شخصی می‌توان از راه دور به سرویس مذکور روی سرور وصل شد و کنترل سرور را در دست گرفت.

پکیج نرم‌افزاری OpenSSH به صورت پیش‌فرض بر روی سیستم عامل های MacOS و Linux نصب شده است. اما اگر سیستم عامل کامپیوتر شخصی شما Windows است می‌توانید نرم افزار PuTTY را دانلود و نصب کنید تا از راه دور به سرور خود SSH کنید.
پکیج نرم‌افزاری OpenSSH شامل چندین ابزار کاربردی مثل scp و sftp و ssh و ssh-keygen و ... است که جلوتر به معرفی بعضی از آنها خواهیم پرداخت.

اتصال به سرور با استفاده از Username و Password

همانطور که پیشتر گفته شد، پکیج نرم‌افزاری OpenSSH به صورت پیشفرض در بیشتر سیستم عامل ها نصب شده است. بنابراین کافی است وارد یک شبیه‌ساز ترمینال در کامپیوتر شخصی خود (مثلا iTerm2 در MacOS یا Tilix در Linux) شده و دستور ssh USER_NAME@HOST را وارد کرده و کلید Enter را بزنید. دقت کنید که به جای HOST، آدرس IP یا Domain سرور و به جای USER_NAME نام یک کاربر تعریف شده روی سرور را وارد کنید.

بار اولی که قصد SSH کردن به یک سرور خاص را دارید، احتمالا با پیغام زیر مواجه خواهید شد که می‌گوید این سرور برای کامپیوتر شما ناشناخته است.

The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)?

با تایپ کردن yes و زدن کلید Enter روی کیبورد، سرور مذکور به لیست Host های شناخته شده در کامپیوتر شما (به آدرس ssh/known_hosts./~) اضافه شده و در دفعات بعد با این پیام مواجه نخواهید شد. سپس کلمه عبور کاربر از شما پرسیده می شود که در صورت درست وارد کردن آن، یک Terminal Session متصل به سرور برای آن کاربر باز می‌شود و می‌توانید هر کاری که کاربر تعریف شده روی سرور مجاز به انجام آن است را از طریق این ترمینال انجام دهید.

اتصال به سرور با استفاده از Username و Password به هیچ عنوان روش خوبی نیست و سرور شما را در معرض حمله Brute-force قرار می‌دهد. در واقع اگر این روش اتصال روی سرور شما فعال باشد، هکر ها با تولید و امتحان تعداد زیادی رمز عبور به صورت خودکار، سعی در ورود به سرور شما خواهند کرد.
روش جایگزین، استفاده از SSH Key برای اتصال به سرور است.

اتصال به سرور با استفاده از SSH Key

در این روش اتصال، به جای Username و Password از کلید خصوصی (Private Key) و کلید عمومی (Public Key) تولید شده توسط الگوریتم رمزنگاری RSA استفاده می‌شود.

در روش رمزنگاری RSA، برای رمز کردن اطلاعات و ارسال آنها در شبکه، یک جفت کلید (دو کلید)، یکی برای رمزنگاری (Encryption Key) و دیگری برای رمزگشایی (Decryption Key) ساخته می‌شوند. اگر داده ای با یک Encryption Key خاص رمز شده باشد، فقط و فقط با Decryption Key معادل آن رمزگشایی می‌شود. بنابراین اگر سیستمی به نام Alice بخواهد پیامی را به سیستمی به نام Bob بفرستد، باید Encryption Key مربوط به Bob را داشته باشد و پیام را با آن رمز کند و برای Bob بفرستد. با فرض اینکه Decryption Key متعلق به Bob را هیچ کس جز خودش ندارد، می‌توان مطمین بود که فقط Bob می‌تواند پیام را رمزگشایی کند. بنابراین Decryption Key یک کلید خصوصی (Private Key) است و هیچ کس جز مالک اصلی آن نباید آن را داشته باشد اما Encryption Key توسط سایر فرستندگان برای رمز کردن داده ها استفاده می‌شود و از این رو یک کلید عمومی (Public Key) است که می‌توان آن را به راحتی در اختیار بقیه قرار داد.

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

نرم افزار SSH Client به صورت خودکار کلید عمومی (کلید سبز) را از سرور میگیرد و پیام خود را با آن رمز می‌کند و در شبکه اینترنت با پروتکل SSH منتقل می‌کند. سرور می‌تواند پیام رمز شده را با کلید خصوصی خود باز کند.
نرم افزار SSH Client به صورت خودکار کلید عمومی (کلید سبز) را از سرور میگیرد و پیام خود را با آن رمز می‌کند و در شبکه اینترنت با پروتکل SSH منتقل می‌کند. سرور می‌تواند پیام رمز شده را با کلید خصوصی خود باز کند.

کلید خصوصی و عمومی متعلق به سرور (ID متعلق به سرور)، هنگام ساختن User روی سرور ایجاد شده اند و در مسیر /ssh./~ به ترتیب با نام های id_rsa و id_rsa.pub ذخیره شده اند. برای ساختن جفت کلید RSA روی کامپیوتر شخصی خود (Client) می‌توانید از ابزار ssh-keygen در مجموعه نرم‌افزاری OpenSSH استفاده کنید. برای این منظور دستور زیر را در ترمینال اجرا کنید:

1$ ssh-keygen


اجرای این دستور، یک جفت کلید ۲۰۴۸ بیتی (ID متعلق به کلاینت) در مسیر /ssh./~ به نام های id_rsa و id_rsa.pub می‌سازد که برای بیشتر امور به اندازه کافی امن است اما برای اطمینان بیشتر می‌توان از یک کلید بزرگتر (مثلا ۴۰۹۶ بیتی) استفاده کرد:

1$ ssh-keygen -t rsa -b 4096 -C &quotyour_email@example.com"


لازم به ذکر است که مسیر ذخیره شدن ID در هنگام ساخته شدن آن از شما پرسیده می‌شود که با زدن کلید Enter روی کیبورد مقدار پیشفرض آن (/ssh./~) در نظر گرفته می‌شود. همینطور هنگام ساخته شدن ID، یک Passphrase از شما پرسیده می‌شود که می‌توانید آن را خالی بگذارید اما به شدت توصیه می‌کنیم که یک رمز عبور قوی برای این بخش وارد کنید. وارد کردن رمز عبور در این قسمت باعث می‌شود تا در صورت لو رفتن Private Key مربوط به کامپیوتر شما کسی نتواند به راحتی از آن سواستفاده کند.

پس از ساخته شدن ID توسط ابزار ssh-keygen یک Randomart (شبیه تصویر) برای سهولت در بررسی چشمی ایجاد می‌شود.
پس از ساخته شدن ID توسط ابزار ssh-keygen یک Randomart (شبیه تصویر) برای سهولت در بررسی چشمی ایجاد می‌شود.

حال که جفت کلید مربوط به کلاینت ساخته شده، باید کلید عمومی آن را به سرور بدهیم. برای این منظور فایل ssh/id_rsa.pub./~ روی کلاینت که شامل کلید عمومی است را باز کرده و محتوای آن (که با ssh-rsa AAAA شروع می‌شود) را در انتهای فایل ssh/authorized_keys./~ روی سرور کپی می‌کنیم. اگر فایل ssh/authorized_keys./~ روی سرور وجود نداشت می‌توانید با دستورات زیر آن را بسازید:

12mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys


البته که ابزاری به نام ssh-copy-id در پکیج نرم‌افزاری OpenSSH وجود دارد که کار انتقال کلید عمومی به سرور را به صورت خودکار انجام می‌دهد و می‌توانید برای سادگی از آن بر روی کامپیوتر خود استفاده کنید:

1ssh-copy-id USER_NAME@HOST


به جای HOST از IP یا Domain سرور و به جای USER_NAME از نام یک کاربر مجاز بر روی سرور استفاده کنید. واضح است که پس از اجرای دستور بالا، رمز عبور کاربر سرور پرسیده می‌شود بنابراین قابلیت اتصال به سرور با نام کاربری و رمز عبور باید هنگام استفاده از این ابزار فعال باشد. در صورت وارد کردن رمز عبور صحیح، کلید عمومی کامپیوتر به سرور منتقل می‌شود و ازین پس می‌توانید به راحتی و بدون وارد کردن رمز عبور به سرور متصل شوید.

غیر فعال کردن قابلیت اتصال به سرور با استفاده از Username و Password

در بالا گفتیم که فعال بودن این روش اتصال، امنیت سرور را به خطر می اندازد. از طرفی هنگام استفاده از ابزار ssh-copy-id برای انتقال کلید عمومی به سرور، نیاز به فعال بودن این قابلیت داریم. بنابراین پس از انتقال کلید عمومی و اطمینان از اینکه اتصال به سرور با استفاده از SSH Key به درستی کار می‌کند، بهتر است قابلیت اتصال به سرور با استفاده از Username و Password را غیر فعال کنیم. برای این منظور فایل etc/ssh/sshd_config/ را به کمک یک Text Editor مانند vim ویرایش کنید:

در صفحه باز شده، خط PasswordAuthentication را یافته و با پاک کردن کاراکتر # آن را از حالت Comment خارج کرده و عبارت no را مقابل آن درج کنید. سپس تغییرات را ذخیره کرده و از محیط vim خارج شوید. (wq:)

از نظر امنیتی بهتر است ورود به سرور با کاربر root غیر فعال باشد بنابراین پیشنهاد می‌شود خط PermitRootLogin را نیز در فایل مذکور یافته و عبارت no را در مقابل آن درج کنید تا ورود با کاربر root نیز در همین جا غیر فعال شود.

پس از اعمال تغییرات مذکور، لازم است تا سرویس ssh (یا sshd) مجددا راه اندازی شود:

1$ sudo systemctl restart ssh


اگر همه مراحل بالا را درست طی کرده باشید با اجرای دستور ssh USERNAME@HOST روی کامپیوتر خود، بدون رمز عبور به سرور متصل می‌شوید و البته با اجرای این دستور روی کامپیوتر های دیگر (به دلیل عدم تعریف کلید عمومی و غیر فعال بودن ورود به کمک رمز عبور) اتصال امکان پذیر نخواهد بود.


اگر تعداد زیادی سرور و کاربر دارید و به خاطر سپردن IP و Username همه آنها برای شما سخت است می‌توانید نام های ساده تری را به آنها اختصاص دهید. برای این کار فایل ssh/config./~ را ساخته و محتوایی شبیه به محتوای زیر را به آن اضافه کنید:

123Host production1     HostName 172.217.169.238     User hamidreza


حال به جای دستور ssh hamidreza@172.217.169.238 می‌توانید از دستور ssh production1 استفاده کنید.

اطلاعات بیشتر: https://vrgl.ir/dA6o2

حمیدرضا حسین خانی
۱۰آذر

مقدمه

همانطور که می‌دانید، همه Node ها در اینترنت (سرور ها، کامپیوتر ها، موبایل ها و ...) با یک آدرس یکتا (IP Address) شناسایی می‌شوند. این آدرس در واقع یک رشته صفر و یک به طول ۳۲ بیت (۴ بخش ۸ بیتی) است که برای سادگی در نمایش، هر ۸ بیت آن توسط یک عدد دسیمال از ۰ تا ۲۵۵ نمایش داده می شود.

به عنوان مثال،‌ آدرس IP گوگل 216.58.208.78 است و اگر شما این آدرس را در مرورگر وب خود وارد کنید، به سایت Google متصل خواهید شد.

با یک آدرس ۳۲ بیتی می‌توان ۲ به توان ۳۲ آدرس مختلف ایجاد کرد بنابراین نسخه ۳۲ بیتی این آدرس قادر است 4,294,967,296 دستگاه مختلف را در اینترنت آدرس‌دهی کند. واضح است که در عصر اینترنت اشیا که همه دستگاه ها از لپ‌تاپ و موبایل تا ساعت و عینک و تلویزیون و یخچال و ... به اینترنت متصل اند و نیاز به یک آدرس IP دارند، ۴.۳ میلیارد آدرس، بسیار کم است. بنابراین در سال ۱۹۹۸ نسخه ششم از این آدرس (IPv6) معرفی شد که یک آدرس ۱۲۸ بیتی است و می‌تواند ۲ به توان ۱۲۸ (340282366920938463463374607431768211456) دستگاه مختلف را آدرس دهی کند :)

آدرس IPv6 شامل ۸ قسمت ۱۶ بیتی است که هر قسمت را به صورت Hexadecimal (مبنای ۱۶) توسط چهار حرف نمایش می‌دهند.

یافتن آدرس IP در ترمینال لینوکس

با اجرای فرمان زیر در ترمینال لینوکس، اطلاعات بسیار کاملی از آدرس های IP خود در شبکه خواهید دید:

1$ ip addr


اگر سرور شما با کارت شبکه سیمی به اینترنت متصل باشد ممکن است بتوانید با اجرای دستور زیر فقط آدرس IP عمومی خود را در شبکه مشاهده کنید:

1ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

روش دیگر برای مشاهده آدرس IP عمومی سرور در اینترنت، استفاده از وبسایت icanhazip.com است. برای این منظور، دستور زیر را در ترمینال سرور وارد کنید تا Public IP Address سرور را مشاهده کنید

1curl -4 icanhazip.com

منظور از آدرس IP عمومی، آدرس IP ای است که دستگاه شما با آن در اینترنت قابل دستیابی است. بعضی ها به اشتباه به آدرس IP عمومی، Valid IP هم می‌گویند که البته اصطلاح اشتباهی است چون Valid IP با Public IP تفاوت دارد.

برای آشنایی بیشتر با Public IP Address و Private IP Address می‌توانید مقاله آشنایی با VPN را مطالعه کنید.

اطلاعات بیشتر: https://vrgl.ir/wgZvq

حمیدرضا حسین خانی
۱۰آذر

این روز ها بیشتر افراد برای غلبه بر محدودیت هایی مثل تحریم، فیلترینگ و ... در اینترنت از VPN ها استفاده می‌کنند. اما آیا واقعا VPN (شبکه خصوصی مجازی) فقط یک فیلترشکن است؟!

قطعا اینطور نیست. به همین دلیل در این پست میخواهیم تا حدی با مفهوم شبکه خصوصی مجازی (Virtual Private Network) و کاربرد های آن در شبکه های کامپیوتری آشنا شویم.

در ابتدا لازم است با دو مفهوم شبکه های خصوصی (Private Network) و شبکه های عمومی (Public Network) آشنا شویم.

زمانی که شما سیستم های کامپیوتری داخل منزل یا دفتر کارتان را به صورت LAN به هم متصل می‌کنید در واقع یک شبکه خصوصی (Private Network) ایجاد کرده اید. سیستم های داخل شبکه خصوصی می‌توانند به راحتی همدیگر را دیده و با هم ارتباط برقرار کنند اما این سیستم ها از بیرون شبکه خصوصی شما (مثلا از طریق اینترنت) قابل دستیابی نیستند. سیستم های کامپیوتری داخل یک شبکه خصوصی می‌توانند هر IP Address دلخواه شما (مثلا 192.168.0.1) را داشته باشند زیرا این IP Address ها فقط داخل شبکه خصوصی شما تعریف شده اند و خارج از شبکه خصوصی شما معنی ندارند. به این IP Address ها Private IP Address گفته می‌شود.

اما شبکه عمومی (Public Network) به سیستم های متعلق به شما محدود نمی‌شود. در واقع شبکه جهانی اینترنت اصلی ترین شبکه عمومی است. سیستم های متصل به اینترنت باید IP Address یکتای مختص به خود را داشته باشند که توسط RIR به آنها فروخته شده است. این IP Address ها کاملا یکتا و عمومی اند. منظور از آدرس آی پی عمومی (Public IP Address) این است که این IP Address در اینترنت تعریف شده و از طریق آن می‌توان به سیستم مورد نظر دسترسی مستقیم داشت.

بعضی از افراد فعال در حوزه IT به اشتباه از عبارت Valid IP Address به جای Public IP Address استفاده می‌کنند. لازم است بدانید که Valid IP Address مفهوم دیگری است و ربطی به Private/Public IP Address ندارد.

برای آشنایی با IP Address و روش یافتن آن می‌توانید مقاله مرتبط با IP Address را مطالعه فرمایید.


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

برای اتصال به یک شبکه خصوصی از راه دور و از طریق یک شبکه عمومی لازم است یک شبکه خصوصی مجازی (VPN) ایجاد کنید. این اتصال از طریق یک تونل رمزنگاری شده بین کلاینت VPN و شبکه خصوصی شما صورت میپذیرد. شما با وارد کردن یک نام کاربری و کلمه عبور و یا وارد کردن یک Certificate در نرم افزار کلاینت VPN می توانید یک تونل امن به شبکه خصوصی مورد نظرتان باز کنید.

تونل امن ایجاد شده بین کاربر و شبکه خصوصی دور از آن
تونل امن ایجاد شده بین کاربر و شبکه خصوصی دور از آن

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

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

کاربرد های شبکه خصوصی مجازی

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

نکاتی که هنگام استفاده از VPN باید در نظر گرفت

  • اتصال به اینترنت از طریق اتصال به شبکه خصوصی، به خاطر رمزنگاری و طولانی تر شدن مسیر ارسال داده ها، کند تر از حالت عادی است.
  • در رابطه با اتصال به شبکه های خصوصی ای که متعلق به خود شما نیست، محتاط باشید. ممکن است اطلاعات و تاریخچه وب گردی شما توسط سازندگان آن VPN قابل مشاهده باشند.
  • استفاده از VPN های عمومی مثل Hotspot Shield یا 1.1.1.1 برای دور زدن تحریم یا سانسور، در بعضی از کشور ها منع قانونی دارد. مثلا در چین تنها مجاز به استفاده از VPN های مورد تایید دولت هستید. در ایران منع قانونی مشخصی در رابطه با استفاده از VPN در حالت عادی وجود ندارد اما عبور از فیلترینگ برای مقاصد خاصی ممکن است جرم تلقی شود.

برای ایجاد یک شبکه خصوصی مجازی پروتکل های مختلفی از جمله PPTP و L2TP  و OpenVPN و IKEv2/IPSec و Wireguard... وجود دارند که هر کدام مزایا و معایب و کاربرد های خود را دارند. با این حال WireGuard نسبت به بقیه جدیدتر، سبک تر، امن تر و سریع تر است. به همین دلیل Linus Torvalds (خالق linux) آن را در هسته جدید Linux (نسخه 5.6) به صورت پیشفرض قرار داده است.

برای راه اندازی یک VPN با پروتکل WireGuard میتوانید از اسکریپت های موجود در اینجا استفاده کنید.

برای این کار یک سرور Linux (ترجیها Ubuntu) با حداقل منابع (یک هسته پردازشی و 1GB حافظه کافی است) آماده کرده و دستورات زیر را به ترتیب در آن وارد کنید.

سرور VPN شما آماده است و می‌توانید با دستور زیر برای هر Client فایل تنظیمات بسازیدسپس با توجه به سیستم عامل Client، نرم‌افزار مخصوص WireGuard را نصب کرده و با استفاده از فایل تنظیماتی که در مرحله قبل ساخته اید و در مسیر /etc/wireguard/peers/  ذخیره شده است، به VPN متصل شوید.

دانلود نرم افزار کلاینت Windows

دانلود نرم افزار کلاینت macOS

دانلود نرم افزار کلاینت Linux

دانلود نرم افزار کلاینت Android

دانلود نرم افزار کلاینت iOS

اطلاعات بیشتر: https://vrgl.ir/wYQfB

حمیدرضا حسین خانی
۱۰آذر
  • دامنه هایی که TLD آنها ir است مخصوص ایران اند و برای resolve شدن به DNS های ایران ارسال می‌شوند. بنابراین اگر کاربران سایت شما در ایران هستند (به علت نزدیکی جغرافیایی با DNS ها) سرعت بالاتری را هنگام ترجمه نام دامنه به IP Address نسبت به com و ... تجربه می‌کنند. البته که این امر برای کاربران خارجی و بین المللی به مراتب کند تر از دامنه های com و ... انجام می‌شود.
  • دامنه هایی که TLD آنها com یا net یا org یا ... هستند مربوط به کشور خاصی نیستند و DNS های خود را دارند. به این نوع TLD ها که عمومیت بیشتری در سطح بین المللی دارند، gTLD گفته می‌شود.
  • اگر اکثر کاربران شما از ایران هستند استفاده از دامنه های ir به علت مشخص تر بودن کشور مخاطب نسبت به com و ...، باعث بهبود SEO می‌شود. البته که با روش هایی مثل درج کشور هدف در Google Web Master می‌توان این مشکل را در دامنه های com نیز حل کرد.
  • اگر قصد تبلیغات در رسانه های ملی مثل صدا و سیما را دارید باید بدانید که محدودیت هایی برای استفاده از دامنه های غیر از ir وجود دارد و احتمالا مجبورید از دامنه های ir استفاده کنید.
  • دامنه های ir در داخل کشور به صورت حقوقی برای شما ثبت می‌شوند و در صورت دزدیده شدن یا رزرو (Park) شدن توسط افراد سودجو، به راحتی و با مراجعه به پژوهشکده دانش های بنیادین در نیاوران تهران قادر خواهید بود آن را پس بگیرید.
  • در صورت استفاده از دامنه های ir احتمال مواجه شدن با محدودیت های تحریمی هنگام استفاده از بعضی سرویس ها وجود دارد. برای مثال اگر می‌خواهید از Google Ads استفاده کنید، حتما دامنه ای غیر از ir را در آن ثبت کنید.

اطلاعات بیشتر: https://vrgl.ir/yqL7n

حمیدرضا حسین خانی
۱۰آذر

مقدمه
یکی از اولین سوالاتی که برای بیشتر تیم ها در ابتدای مسیر راه‌اندازی استارتاپشان به وجود می‌آید این است که چه اینترنتی را برای دفتر کارشان تهیه کنند. پاسخ این سوال برای روز های اول ممکن است Hotspot کردن موبایل یا مودم های سیار LTE باشد اما به زودی نیاز به یک سرویس اینترنت جدی تر حس می‌شود. در این میان بعضی ها به سرویس های اینترنت سازمانی (از طریق +ADSL2 یا TD-LTE یا ...) و بعضی نیز به پهنای باند اختصاصی (Dedicated Broadband) روی می‌آورند. اگر چه برای همه نمی‌توان یک نسخه واحد را پیچید اما در این پست سعی می‌کنم مقایسه ای بر این دو سرویس داشته باشم تا با آگاهی بیشتری نسبت به خرید محصول متناسب با نیاز خود اقدام کنید.


اینترنت سازمانی
این سرویس بسیار شبیه به سرویس اینترنت خانگی است اما معمولا محدودیت پهنای باند (سرعت) آن بالا تر است (مثلا تا ۵۰ مگابیت بر ثانیه).
حجم مصرفی (دیتای دانلود شده) در این سرویس ها معمولا نامحدود است اما ممکن است هزینه حجم مصرفی جداگانه حساب شود.
ارتباط با ISP در این سرویس می‌تواند از طریق +ADSL2 یا Wi-Max یا TD-LTE یا ... باشد که این روز ها محبوب ترین روش، استفاده از TD-LTE با مودم خارجی (نصب در فضای باز مثل پشت بام) است.
در این سرویس، یک پهنای باند مشخص بین تعدادی از کاربران ISP به اشتراک گذاشته می‌شود بنابراین سرعت اینترنت در ساعات مختلف شبانه روز بسته به مصرف سایر کاربران،‌ متغیر است و در ساعات اوج مصرف به حداقل خود می‌رسد.
این سرویس اصطلاحاً نامتقارن (Asymmetric) است. به عبارت دیگر سرعت Upload به مراتب از سرعت Download کمتر است.
آدرس IP شما در هر بار اتصال به این سرویس تغییر می‌کند و شما همیشه یک آدرس IP ثابت ندارید.
هزینه استفاده از این سرویس در مقایسه با پهنای باند اختصاصی، به مراتب کمتر است. (البته دقت کنید که در کل هزینه اینترنت در ایران از میانگین سایر کشور ها بیشتر است)

پهنای باند اختصاصی
در این سرویس، پهنای باند، انحصارا در اختیار شما است. بنابراین سرعت اینترنت در طول شبانه روز ثابت و بدون نوسان است.
سرعت اینترنت در این سرویس می‌تواند تا چندین گیگابیت بر ثانیه باشد.
این سرویس اصطلاحا متقارن (Symmetric) است. به عبارت دیگر سرعت Upload و Download در این سرویس یکسان است.
ارتباط با ISP در این سرویس میتواند از طریق آنتن PtP یا فیبر نوری یا ... باشد.
حجم مصرفی (دیتای دانلود شده) در این سرویس نامحدود است.
آدرس IP شما در هر بار اتصال به این سرویس ثابت است. در واقع یک یا چند آدرس IP ثابت، بسته به نیاز، توسط ISP به شما منتسب می‌شود.
از پهنای باند اختصاصی می‌توان برای برقراری هرگونه شبکه مثل Internet یا Intranet یا ... در داخل و خارج سازمان استفاده کرد و فقط مختص اینترنت نیست.
هزینه استفاده از این سرویس در مقایسه با سرویس اینترنت سازمانی به مراتب بیشتر است.


نتیجه
اگر:
نیاز به یک شبکه پایدار بین شعب مختلف سازمان دارید...
قرار است افرادی از راه دور به شبکه داخلی شما وصل شده و کار های خود را انجام دهند...
سرور هایی در شرکت دارید که باید از بیرون شرکت و در بستر اینترنت دیده شوند...
بک‌آپ هایی به صورت منظم از سرور های شما گرفته شده و لازم است در زمان کوتاهی توسط این شبکه Restore شوند...
فایل های بسیار حجیم در شبکه به اشتراک گذاشته می‌شوند...
تلفن اینترنتی (NGN) دارید...
از شبکه شما برای کنفرانس های ویدیویی استفاده می‌شود...
لازم است پهنای باند اختصاصی خود را داشته باشید. در غیر اینصورت، ممکن است استفاده از سرویس های اینترنت سازمانی با هزینه بسیار کمتر جوابگوی نیاز های شما باشد.

اطلاعات بیشتر: https://vrgl.ir/bQCyq

حمیدرضا حسین خانی