سرور مجازی

۵ مطلب با کلمه‌ی کلیدی «راه اندازی سرور مجازی» ثبت شده است

  • ۰
  • ۰

نحوه استفاده از Ansible برای خودکارسازی تنظیمات اولیه سرور در اوبونتو 20.04

ورود به سایت

معرفی

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

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

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

پیش نیازها

برای اجرای تنظیمات خودکار ارائه شده توسط playbook در این راهنما، به موارد زیر نیاز دارید:

  • یک گره کنترلی Ansible: یک دستگاه اوبونتو 20.04 با Ansible نصب و پیکربندی شده است تا با استفاده از کلیدهای SSH به میزبان Ansible شما متصل شود. اطمینان حاصل کنید که گره کنترل دارای یک کاربر معمولی با مجوزهای sudo و فایروال فعال است، همانطور که در راهنمای راه اندازی سرور اولیه ما توضیح داده شده است. برای راه اندازی Ansible، لطفاً راهنمای ما در مورد نحوه نصب و پیکربندی Ansible در اوبونتو 20.04 را دنبال کنید.
  • یک سرور راه دور با نصب تمیز اوبونتو 20.04: هیچ تنظیمات قبلی در این سرور مورد نیاز نیست، اما باید از گره کنترل Ansible که در بالا ذکر شد به این سرور دسترسی SSH داشته باشید. این سرور به یک سرور از راه دور میزبان Ansible تبدیل می شود که برای تامین خودکار توسط گره کنترل Ansible هدف قرار می گیرد.

این کتاب بازی چه کاری انجام می دهد؟

این کتاب بازی Ansible جایگزینی برای اجرای دستی از طریق روش مشخص شده در راهنمای راه اندازی اولیه سرور اوبونتو 20.04 و راهنمای تنظیم کلیدهای SSH در اوبونتو 20.04 هر بار که سرور را راه اندازی می کنید ارائه می دهد. یک بار کتاب پخش خود را تنظیم کنید و بعد از آن برای هر سرور از آن استفاده کنید.

اجرای این playbook اقدامات زیر را روی میزبان Ansible شما انجام می دهد:

  • aptitude را نصب کنید که توسط Ansible به عنوان جایگزینی برای مدیر بسته apt ترجیح داده می شود.
  • یک کاربر sudo جدید ایجاد کنید و sudo بدون رمز عبور را راه اندازی کنید.
  • یک کلید عمومی SSH محلی را کپی کنید و آن را در فایل authorized_keys برای کاربر مدیریت جدید در میزبان راه دور قرار دهید.
  • غیرفعال کردن احراز هویت مبتنی بر رمز عبور برای کاربر اصلی.
  • بسته های سیستمی را نصب کنید.
  • فایروال UFW را طوری پیکربندی کنید که فقط به اتصالات SSH اجازه دهد و هر درخواست دیگری را رد کند.

پس از اتمام اجرای کتاب پخش، کاربر جدیدی خواهید داشت که می توانید از آن برای ورود به سرور استفاده کنید.

برای شروع، وارد یک کاربر دارای sudo در سرور گره کنترل Ansible خود شوید.

مرحله 1 – گره کنترل Ansible خود را آماده کنید

در سرور گره کنترل Ansible، IP سرور راه دور میزبان Ansible خود را به فایل موجودی Ansible خود اضافه کنید. استفاده از ویرایشگر متن دلخواه شما:

sudo nano /etc/ansible/hosts

با این کار فایل موجودی Ansible شما باز می شود. IP سرور راه دور میزبان Ansible خود را به بلوک [سرورها] اضافه کنید:

/etc/ansible/hosts

[servers]
server1 ansible_host=your_remote_server_ip

. . .

اکنون اتصال SSH خود را بین این گره کنترلی Ansible و سرور از راه دور میزبان Ansible خود آزمایش و احراز هویت خواهید کرد:

ssh root@your_remote_server_ip

درخواست احراز هویت را بپذیرید و در صورت درخواست رمز عبور خود را وارد کنید. هنگامی که اتصال SSH را تأیید کردید، CTRL+D را فشار دهید تا اتصال بسته شود و به گره کنترل خود بازگردید.

مرحله 2 – آماده کردن Playbook خود

فایل playbook.yml جایی است که تمام وظایف شما در آن تعریف می شود. یک کار کوچکترین واحد عملی است که می توانید با استفاده از کتاب بازی Ansible به طور خودکار انجام دهید. اما ابتدا، فایل playbook خود را با استفاده از ویرایشگر متن دلخواه خود ایجاد کنید:

nano playbook.yml

با این کار یک فایل YAML خالی باز می شود. قبل از اضافه کردن وظایف به کتاب بازی خود، با افزودن موارد زیر شروع کنید:

playbook.yml

---
- hosts: all
  become: true
  vars:
    created_username: sammy

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

تقریباً هر کتاب بازی که با آن روبرو می شوید با اعلان هایی مشابه این شروع می شود. hosts اعلام می کند که گره کنترل Ansible کدام سرورها را با این کتاب بازی هدف قرار می دهد. تبدیل وضعیت می کند که آیا همه دستورات با امتیازات ریشه افزایش یافته انجام می شوند یا خیر.

vars به شما امکان می دهد داده ها را در متغیرها ذخیره کنید. اگر تصمیم به تغییر این نام کاربری در آینده دارید، فقط باید همین خط را در فایل خود ویرایش کنید.

مرحله 3 – یک کار نصب Aptitude به Playbook خود اضافه کنید

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

همه وظایف موجود در این کتاب بازی می توانند به تنهایی بایستند و مجدداً در سایر کتاب های بازی شما مورد استفاده قرار گیرند.

اولین کار خود یعنی نصب aptitude را اضافه کنید، ابزاری برای ارتباط با مدیر بسته لینوکس:

playbook.yml

  tasks:
    - name: Install aptitude
      apt:
        name: aptitude
        state: latest
        update_cache: true

در اینجا، شما از ماژول داخلی apt Ansible برای هدایت Ansible برای نصب aptitude استفاده می کنید. ماژول ها در Ansible میانبرهایی برای اجرای عملیاتی هستند که در غیر این صورت باید به عنوان دستورات bash خام اجرا می شدند. در صورتی که استعداد در دسترس نباشد، Ansible با خیال راحت دوباره به گزینه نصب بسته‌ها می‌رود. بنابراین در حالی که این مرحله از نظر فنی اختیاری است، Ansible از نظر تاریخی استعداد را ترجیح داده است.

مرحله 4 – اضافه کردن Sudo User Setup Tasks به Playbook خود

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

playbook.yml

    - name: Setup passwordless sudo
      lineinfile:
        path: /etc/sudoers
        state: present
        regexp: '^%sudo'
        line: '%sudo ALL=(ALL) NOPASSWD: ALL'
        validate: '/usr/sbin/visudo -cf %s' 

    - name: Create a new regular user with sudo privileges
      user:
        name: "{{ created_username }}"
        state: present
        groups: sudo
        append: true
        create_home: true

شما از ماژول lineinfile Ansible برای هدف گیری و جایگزینی یک خط خاص در یک فایل استفاده می کنید. در این مورد، شما از regex برای هدف قرار دادن یک خط خاص در فایل sudoers استفاده می‌کنید و سپس آن را تغییر می‌دهید تا امکان استفاده بدون رمز عبور از sudo را فراهم کنید. شما همچنین از visudo برای تأیید تغییرات خود استفاده می کنید تا از شکستن هر چیزی جلوگیری کنید.

برای استفاده از این مزیت، یک کاربر جدید با ماژول کاربر اضافه می‌کنید. Ansible اطمینان حاصل می کند که اگر این کاربر قبلاً وجود نداشته باشد، ایجاد شده است، که کاربر به گروه sudo تعلق دارد در حالی که از گروه های دیگر حذف نمی شود، و یک فهرست خانه ایجاد می شود.

مرحله 5 – اضافه کردن SSH Key Setup و غیرفعال کردن وظایف رمز عبور ریشه به Playbook شما

Ansible با این فرض عمل می کند که از کلیدهای SSH استفاده می کنید. جفت کردن استفاده از کلید SSH با غیرفعال کردن احراز هویت رمز عبور ریشه اکیداً توصیه می شود و به طور کلی تمرین خوبی است. برای خودکار کردن این، اضافه کنید:

playbook.yml

    - name: Set authorized key for remote user
      ansible.posix.authorized_key:
        user: "{{ created_username }}"
        state: present
        key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"

    - name: Disable password authentication for root
      lineinfile:
        path: /etc/ssh/sshd_config
        state: present
        regexp: '^#?PermitRootLogin'
        line: 'PermitRootLogin prohibit-password'

اگر نام کاربری و مکان کلید را وارد کنید، ماژول authorized_key قابل استفاده است. در اینجا، مسیر به سمت کلید شما با استفاده از تابع جستجوی Ansible ساخته می شود.

ماژول lineinfile برای جستجو و جایگزینی یک خط در sshd_config به منظور غیرفعال کردن احراز هویت رمز عبور برای ریشه، محدود کردن دسترسی به امتیازات آن برای افزایش امنیت استفاده می‌شود.

مرحله 6 – یک کار نصب بسته را به Playbook خود اضافه کنید

Ansible می تواند اطمینان حاصل کند که بسته های خاصی همیشه روی سرور شما نصب می شوند. به جای فراخوانی apt install بر روی هر بسته جداگانه، یا تقسیم آن به چندین کار، می‌توانید تمام بسته‌های مورد نظر خود را فهرست کنید:

playbook.yml

    - name: Update apt and install required system packages
      apt:
        pkg:
          - curl
          - vim
          - git
          - ufw
        state: latest
        update_cache: true

می توانید بسته ها را به دلخواه خود اضافه یا حذف کنید. این اطمینان حاصل می کند که همه بسته ها نه تنها موجود هستند، بلکه در آخرین نسخه نیز وجود دارند و پس از فراخوانی به روز رسانی با apt انجام می شود.

مرحله 7 – افزودن یک کار راه اندازی فایروال به Playbook خود

فایروال برای هر سروری که با اینترنت روبرو است ضروری است. می‌توانید از Ansible اطمینان حاصل کنید که UFW (دیوار آتش بدون عارضه) به درستی پیکربندی شده است با اضافه کردن:

playbook.yml

    - name: UFW - Allow SSH connections
      community.general.ufw:
        rule: allow
        name: OpenSSH

    - name: UFW - Enable and deny by default
      community.general.ufw:
        state: enabled
        default: deny

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

مرحله 8 – کتاب راهنمای کامل خود را مرور کنید

کتاب بازی شما باید تقریباً شبیه شکل زیر باشد، با تفاوت های جزئی بسته به سفارشی سازی های شما:

playbook.yml

---
- hosts: all
  become: true
  vars:
    created_username: sammy

  tasks:
    - name: Install aptitude
      apt:
        name: aptitude
        state: latest
        update_cache: true

    - name: Setup passwordless sudo
      lineinfile:
        path: /etc/sudoers
        state: present
        regexp: '^%sudo'
        line: '%sudo ALL=(ALL) NOPASSWD: ALL'
        validate: '/usr/sbin/visudo -cf %s'

    - name: Create a new regular user with sudo privileges
      user:
        name: "{{ created_username }}"
        state: present
        groups: sudo
        append: true
        create_home: true

    - name: Set authorized key for remote user
      ansible.posix.authorized_key:
        user: "{{ created_username }}"
        state: present
        key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"

    - name: Disable password authentication for root
      lineinfile:
        path: /etc/ssh/sshd_config
        state: present
        regexp: '^#?PermitRootLogin'
        line: 'PermitRootLogin prohibit-password'

    - name: Update apt and install required system packages
      apt:
        pkg:
          - curl
          - vim
          - git
          - ufw
        state: latest
        update_cache: true

    - name: UFW - Allow SSH connections
      community.general.ufw:
        rule: allow
        name: OpenSSH

    - name: UFW - Enable and deny by default
      community.general.ufw:
        state: enabled
        default: deny

هنگامی که از کتاب بازی خود راضی شدید، می توانید از ویرایشگر متن خود خارج شده و ذخیره کنید.

مرحله 9 – Playbook خود را برای اولین بار اجرا کنید

اکنون آماده اجرای این کتاب بازی در یک یا چند سرور هستید. اکثر کتاب‌های پخش به‌طور پیش‌فرض پیکربندی شده‌اند که در هر سرور موجود در فهرست شما اجرا شوند، اما شما این بار سرور خود را مشخص می‌کنید.

برای اجرای playbook فقط در server1 که به صورت root متصل می شود، می توانید از دستور زیر استفاده کنید:

ansible-playbook playbook.yml -l server1 -u root -k

پرچم -l سرور شما را مشخص می‌کند و پرچم -u مشخص می‌کند که کدام کاربری در سرور راه دور وارد شود. از آنجایی که هنوز سرور راه دور خود را راه اندازی نکرده اید، root تنها گزینه شماست. پرچم -k در اولین اجرای playbook شما بسیار مهم است، زیرا به شما امکان می دهد رمز عبور SSH خود را وارد کنید.

خروجی مشابه این دریافت خواهید کرد:

 

Output

. . .

TASK [UFW - Allow SSH connections] ***************************************************************************************************************************************************************************************************************************
changed: [server1]

TASK [UFW - Enable and deny by default] **********************************************************************************************************************************************************************************************************************
changed: [server1]

PLAY RECAP ***************************************************************************************************************************************************************************************************************************************************
server1                    : ok=9    changed=8    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

این نشان می دهد که راه اندازی سرور شما کامل شده است! خروجی شما نباید دقیقاً یکسان باشد، اما مهم این است که هیچ شکستی نداشته باشید.

اکنون که اولین راه‌اندازی را برای کتاب پخش خود انجام داده‌اید، همه تماس‌های انتساب‌پذیر بعدی را می‌توان با کاربر sammy و بدون پرچم -k انجام داد:

ansible-playbook playbook.yml -l server1 -u sammy

همچنین می توانید با استفاده از:

 

ssh sammy@your_remote_server_ip

 

به یاد داشته باشید که sammy را با کاربر تعریف شده توسط متغیر create_username و server_host_or_IP را با نام میزبان یا آدرس IP سرور خود جایگزین کنید.

پس از ورود به سرور، می‌توانید قوانین فعال فایروال UFW را بررسی کنید تا تأیید کنید که به درستی پیکربندی شده است:

sudo ufw status

شما باید خروجی مشابه این بگیرید:

 

Output

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             

این بدان معناست که فایروال UFW با موفقیت فعال شده است. از آنجایی که این آخرین کار در playbook بود، تأیید می کند که playbook به طور کامل در این سرور اجرا شده است.

نتیجه

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

در این راهنما، نحوه استفاده از Ansible را برای خودکارسازی کارهای اولیه که باید در یک سرور تازه اجرا شوند، مانند ایجاد یک کاربر غیر ریشه با دسترسی sudo، فعال کردن UFW و غیرفعال کردن ورود به سیستم ریشه مبتنی بر رمز عبور از راه دور، نشان دادید.

برای اطلاعات بیشتر در مورد نحوه اجرای کتاب های بازی Ansible، راهنمای برگه تقلب Ansible ما را بررسی کنید.

اگر می‌خواهید برای سفارشی‌سازی بیشتر تنظیمات اولیه سرور خود، وظایف جدیدی را در این کتاب بازی اضافه کنید، لطفاً به راهنمای مقدماتی Ansible Configuration Management 101: Writing Ansible Playbooks مراجعه کنید. همچنین می توانید راهنمای ما در مورد نحوه استفاده از نقش های Ansible برای انتزاع محیط زیرساخت خود را بررسی کنید.

 

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

اوبونتو 20.04تنظیم کلیدهای SSH در اوبونتو 20.04تنظیمات اولیه سرورتنظیمات اولیه سرور در اوبونتو 20.04خرید سرور مجازیخودکارسازی تنظیمات اولیه سرورراه اندازی اولیه سرورراه اندازی سرور مجازیسرور مجازی آلماننحوه استفاده از Ansible

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه راه اندازی پلتفرم Eclipse Theia Cloud IDE در vpsgol Kubernetes

ورود به سایت

معرفی

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

Eclipse Theia یک IDE ابری توسعه پذیر است که روی یک سرور راه دور اجرا می شود و از یک مرورگر وب قابل دسترسی است. از نظر بصری، به گونه‌ای طراحی شده است که شبیه به Microsoft Visual Studio Code به نظر برسد و رفتاری مشابه داشته باشد، به این معنی که از بسیاری از زبان‌های برنامه‌نویسی پشتیبانی می‌کند، طرح‌بندی انعطاف‌پذیری دارد و ترمینال یکپارچه دارد. آنچه Eclipse Theia را از سایر نرم افزارهای Cloud IDE جدا می کند، توسعه پذیری آن است. می توان آن را با استفاده از پسوندهای سفارشی تغییر داد، که به شما امکان می دهد یک IDE ابری متناسب با نیازهای خود ایجاد کنید.

در این آموزش، شما نسخه پیش‌فرض پلت‌فرم Eclipse Theia ابری IDE را در خوشه vpsgol Kubernetes خود راه‌اندازی می‌کنید و آن را در دامنه خود، با گواهی‌های Let’s Encrypt ایمن می‌کنید و از بازدیدکننده برای احراز هویت می‌خواهد. در پایان، Eclipse Theia را خواهید داشت که روی خوشه Kubernetes شما از طریق HTTPS در دسترس است و بازدیدکننده را ملزم به ورود به سیستم می‌کند.

پیش نیازها

  • یک خوشه vpsgol Kubernetes با اتصال شما به عنوان پیش فرض kubectl پیکربندی شده است. دستورالعمل های مربوط به نحوه پیکربندی kubectl در مرحله اتصال به خوشه خود هنگام ایجاد خوشه نشان داده می شود.
  • مدیریت بسته Helm 3 بر روی دستگاه محلی شما نصب شده است.
  • Nginx Ingress Controller با استفاده از Helm برای استفاده از ExternalDNS با منابع Ingress بر روی خوشه شما نصب شده است.
  • یک نام دامنه کاملاً ثبت شده این آموزش از theia.your_domain در سرتاسر استفاده خواهد کرد. می توانید یک نام دامنه را در Namecheap خریداری کنید، یک نام دامنه را به صورت رایگان در Freenom دریافت کنید، یا از ثبت کننده دامنه انتخابی خود استفاده کنید.

مرحله 1 – نصب و نمایش Eclipse Theia

برای شروع، Eclipse Theia را در خوشه vpsgol Kubernetes خود نصب خواهید کرد. سپس با استفاده از Nginx Ingress آن را در دامنه مورد نظر خود در معرض دید قرار خواهید داد.

از آنجایی که شما دو نمونه استقرار و یک منبع را به عنوان بخشی از پیش نیازها ایجاد کردید، می توانید آزادانه آنها را با اجرای دستورات زیر حذف کنید:

kubectl delete -f hello-kubernetes-ingress.yaml

kubectl delete -f hello-kubernetes-first.yaml

kubectl delete -f hello-kubernetes-second.yaml

برای این آموزش، پیکربندی استقرار را در دستگاه محلی خود در فایلی به نام eclipse-theia.yaml ذخیره خواهید کرد. با استفاده از دستور زیر آن را ایجاد کنید:

nano eclipse-theia.yaml

خطوط زیر را به فایل اضافه کنید:

eclipse-theia.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: theia
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: theia-next
  namespace: theia
spec:
  ingressClassName: nginx
  rules:
  - host: theia.your_domain
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: theia-next
            port:
              number: 80
---
apiVersion: v1
kind: Service
metadata:
 name: theia-next
 namespace: theia
spec:
 ports:
 - port: 80
   targetPort: 3000
 selector:
   app: theia-next
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: theia-next
  name: theia-next
  namespace: theia
spec:
  selector:
    matchLabels:
      app: theia-next
  replicas: 1
  template:
    metadata:
      labels:
        app: theia-next
    spec:
      containers:
      - image: francoisvans/theia-docker-test
        imagePullPolicy: Always
        name: theia-next
        ports:
        - containerPort: 3000

این پیکربندی یک فضای نام، یک استقرار، یک سرویس و یک ورودی را تعریف می کند. فضای نام تیا نامیده می شود و شامل تمام اشیای Kubernetes مربوط به Eclipse Theia است که از بقیه خوشه جدا شده اند. استقرار شامل یک نمونه از تصویر Theia Docker است که پورت 3000 روی کانتینر قرار دارد. این سرویس به دنبال Deployment می‌گردد و پورت کانتینر را به پورت HTTP معمولی 80 تغییر می‌دهد و به Eclipse Theia اجازه دسترسی درون خوشه‌ای را می‌دهد.

Ingress حاوی قانونی برای ارائه سرویس در پورت 80 به صورت خارجی در دامنه مورد نظر شما است. در حاشیه نویسی آن، شما مشخص می کنید که Nginx Ingress Controller باید برای پردازش درخواست استفاده شود. به یاد داشته باشید که دامنه مورد نظر خود را که به Load Balancer کلاستر خود اشاره کرده اید جایگزین theia.your_domain کنید، سپس فایل را ذخیره کرده و ببندید.

فایل را ذخیره کرده و از آن خارج شوید.

سپس با اجرای دستور زیر پیکربندی را در Kubernetes ایجاد کنید:

kubectl apply -f eclipse-theia.yaml

خروجی شبیه به این خواهد بود:

 

Output

namespace/theia created
ingress.networking.k8s.io/theia-next created
service/theia-next created
deployment.apps/theia-next created

می‌توانید با اجرای زیر، ایجاد غلاف Eclipse Theia را تماشا کنید:

kubectl get pods -w -n theia

خروجی به شکل زیر خواهد بود:

 

Output

NAME                          READY   STATUS    RESTARTS   AGE
theia-next-6f6b98dd4f-qknhb   1/1     Running   0          2m30s

پس از مدتی، وضعیت به RUNNING تبدیل می‌شود، به این معنی که Eclipse Theia را با موفقیت در کلاستر خود نصب کرده‌اید.

در مرورگر خود به دامنه خود بروید. رابط کاربری گرافیکی ویرایشگر Eclipse Theia پیش‌فرض را خواهید دید:

 

شما Eclipse Theia را در خوشه vpsgol Kubernetes خود مستقر کرده اید و با یک Ingress آن را در دامنه مورد نظر خود قرار داده اید. در مرحله بعد، با فعال کردن احراز هویت ورود، دسترسی به استقرار Eclipse Theia خود را ایمن خواهید کرد.

مرحله 2 – فعال کردن احراز هویت ورود به سیستم برای دامنه شما

در این مرحله، احراز هویت نام کاربری و رمز عبور را برای استقرار Eclipse Theia خود فعال می‌کنید. ابتدا با تنظیم لیستی از ترکیبات ورود معتبر با استفاده از ابزار htpasswd به این مهم دست خواهید یافت. سپس، یک راز Kubernetes حاوی آن لیست ایجاد می‌کنید و Ingress را برای احراز هویت بازدیدکنندگان بر اساس آن پیکربندی می‌کنید. در پایان، دامنه شما تنها زمانی قابل دسترسی خواهد بود که بازدیدکننده یک ترکیب نام کاربری و رمز عبور معتبر وارد کند. این امر از دسترسی مهمانان و سایر بازدیدکنندگان ناخواسته به Eclipse Theia جلوگیری می کند.

ابزار htpasswd از وب سرور آپاچی می آید و برای ایجاد فایل هایی استفاده می شود که لیست هایی از ترکیبات ورود را ذخیره می کنند. فرمت فایل‌های htpasswd یک نام کاربری: ترکیب hashed_password در هر خط است، که فرمتی است که Nginx Ingress Controller انتظار دارد لیست با آن مطابقت داشته باشد.

ابتدا حافظه پنهان بسته منیجر را به روز کنید:

sudo apt update

سپس htpasswd را با اجرای دستور زیر بر روی سیستم خود نصب کنید:

sudo apt install apache2-utils -y

شما لیست را در فایلی به نام auth ذخیره خواهید کرد. آن را با اجرا ایجاد کنید:

touch auth

این فایل باید auth نامیده شود زیرا کنترلر ورودی Nginx انتظار دارد که رمز حاوی کلیدی به نام data.auth باشد. اگر از دست رفته باشد، کنترل‌کننده وضعیت HTTP 503 Service Unavailable را برمی‌گرداند.

با اجرای دستور زیر یک ترکیب نام کاربری و رمز عبور به aut اضافه کنید:

htpasswd auth username

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

پس از اتمام کار، با اجرای دستور زیر یک راز جدید در Kubernetes با محتویات فایل ایجاد کنید:

kubectl create secret generic theia-basic-auth –from-file=auth -n theia

شما می توانید راز را با:

kubectl get secret theia-basic-auth -o yaml -n theia

خروجی به صورت زیر خواهد بود:

 

Output

apiVersion: v1
data:
  auth: ...
kind: Secret
metadata:
  creationTimestamp: "2021-12-31T17:16:29Z"
  name: theia-basic-auth
  namespace: theia
  resourceVersion: "32437"
  uid: 47461e23-e281-411b-acfd-cea82fcde41b
type: Opaque

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

nano eclipse-theia.yaml

خطوط هایلایت شده را به فایل خود اضافه کنید:

eclipse-theia.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: theia
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: theia-next
  namespace: theia
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: theia-basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - Eclipse Theia'
spec:
  ingressClassName: nginx
  rules:
  - host: theia.your_domain
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: theia-next
            port:
              number: 80
...

ابتدا در حاشیه نویسی auth-type مشخص می کنید که نوع احراز هویت اولیه است. این بدان معنی است که Nginx از کاربر می خواهد که نام کاربری و رمز عبور را وارد کند. سپس، در auth-secret، مشخص می‌کنید که راز حاوی لیست ترکیبات معتبر theia-basic-auth است که به تازگی ایجاد کرده‌اید. حاشیه نویسی قلمرو اعتبار باقی مانده پیامی را مشخص می کند که به عنوان توضیحی در مورد اینکه چرا احراز هویت لازم است به کاربر نشان داده می شود. می توانید پیام موجود در این قسمت را به دلخواه تغییر دهید.

ذخیره کنید و فایل را ببندید.

برای انتشار تغییرات در کلاستر خود، دستور زیر را اجرا کنید:

kubectl apply -f eclipse-theia.yaml

خروجی را خواهید دید:

 

Output

namespace/theia unchanged
ingress.networking.k8s.io/theia-next configured
service/theia-next unchanged
deployment.apps/theia-next unchanged

در مرورگر خود به دامنه خود بروید، جایی که اکنون از شما خواسته می شود وارد شوید.

شما احراز هویت اولیه ورود به سیستم را در Ingress خود با پیکربندی آن برای استفاده از رمز حاوی ترکیب نام کاربری و رمز عبور هش شده فعال کرده اید. در مرحله بعدی، با افزودن گواهی‌های TLS، دسترسی بیشتری را ایمن می‌کنید تا ترافیک بین شما و استقرار Eclipse Theia رمزگذاری شده باقی بماند.

مرحله 3 – اعمال مجوزهای HTTPS Let’s Encrypt

در مرحله بعد، نصب Eclipse Theia خود را با اعمال گواهینامه های Let’s Encrypt در Ingress خود، که Cert-Manager به طور خودکار ارائه می کند، ایمن می کنید. پس از تکمیل این مرحله، نصب Eclipse Theia شما از طریق HTTPS قابل دسترسی خواهد بود.

برای ویرایش eclipse-theia.yaml را باز کنید:

nano eclipse-theia.yaml

خطوط هایلایت شده را به فایل خود اضافه کنید، مطمئن شوید که دامنه جای جای خود را جایگزین کنید:

eclipse-theia.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: theia
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: theia-next
  namespace: theia
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: theia-basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - Eclipse Theia'
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  tls:
  - hosts:
    - theia.your_domain
    secretName: theia-prod
  ingressClassName: nginx
  rules:
  - host: theia.your_domain
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: theia-next
            port:
              number: 80
...

ابتدا، letsencrypt-prod ClusterIssuer را که ایجاد کرده اید به عنوان بخشی از پیش نیازها به عنوان صادرکننده مشخص می کنید که برای ارائه گواهینامه برای این ورود استفاده می شود. سپس، در بخش tls، دامنه دقیقی را که باید ایمن شود، و همچنین نامی برای رازی که این گواهینامه ها را نگه می دارد، مشخص می کنید.

فایل را ذخیره کرده و از آن خارج شوید.

با اجرای دستور زیر تغییرات را در کلاستر خود اعمال کنید:

kubectl apply -f eclipse-theia.yaml

خروجی به صورت زیر خواهد بود:

 

Output

namespace/theia unchanged
ingress.networking.k8s.io/theia-next configured
service/theia-next unchanged
deployment.apps/theia-next unchanged

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

kubectl describe certificate theia-prod -n theia

وقتی تمام شد، انتهای خروجی شبیه به این خواهد بود:

 

Output

...
Events:
  Type    Reason        Age   From          Message
  ----    ------        ----  ----          -------
  Normal  GeneratedKey  42m   cert-manager  Generated a new private key
  Normal  Requested     42m   cert-manager  Created new CertificateRequest resource "theia-prod-3785736528"
  Normal  Issued        42m   cert-manager  Certificate issued successfully

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

شما Ingress را برای استفاده از گواهی‌های Let’s Encrypt پیکربندی کرده‌اید، بنابراین استقرار Eclipse Theia را ایمن‌تر می‌کنید. اکنون می توانید رابط کاربری پیش فرض Eclipse Theia را بررسی کنید.

مرحله 4 – استفاده از رابط Eclipse Theia

در این بخش، برخی از ویژگی های رابط Eclipse Theia را بررسی خواهید کرد.

در سمت چپ IDE، یک ردیف عمودی از چهار دکمه وجود دارد که متداول‌ترین ویژگی‌های مورد استفاده را در یک پانل کناری باز می‌کند.

این نوار قابل تنظیم است، بنابراین می توانید این نماها را به ترتیب دیگری منتقل کنید یا آنها را از نوار حذف کنید. به طور پیش فرض، اولین نمای پانل Explorer را باز می کند که ناوبری درخت مانند ساختار پروژه را ارائه می دهد. می‌توانید پوشه‌ها و فایل‌های خود را در اینجا مدیریت کنید—در صورت لزوم آنها را ایجاد، حذف، جابجا کنید و نام آنها را تغییر دهید.

پس از ایجاد یک فایل جدید از طریق منوی File، یک فایل خالی را خواهید دید که در یک تب جدید باز می شود. پس از ذخیره، می توانید نام فایل را در پانل کناری Explorer مشاهده کنید. برای ایجاد پوشه، روی نوار کناری Explorer راست کلیک کرده و روی New Folder کلیک کنید. می‌توانید یک پوشه را با کلیک کردن روی نام آن و همچنین کشیدن و رها کردن فایل‌ها و پوشه‌ها به قسمت‌های بالای سلسله مراتب گسترش دهید تا آنها را به مکان جدیدی منتقل کنید.

گزینه بعدی دسترسی به قابلیت جستجو و جایگزینی را فراهم می کند. به دنبال آن، مورد بعدی نمایی از سیستم های کنترل منبعی را که ممکن است از آنها استفاده می کنید، مانند Git ارائه می دهد.

نمای بعدی گزینه debugger است که تمام اقدامات رایج برای رفع اشکال در پنل را ارائه می دهد. می توانید پیکربندی های اشکال زدایی را در فایل launch.json ذخیره کنید.

گزینه نهایی به شما امکان می دهد برنامه های افزودنی را مشاهده و نصب کنید:

بخش مرکزی رابط کاربری گرافیکی ویرایشگر شما است که می توانید آن را با برگه هایی برای ویرایش کد خود جدا کنید. می توانید نمای ویرایش خود را به یک سیستم شبکه ای یا به فایل های کنار هم تغییر دهید. مانند همه IDE های مدرن، Eclipse Theia از برجسته سازی نحو برای کد شما پشتیبانی می کند.

بخش مرکزی رابط کاربری گرافیکی ویرایشگر شما است که می توانید آن را با برگه هایی برای ویرایش کد خود جدا کنید. می توانید نمای ویرایش خود را به یک سیستم شبکه ای یا به فایل های کنار هم تغییر دهید. مانند همه IDE های مدرن، Eclipse Theia از برجسته سازی نحو برای کد شما پشتیبانی می کند.

اگر می خواهید استقرار Eclipse Theia را در کلاستر خود از بین ببرید، دستور زیر را اجرا کنید:

kubectl delete -f eclipse-theia.yaml

شما یک نمای کلی سطح بالا از رابط Eclipse Theia را بررسی کرده اید و برخی از متداول ترین ویژگی های مورد استفاده را مرور کرده اید.

نتیجه

اکنون Eclipse Theia، یک IDE ابری همه کاره، را روی خوشه vpsgol Kubernetes خود نصب کرده اید. شما آن را با یک گواهی رایگان Let’s Encrypt TLS ایمن کرده اید و نمونه ای را برای نیاز به ورود از بازدیدکننده تنظیم کرده اید. می توانید روی کد منبع و اسناد خود به صورت جداگانه کار کنید یا با تیم خود همکاری کنید.

 

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

برچسب‌ها:ایجاد سرور مجازیخرید سرور مجازیخرید سرور مجازی فرانسهراه اندازی سرور مجازیسرور مجازینحوه راه اندازی پلتفرم Eclipse Theia Cloud IDEنصب Eclipse Theia

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه نصب و مدیریت Supervisor

ورود به سایت

معرفی

در بسیاری از محیط‌های VPS، معمولاً تعدادی برنامه کوچک خواهید داشت که می‌خواهید دائماً اجرا کنید، چه اسکریپت‌های پوسته کوچک، برنامه‌های Node.js یا هر بسته‌ای با اندازه بزرگ.

معمولاً بسته‌های خارجی با یک فایل واحد عرضه می‌شوند که به آنها اجازه می‌دهد توسط یک سیستم init مانند systemd مدیریت شوند یا به‌عنوان تصاویر docker بسته‌بندی شوند که می‌توانند توسط یک موتور کانتینر مدیریت شوند. با این حال، برای نرم افزارهایی که به خوبی بسته بندی نشده اند، یا برای کاربرانی که ترجیح می دهند با سیستم init سطح پایین روی سرور خود تعامل نداشته باشند، داشتن یک جایگزین سبک مفید است.

Supervisor یک مدیر فرآیند است که یک رابط منحصر به فرد برای مدیریت و نظارت بر تعدادی از برنامه های طولانی مدت ارائه می دهد. در این آموزش، Supervisor را بر روی یک سرور لینوکس نصب می‌کنید و یاد می‌گیرید که چگونه تنظیمات Supervisor را برای چندین برنامه مدیریت کنید.

پیش نیازها

برای تکمیل این راهنما، شما نیاز دارید:

  • یک سرور لینوکس و یک کاربر غیر ریشه با امتیازات sudo.

مرحله 1 – نصب

با نصب Supervisor شروع کنید:

sudo apt install supervisor

سرویس سرپرست پس از نصب به طور خودکار اجرا می شود. می توانید وضعیت آن را بررسی کنید:

sudo systemctl status supervisor

شما باید خروجی زیر را دریافت کنید:

 

Output

● supervisor.service - Supervisor process control system for UNIX
     Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2021-11-17 22:56:48 UTC; 5min ago

اکنون که Supervisor را نصب کرده ایم، می توانیم اولین برنامه های خود را اضافه کنیم.

مرحله 2 – اضافه کردن یک برنامه

بهترین روش برای کار با Supervisor نوشتن یک فایل پیکربندی برای هر برنامه ای است که مدیریت می کند.

به منظور نشان دادن عملکرد Supervisor، ما یک اسکریپت پوسته ایجاد می کنیم که کاری جز تولید یک خروجی قابل پیش بینی در ثانیه انجام نمی دهد، اما به طور مداوم در پس زمینه اجرا می شود تا زمانی که به صورت دستی متوقف شود. با استفاده از nano یا ویرایشگر متن مورد علاقه خود، فایلی به نام idle.sh را در فهرست اصلی خود باز کنید:

nano ~/idle.sh

مطالب زیر را اضافه کنید:

~/idle.sh

#!/bin/bash
while true
do
    # Echo current date to stdout
    echo `date`
    # Echo 'error!' to stderr
    echo 'error!' >&2
    sleep 1
done

ذخیره کنید و فایل را ببندید. اگر از nano استفاده می کنید، Ctrl+X را فشار دهید، سپس وقتی از شما خواسته شد، Y و Enter را فشار دهید.

بعد، اسکریپت خود را قابل اجرا کنید:

chmod +x ~/idle.sh

فایل های پیکربندی هر برنامه برای برنامه های Supervisor در دایرکتوری /etc/supervisor/conf.d قرار دارند، معمولاً یک برنامه در هر فایل اجرا می شود و به .conf ختم می شود. ما یک فایل پیکربندی برای این اسکریپت به عنوان`/etc/supervisor/conf.d/idle.conf ایجاد می کنیم:

sudo nano /etc/supervisor/conf.d/idle.conf

این مطالب را اضافه کنید:

/etc/supervisor/conf.d/idle.conf

command=/home/ubuntu/idle.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/idle.err.log
stdout_logfile=/var/log/idle.out.log

این را خط به خط مرور می کنیم:

command=/home/ubuntu/idle.sh

پیکربندی با تعریف برنامه ای با نام بیکار و مسیر کامل برنامه شروع می شود:

autostart=true
autorestart=true

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

گزینه autostart به Supervisor می گوید که این برنامه باید هنگام بوت شدن سیستم راه اندازی شود. تنظیم این مورد روی false به شروع دستی پس از خاموش شدن سیستم نیاز دارد.

autorestart تعریف می کند که چگونه Supervisor باید برنامه را در صورت خروج از آن مدیریت کند:

false به Supervisor می‌گوید که پس از خروج برنامه هرگز آن را مجددا راه‌اندازی نکند.
true به Supervisor می گوید که همیشه برنامه را پس از خروج مجدداً راه اندازی کند.
unexpected به Supervisor می گوید که فقط در صورتی برنامه را مجدداً راه اندازی کند که با یک کد خطای غیرمنتظره (به طور پیش فرض هر چیزی غیر از کدهای 0 یا 2) خارج شود. برای کسب اطلاعات بیشتر در مورد کدهای خطا، به دستور errno نگاه کنید.

stderr_logfile=/var/log/idle.err.log
stdout_logfile=/var/log/idle.out.log

دو خط پایانی مکان دو فایل لاگ اصلی را برای برنامه مشخص می کند. همانطور که توسط نام گزینه پیشنهاد می شود، stdout و stderr به ترتیب به مکان های stdout_logfile و stderr_logfile هدایت می شوند. دایرکتوری های مشخص شده باید از قبل وجود داشته باشند، زیرا Supervisor سعی نخواهد کرد هیچ دایرکتوری گمشده ای ایجاد کند.

پیکربندی که ما در اینجا ایجاد کرده ایم یک الگوی حداقلی برای یک برنامه Supervisor است. اسناد Supervisor بسیاری از گزینه های پیکربندی اختیاری دیگر را فهرست می کند که برای تنظیم نحوه اجرای برنامه ها در دسترس هستند.

هنگامی که فایل پیکربندی ما ایجاد و ذخیره شد، می توانیم از طریق دستور supervisorctl برنامه جدید خود را به Supervisor اطلاع دهیم. ابتدا به Supervisor می‌گوییم که به دنبال تنظیمات برنامه جدید یا تغییر یافته در فهرست /etc/supervisor/conf.d با استفاده از:

sudo supervisorctl reread

 

Output

idle: available

هر زمان که تغییری در هر فایل پیکربندی برنامه ایجاد می کنید، اجرای دو دستور قبلی تغییرات را اعمال می کند.

در این مرحله برنامه ما اکنون باید در حال اجرا باشد. ما می توانیم خروجی آن را با مشاهده فایل گزارش خروجی بررسی کنیم:

sudo tail /var/log/idle.out.log

 

Output

Sat Nov 20 22:21:22 UTC 2021
Sat Nov 20 22:21:23 UTC 2021
Sat Nov 20 22:21:24 UTC 2021
Sat Nov 20 22:21:25 UTC 2021
Sat Nov 20 22:21:26 UTC 2021
Sat Nov 20 22:21:27 UTC 2021
Sat Nov 20 22:21:28 UTC 2021
Sat Nov 20 22:21:29 UTC 2021
Sat Nov 20 22:21:30 UTC 2021
Sat Nov 20 22:21:31 UTC 2021

در مرحله بعد، برخی دیگر از کاربردهای Supervisor را پوشش خواهیم داد.

مرحله 3 – مدیریت برنامه ها

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

برای وارد شدن به حالت تعاملی، supervisorctl را بدون آرگومان اجرا کنید:

sudo supervisorctl

supervisorctl در ابتدا وضعیت و زمان آپدیت تمام برنامه های پیکربندی شده را چاپ می کند و سپس خط فرمان آن را چاپ می کند. با وارد کردن راهنما، تمام دستورات موجود آن آشکار می‌شود:

supervisor> help

 

Output

default commands (type help <topic>):
=====================================
add    clear  fg        open  quit    remove  restart   start   stop  update
avail  exit   maintail  pid   reload  reread  shutdown  status  tail  version

شما می توانید یک برنامه را با دستورات مرتبط به دنبال نام برنامه شروع یا متوقف کنید:

supervisor> stop idle

 

Output

idle: stopped

supervisor> start idle

 

Output

idle: started

با استفاده از دستور tail، می‌توانید آخرین ورودی‌های فهرست‌های stdout و stderr را برای برنامه خود مشاهده کنید:

supervisor> tail idle

 

Output

Sun Nov 21 00:36:10 UTC 2021
Sun Nov 21 00:36:11 UTC 2021
Sun Nov 21 00:36:12 UTC 2021
Sun Nov 21 00:36:13 UTC 2021
Sun Nov 21 00:36:14 UTC 2021
Sun Nov 21 00:36:15 UTC 2021
Sun Nov 21 00:36:17 UTC 2021

supervisor> tail idle stderr

 

Output

error!
error!
error!
error!
error!
error!
error!

با استفاده از وضعیت می توانید پس از ایجاد هر گونه تغییر، وضعیت اجرای فعلی هر برنامه را دوباره مشاهده کنید:

supervisor> status

 

Output

idle                      STOPPED    Nov 21 01:07 AM

در نهایت، می‌توانید با Ctrl+C یا با وارد کردن quit در فرمان از supervisorctl خارج شوید:

supervisor> quit

نتیجه

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

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

 

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

برچسب‌ها:Supervisorبرنامه supervisorctlپیکربندی Nginxخرید vpsخرید سرور مجازیراه اندازی سرور مجازیسرور مجازیسرور مجازی آمریکا

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه راه اندازی یک شمارنده بازدید وب سایت با Redis و PHP در اوبونتو 20.04

ورود به سایت

معرفی

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

برای پیگیری بازدیدها، برنامه آمارگیری ضربه به شکلی از پایگاه داده نیاز دارد. در حالی که سیستم های مدیریت پایگاه داده مبتنی بر دیسک مانند MySQL می توانند کار کنند، یک پایگاه داده در حافظه از نظر سرعت، عملکرد، مقیاس پذیری، سادگی و سهولت استفاده بهتر است. اینجاست که سرور Redis وارد عمل می شود. Redis داده ها را به جای ضربه زدن به دیسک هر بار که یک عملیات ورودی/خروجی انجام می دهید، در رم کامپیوتر شما ذخیره می کند. این باعث افزایش قابل توجهی می شود.

برای ردیابی بازدیدهای سایت خود، به یک نقشه هش Redis نیاز دارید. این یک ساختار داده است که یک جفت کلید-مقدار را پیاده سازی می کند. نقشه هش یک جدول هش ارائه می دهد که کلیدها را به مقادیر نگاشت می کند. هنگامی که کاربر از صفحه وب شما بازدید می کند، کلیدی را بر اساس آدرس IP عمومی یا نام کاربری (برای کاربران تأیید شده) ایجاد می کنید و سپس تعداد بازدیدهای او را به مقدار 1 مقداردهی می کنید. سپس، هر بار که کاربر مجدداً از صفحه وب شما بازدید می کند. کل بازدیدهای آنها را از نقشه هش Redis بر اساس آدرس IP/نام کاربری آنها بررسی می کنید و مقدار را افزایش می دهید.

 

پیش نیازها

برای دنبال کردن این راهنما، مطمئن شوید که موارد زیر را دارید:

  • یک سرور اوبونتو 20.04 که با استفاده از راه اندازی اولیه سرور با راهنمای اوبونتو 20.04 پیکربندی شده است.
  • یک کاربر غیر ریشه با امتیازات sudo..
  • آپاچی و پی اچ پی.
  • سرور Redis

مرحله 1 – نصب برنامه افزودنی PHP Redis

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

قبل از نصب برنامه افزودنی Redis، فهرست اطلاعات بسته Ubuntu خود را بازخوانی کنید:

sudo apt update

سپس دستور زیر را برای نصب php-redis اجرا کنید. برنامه افزودنی یک API برای برقراری ارتباط با ذخیره‌سازی کلید ارزش سرور Redis ارائه می‌کند:

sudo apt install -y php-redis

برای بارگیری افزونه جدید، آپاچی را مجددا راه اندازی کنید:

sudo systemctl restart apache2

اکنون یک پسوند PHP نصب کرده اید که با سرور Redis شما صحبت می کند. در مرحله بعد، یک صفحه وب test.php در زیر فهرست اصلی وب سرور آپاچی ایجاد خواهید کرد. این فقط یک فایل نمونه است که بازدیدکنندگان هنگام بازدید از وب سایت شما با مرورگر درخواست می کنند. در زیر سرپوش، فایل صفحه test.php یک اسکریپت hit_counter.php را بارگیری می کند که بعداً برای پیگیری بازدید از صفحه با استفاده از سرور Redis ایجاد خواهید کرد.

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

در پنجره ترمینال خود، از nano برای ایجاد یک فایل test.php جدید در زیر پوشه اصلی وب سرور خود /var/www/html/ استفاده کنید:

sudo nano /var/www/html/test.php

سپس اطلاعات زیر را در فایل test.php وارد کنید:

/var/www/html/test.php

<?php
  require_once 'hit_counter.php';
?>

<!DOCTYPE html>
<html>

  <head>
    <title>Sample Test Page</title>
  </head>

  <body>
    <h1>Sample test page</h1>
    <p>This is a sample test page.</p>
  </body>

</html>

پس از اتمام ویرایش فایل را ذخیره کرده و ببندید. در این مرحله، یک صفحه وب ساده HTML ایجاد کرده‌اید که هنگام بازدید، فایل hit_counter.php را بارگیری می‌کند. در مرحله بعد، فایل hit_counter.php را برای ردیابی بازدیدهای صفحه آزمایشی کدنویسی می کنید.

مرحله 2 – ایجاد یک اسکریپت شمارنده ضربه Redis

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

شما در این راهنما همان استراتژی را اعمال خواهید کرد. شما یک فایل hit_counter.php ایجاد خواهید کرد که می توانید آن را در هر صفحه وب که نیاز به ردیابی بازدیدکنندگان دارد قرار دهید.

در این فایل، از کتابخانه php-redis برای اتصال به سرور Redis از PHP استفاده خواهید کرد. سپس، یک نقشه هش Redis برای ذخیره تعداد بازدیدهایی که یک بازدیدکننده از وب سایت شما داشته است ایجاد می کنید. شما از آدرس های IP منحصر به فرد بازدیدکنندگان به عنوان کلیدهای Redis برای تشخیص تعداد بازدید بازدیدکنندگان در سرور Redis استفاده خواهید کرد.

در پنجره ترمینال خود، یک فایل hit_counter.php جدید را با استفاده از nano برای اهداف ویرایش باز کنید:

sudo nano /var/www/html/hit_counter.php

با ایجاد فایل hit_counter.php، یک تگ جدید PHP <?php را باز کنید. سپس، در داخل یک بلوک try { کد زیر را برای اتصال به سرور Redis محلی خود در پورت 6379 وارد کنید. EXAMPLE_PASSWORD را با رمز احراز هویت سرور Redis جایگزین کنید:

/var/www/html/hit_counter.php

<?php

    try {

        $redis = new Redis();
        $redis->connect('127.0.0.1', 6379);
        $redis->auth('EXAMPLE_PASSWORD');

سپس، به نقشه هش Redis ($siteVisitsMap) یک نام دلخواه بدهید. این راهنما از siteStats برای اهداف نمایشی استفاده می کند:

/var/www/html/hit_counter.php

$siteVisitsMap = 'siteStats';

پس از تعریف نقشه هش Redis، اکنون یک کلید خالی Redis ($visitorHashKey) را مقداردهی اولیه می کنید. سپس، آن را با آدرس های IP بازدیدکنندگان پر می کنید. شما از مقدار متغیر $visitorHashKey برای شناسایی منحصر به فرد هر بازدید کننده ای که صفحه وب شما را درخواست می کند استفاده می کنید:

/var/www/html/hit_counter.php

$visitorHashKey = '';

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {

    $visitorHashKey = $_SERVER['HTTP_CLIENT_IP'];

} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {

    $visitorHashKey = $_SERVER['HTTP_X_FORWARDED_FOR'];

} else {

    $visitorHashKey = $_SERVER['REMOTE_ADDR'];
}

در این کد، شما از دستور PHP if برای تعیین آدرس IP بازدیدکننده با بررسی اینکه آیا متغیرهای $_SERVER[‘HTTP_CLIENT_IP’]، $_SERVER[‘HTTP_X_FORWARDED_FOR’]، یا $_SERVER[‘REMOTE_ADDR’] پر شده اند، استفاده می کنید.

پس از این، یک متغیر $totalVisits را مقداردهی اولیه کنید تا کل بازدیدها برای هر آدرس IP ذخیره شود و مقدار 0 به آن اختصاص دهید. سپس از PHP if (…) {…} else {…} و $redis استفاده کنید. ->hExists($siteVisitsMap، $visitorHashKey) برای بررسی اینکه آیا آدرس IP ورودی هایی در سرور Redis دارد یا خیر.

شما از عبارت if ($redis->hExists($siteVisitsMap، $visitorHashKey)) {…} برای بررسی اینکه آیا $visitorHashKey در نقشه ای به نام $siteVisitsMap وجود دارد استفاده خواهید کرد.

در صورتی که نقشه و کلید با آدرس IP نامگذاری شده در سرور Redis وجود دارد، آن را با عبارت $visitorData = $redis->hMget($siteVisitsMap, array($visitorHashKey)) بازیابی کنید. و از $totalVisits = $visitorData[$visitorHashKey] + 1 استفاده کنید. برای افزایش متغیر $totalVisits. شما از دستور $redis->hMget برای دریافت داده های تعداد ضربه مرتبط با یک آدرس IP استفاده می کنید. تابع hMget نام نقشه شما ($siteVisitsMap) و آرایه ای از کلیدهایی را که می خواهید از سرور Redis بازیابی کنید، می پذیرد. در این مورد، شما فقط یک کلید دارید ($visitorHashKey)، اما باید آن را با استفاده از دستور array ($visitorHashKey) به یک آرایه تبدیل کنید.

در صورتی که اسکریپت شما برای اولین بار با آدرس IP مواجه شد، متغیر $totalVisits را روی 1 قرار دهید. در نهایت، از $redis->hSet($siteVisitsMap, $visitorHashKey, $totalVisits) استفاده کنید. برای تنظیم مقدار $visitorHashKey مطابق نتایج عبارت if (…) {…} else {…} قبلی. دستور $redis->hSet($siteVisitsMap، $visitorHashKey، $totalVisits) یک نقشه هش $siteVisitsMap در سرور Redis با کلیدی به نام $visitorHashKey با مقدار $totalVisits ایجاد می‌کند.

سپس با تکرار کل بازدیدها به بازدیدکننده خوش آمد گویید و بلوک } catch (…) {…} را ببندید:

/var/www/html/hit_counter.php

$totalVisits = 0;

    if ($redis->hExists($siteVisitsMap, $visitorHashKey)) {

        $visitorData = $redis->hMget($siteVisitsMap, array($visitorHashKey));
        $totalVisits = $visitorData[$visitorHashKey] + 1;

    } else {

        $totalVisits = 1;

    }

    $redis->hSet($siteVisitsMap, $visitorHashKey, $totalVisits);

    echo "Welcome, you've visited this page " .  $totalVisits . " times\n";

} catch (Exception $e) {
    echo $e->getMessage();
}

پس از تکمیل، فایل /var/www/html/hit_counter.php شما باید شبیه کد زیر باشد:

/var/www/html/hit_counter.php

<?php

    try {

        $redis = new Redis();
        $redis->connect('127.0.0.1', 6379);
        $redis->auth('EXAMPLE_PASSWORD');

        $siteVisitsMap  = 'siteStats';
        $visitorHashKey = '';

        if (!empty($_SERVER['HTTP_CLIENT_IP'])) {

           $visitorHashKey = $_SERVER['HTTP_CLIENT_IP'];

        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {

           $visitorHashKey = $_SERVER['HTTP_X_FORWARDED_FOR'];

        } else {

           $visitorHashKey = $_SERVER['REMOTE_ADDR'];
        }

        $totalVisits = 0;

        if ($redis->hExists($siteVisitsMap, $visitorHashKey)) {

            $visitorData = $redis->hMget($siteVisitsMap,  array($visitorHashKey));
            $totalVisits = $visitorData[$visitorHashKey] + 1;

        } else {

            $totalVisits = 1;

        }

        $redis->hSet($siteVisitsMap, $visitorHashKey, $totalVisits);

        echo "Welcome, you've visited this page " .  $totalVisits . " times\n";

    } catch (Exception $e) {
        echo $e->getMessage();
    }

پس از اتمام ویرایش فایل را ذخیره کرده و ببندید. شما اکنون یک اسکریپت hit_counter.php را کدگذاری کرده اید. در مرحله بعد، یک اسکریپت PHP دیگر ایجاد خواهید کرد که گزارشی از داده های جمع آوری شده در نقشه هش Redis ایجاد می کند.

مرحله 3 – ایجاد یک اسکریپت گزارش آمار سایت

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

برای ایجاد اسکریپت گزارش گزارش، nano را در پنجره ترمینال خود اجرا کنید و یک فایل /var/www/html/log_report.php جدید ایجاد کنید:

sudo nano /var/www/html/log_report.php

سپس اطلاعات زیر را در فایل وارد کنید. رمز عبور صحیح سرور Redis را جایگزین EXAMPLE_PASSWORD کنید:

/var/www/html/log.php

<!DOCTYPE html>
<html>

  <head>
    <title>Site Visits Report</title>
  </head>

  <body>

      <h1>Site Visits Report</h1>

      <table border = '1'>
        <tr>
          <th>No.</th>
          <th>Visitor</th>
          <th>Total Visits</th>
        </tr>

        <?php

            try {

                $redis = new Redis();
                $redis->connect('127.0.0.1', 6379);
                $redis->auth('EXAMPLE_PASSWORD');

                $siteVisitsMap = 'siteStats';

                $siteStats = $redis->HGETALL($siteVisitsMap);

                $i = 1;

                foreach ($siteStats as $visitor => $totalVisits) {

                    echo "<tr>";
                      echo "<td align = 'left'>"   . $i . "."     . "</td>";
                      echo "<td align = 'left'>"   . $visitor     . "</td>";
                      echo "<td align = 'right'>"  . $totalVisits . "</td>";
                    echo "</tr>";

                    $i++;
                }

            } catch (Exception $e) {
                echo $e->getMessage();
            }

        ?>

      </table>
  </body>

</html>

پس از اتمام ویرایش فایل را ذخیره کرده و ببندید. در اسکریپت بالا، شما در حال اتصال به سرور Redis هستید و از عبارت $redis->HGETALL($siteVisitsMap) استفاده می کنید. برای بازیابی نقشه هش بازدیدهای صفحه وب شما. سپس، شما از دستور PHP foreach ($siteStats به عنوان $visitor => $totalVisits) { برای حلقه و نمایش آدرس IP بازدیدکنندگان و تعداد بازدیدهایی که از سایت شما داشته اند استفاده می کنید. شما از دستور Redis HGETALL برای بازیابی تمام فیلدها (آدرس IP) و مقادیر (کل بازدیدها به ازای هر آدرس IP) از نقشه siteVisitsMap استفاده می کنید.

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

مرحله 4 – تست شمارشگر ضربه Redis

در این مرحله، کل منطق را برای شمارنده ضربه خود آزمایش خواهید کرد. به آدرس زیر در مرورگر وب خود بروید. IP-server-IP خود را با آدرس IP عمومی یا نام دامنه سرور خود جایگزین کنید.

http://your-server-IP/test.php

برای ایجاد آمار کافی، صفحه را چندین بار با استفاده از دستگاه های مختلف بازخوانی کنید.

سپس، از URL زیر دیدن کنید تا گزارش بازدید از سایت خود را در جدول HTML نمایش دهید

http://your-server-IP/log_report.php

اکنون باید گزارشی مشابه خروجی زیر مشاهده کنید.

شمارنده ضربه شما اکنون همانطور که انتظار می رود کار می کند.

نتیجه

در این راهنما، شما یک وب سایت با Redis و PHP روی سرور اوبونتو 20.04 خود راه اندازی کرده اید.

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

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

برچسب‌ها:MySQLRedisاسکریپت شمارنده ضربه Redisانواع سرور مجازیاوبونتو 20.04خرید سرورمجازیخریدvpsراه اندازی اولیه سرورراه اندازی سرور مجازیسرور مجازیشمارنده بازدید وب سایت

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه راه اندازی WireGuard در Rocky Linux 8

ورود به سایت

 

معرفی

WireGuard یک شبکه خصوصی مجازی سبک (VPN) است که از اتصالات IPv4 و IPv6 پشتیبانی می کند. VPN به شما امکان می دهد شبکه های غیرقابل اعتماد را مانند یک شبکه خصوصی پشت سر بگذارید. این به شما این آزادی را می دهد که از طریق تلفن هوشمند یا لپ تاپ خود با خیال راحت و ایمن به اینترنت متصل شوید ، وقتی به یک شبکه غیرقابل اعتماد متصل هستید ، مانند WiFi در هتل یا کافی شاپ.

رمزگذاری WireGuard برای ایجاد یک تونل رمزگذاری شده بین خود به کلیدهای عمومی و خصوصی برای همکاران متکی است. هر نسخه از WireGuard از مجموعه رمزنگاری خاصی برای اطمینان از سادگی ، امنیت و سازگاری با همسالان استفاده می کند.

در مقایسه ، سایر نرم افزارهای VPN مانند OpenVPN و IPSec از امنیت لایه انتقال (TLS) و گواهینامه ها برای احراز هویت و ایجاد تونل های رمزگذاری شده بین سیستم ها استفاده می کنند. نسخه های مختلف TLS شامل پشتیبانی از صدها مجموعه و الگوریتم رمزنگاری مختلف است ، و در حالی که این امر انعطاف پذیری بالایی را برای پشتیبانی از مشتریان مختلف امکان پذیر می کند ، همچنین پیکربندی VPN ای را که از TLS وقت گیرتر ، پیچیده تر و مستعد خطا است ، ایجاد می کند.

در این آموزش ، شما WireGuard را روی سرور Rocky Linux 8 راه اندازی می کنید و سپس دستگاه دیگری را پیکربندی می کنید تا با استفاده از هر دو اتصال IPv4 و IPv6 (که معمولاً به عنوان اتصال دو پشته نامیده می شود) به آن به صورت همتا متصل شود. همچنین می توانید نحوه هدایت ترافیک اینترنتی همتا را از طریق سرور WireGuard در پیکربندی دروازه ، علاوه بر استفاده از VPN برای یک تونل peer-to-peer رمزگذاری شده ، یاد بگیرید.

برای اهداف این آموزش ، ما سیستم Rocky Linux 8 دیگری را به عنوان همکار (که به آن مشتری نیز گفته می شود) در سرور WireGuard پیکربندی می کنیم. آموزش های بعدی این مجموعه نحوه نصب و اجرای WireGuard را در سیستم ها و دستگاه های Windows ، macOS ، Android و iOS توضیح می دهد.

پیش نیازها

برای پیگیری این آموزش ، شما نیاز دارید:

  • یک سرور Rocky Linux 8 با یک کاربر sudo غیر روت و فایروال فعال است. برای تنظیم این ، می توانید راه اندازی سرور اولیه ما را با آموزش Rocky Linux 8 دنبال کنید. ما در این راهنما از این به عنوان سرور WireGuard یاد می کنیم.
  • شما به یک ماشین مشتری نیاز دارید که از آن برای اتصال به سرور WireGuard خود استفاده کنید. در این آموزش ما به این دستگاه به عنوان WireGuard Peer اشاره می کنیم. برای اهداف این آموزش ، توصیه می شود از دستگاه محلی خود به عنوان WireGuard Peer استفاده کنید ، اما در صورت تمایل می توانید از سرورهای راه دور یا تلفن های همراه به عنوان مشتری استفاده کنید. اگر از سیستم از راه دور استفاده می کنید ، حتماً در قسمت های بعدی این آموزش ، تمام قسمت های اختیاری را دنبال کنید ، در غیر این صورت ممکن است خود را از سیستم خارج کنید.
  • برای استفاده از WireGuard با IPv6 ، همچنین باید اطمینان حاصل کنید که سرور شما پیکربندی شده است تا از این نوع ترافیک پشتیبانی کند. اگر می خواهید پشتیبانی IPv6 را با WireGuard فعال کنید و از قطره vpsgol استفاده می کنید ، لطفاً به این صفحه مستندات نحوه فعال کردن IPv6 در Droplets مراجعه کنید. هنگام ایجاد Droplet یا پس از آن با استفاده از دستورالعمل های آن صفحه ، می توانید پشتیبانی IPv6 را اضافه کنید.

مرحله 1 – نصب WireGuard و ایجاد یک جفت کلید

اولین قدم در این آموزش نصب WireGuard روی سرور شماست. برای شروع ، باید دو مخزن نرم افزار اضافی به فهرست بسته سرور خود ، epel و elrepo اضافه کنید. برای نصب آنها دستور زیر را اجرا کنید. توجه داشته باشید اگر در این جلسه برای اولین بار است که از sudo استفاده می کنید ، از شما خواسته می شود که رمز عبور کاربر sudo خود را ارائه دهید:

sudo dnf install elrepo-release epel-release

اکنون که سرور شما می تواند به مخازن موجود در بسته های WireGuard دسترسی پیدا کند ، WireGuard را با استفاده از دستورات زیر نصب کنید:

sudo dnf install kmod-wireguard wireguard-tools

اکنون که WireGuard را نصب کرده اید ، گام بعدی ایجاد تعمیر کلید خصوصی و عمومی برای سرور است. برای ایجاد کلیدها از دستورات wg genkey و wg pubkey استفاده می کنید و سپس کلید خصوصی را به فایل پیکربندی WireGuard اضافه می کنید.

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

از دستور umask زیر برای اطمینان از ایجاد دایرکتوری ها و فایل های جدید  با مجوزهای محدود خواندن و نوشتن استفاده کنید:

umask 077

umask 077 اطمینان می دهد که فقط صاحب یک دایرکتوری می تواند در آن وارد شود و فقط صاحب یک فایل می تواند آن را بخواند یا بنویسد. مجدداً توجه داشته باشید که وقتی از پوسته خود خارج می شوید و دوباره وارد سیستم می شوید ، umask شما به مقدار پیش فرض 022 بازنشانی می شود ، که به شما اجازه می دهد فایل های جدیدی را که در سیستم ایجاد شده است بخوانید.

حالا می توانید با استفاده از دستور زیر کلید خصوصی را برای WireGuard ایجاد کنید:

wg genkey | sudo tee /etc/wireguard/private.key

شما باید یک خط خروجی کدگذاری base64 دریافت کنید که کلید خصوصی است. یک کپی از خروجی نیز در فایل /etc/wireguard/private.key برای مرجع بعدی توسط قسمت tee فرمان ذخیره می شود. کلید خصوصی خروجی را با دقت یادداشت کنید زیرا بعداً در این بخش باید آن را به فایل پیکربندی WireGuard اضافه کنید.

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

sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

این دستور شامل سه فرمان جداگانه است که با استفاده از | اپراتور :

  • sudo cat /etc/wireguard/private.key: این دستور فایل کلید خصوصی را می خواند و آن را به جریان خروجی استاندارد منتقل می کند.
  • wg pubkey: فرمان دوم خروجی فرمان اول را به عنوان ورودی استاندارد خود می گیرد و برای تولید یک کلید عمومی پردازش می کند.
  • sudo tee /etc/wireguard/public.key: آخرین فرمان خروجی فرمان تولید کلید عمومی را می گیرد و آن را به پرونده ای با نام /etc/wireguard/public.key هدایت می کند.

هنگامی که فرمان را اجرا می کنید ، مجدداً یک خط خروجی کد شده base64 دریافت خواهید کرد ، که کلید عمومی سرور WireGuard شما است. آن را در جایی برای مرجع کپی کنید ، زیرا باید کلید عمومی را در هر همتایی که به سرور متصل می شود ، توزیع کنید.

مرحله 2 – انتخاب آدرس های IPv4 و IPv6

در قسمت قبل WireGuard را نصب کردید و یک جفت کلید ایجاد کردید که برای رمزگذاری ترافیک به و از سرور استفاده می شود. در این بخش ، یک فایل پیکربندی برای سرور ایجاد می کنید و WireGuard را تنظیم می کنید تا هنگام راه اندازی مجدد سرور به طور خودکار راه اندازی شود. شما همچنین آدرس های IPv4 و IPv6 خصوصی را برای استفاده با سرور WireGuard و همسالان خود تعریف خواهید کرد.

اگر قصد دارید از هر دو آدرس IPv4 و IPv6 استفاده کنید ، هر دو این بخش را دنبال کنید. در غیر این صورت ، دستورالعمل های مربوط به بخش مناسب VPN را برای نیازهای شبکه خود دنبال کنید.

مرحله 2 (الف) – انتخاب محدوده IPv4

اگر از سرور WireGuard خود با همتایان IPv4 استفاده می کنید ، سرور نیاز به طیف وسیعی از آدرس های IPv4 خصوصی دارد که برای مشتریان و رابط تونل آن استفاده می شود. شما می توانید طیف وسیعی از آدرس های IP را از بلوک های آدرس رزرو شده زیر انتخاب کنید (اگر می خواهید درباره نحوه تخصیص این بلوک ها از مشخصات RFC 1918 بیشتر بدانید):

  • 10.0.0.0 to 10.255.255.255 (10/8 prefix)
  • 172.16.0.0 to 172.31.255.255 (172.16/12 prefix)
  • 192.168.0.0 to 192.168.255.255 (192.168/16 prefix)

برای اهداف این آموزش ، از 10.8.0.0/24 به عنوان یک بلوک آدرس IP از اولین محدوده IP های رزرو شده استفاده خواهیم کرد. این محدوده تا 255 اتصال مختلف مختلف را امکان پذیر می کند ، و به طور کلی نباید آدرس های متداخل یا متناقض با سایر محدوده های IP خصوصی داشته باشد. اگر این محدوده مثال با شبکه های شما سازگار نیست ، می توانید طیف وسیعی از آدرس هایی را انتخاب کنید که با پیکربندی شبکه شما کار می کند.

سرور WireGuard از یک آدرس IP واحد برای آدرس IPv4 تونل خصوصی خود استفاده می کند. ما از 10.8.0.1/24 در اینجا استفاده می کنیم ، اما از هر آدرسی در محدوده 10.8.0.1 تا 10.8.0.255 می توان استفاده کرد. اگر از چیزی متفاوت از 10.8.0.1/24 استفاده می کنید ، آدرس IP مورد نظر خود را یادداشت کنید. شما این آدرس IPv4 را به فایل پیکربندی که در مرحله 3 تعریف کرده اید – ایجاد پیکربندی سرور WireGuard اضافه می کنید

مرحله 2 (ب) – انتخاب محدوده IPv6

اگر از WireGuard با IPv6 استفاده می کنید ، باید پیشوند آدرس منحصر به فرد IPv6 محلی منحصر به فرد را بر اساس الگوریتم RFC 4193 ایجاد کنید. آدرس هایی که با WireGuard استفاده می کنید با یک رابط مجازی تونل مرتبط خواهند بود. برای ایجاد یک پیشوند تصادفی و منحصر به فرد IPv6 در بلوک رزرو شده fd00 ::/8 آدرسهای خصوصی IPv6 ، باید چند مرحله را تکمیل کنید.

طبق RFC ، راه توصیه شده برای به دست آوردن یک پیشوند IPv6 منحصر به فرد این است که زمان روز را با یک مقدار شناسایی منحصر به فرد از یک سیستم مانند شماره سریال یا شناسه دستگاه ترکیب کنید. سپس این مقادیر هش شده و کوتاه می شوند و در نتیجه مجموعه ای از بیت ها را می توان به عنوان آدرس منحصر به فرد در بلوک IP های خصوصی fd00 ::/8 رزرو شده استفاده کرد.

برای شروع تولید محدوده IPv6 برای سرور WireGuard ، یک علامت زمان 64 بیتی را با استفاده از ابزار date با دستور زیر جمع آوری کنید:

date +%s%N

از سال 1970-01-01 00:00:00 UTC ترکیبی با هم ، عددی مانند زیر دریافت خواهید کرد ، که تعداد ثانیه ها (٪ s در دستور date) و نانو ثانیه (٪ N) است:

 

Output

1628101352127592197

مقدار را برای استفاده بعداً در این بخش در جایی ثبت کنید. در مرحله بعد ، مقدار id-machine برای سرور خود را از فایل/var/lib/dbus/machine-id کپی کنید. این شناسه مختص سیستم شماست و تا زمانی که سرور وجود دارد نباید تغییر کند.

cat /var/lib/dbus/machine-id

خروجی مانند موارد زیر را دریافت خواهید کرد:

 

/var/lib/dbus/machine-id

20086c25853947c7aeee2ca1ea849d7d

اکنون باید زمان بندی را با machine-id ترکیب کرده و مقدار حاصل را با استفاده از الگوریتم SHA-1 هش کنید. دستور از قالب زیر استفاده می کند:

printf <timestamp><machine-id> | sha1sum

دستور جایگزین را در timestamp و مقادیر هویت ماشین خود اجرا کنید:

printf 162810135212759219720086c25853947c7aeee2ca1ea849d7d | sha1sum

مقدار هش مانند موارد زیر را دریافت خواهید کرد:

 

Output

4f267c51857d6dc93a0bca107bca2f0d86fac3bc  -

توجه داشته باشید که خروجی دستور sha1sum بصورت هگزا دسیمال است ، بنابراین خروجی از دو کاراکتر برای نشان دادن یک بایت داده استفاده می کند. به عنوان مثال 4f و 26 در خروجی مثال دو بایت اول داده های هش شده هستند.

الگوریتم موجود در RFC فقط به حداقل 40 بیت یا 5 بایت خروجی هش شده نیاز دارد. از دستور cut برای چاپ 5 بایت رمزگذاری شده هگزا دسیمال از هش استفاده کنید:

printf 4f267c51857d6dc93a0bca107bca2f0d86fac3bc | cut -c 31-

آرگومان -c به دستور cut می گوید که فقط مجموعه مشخصی از کاراکترها را انتخاب کنید. آرگومان 31 به cut می گوید که همه کاراکترها را از موقعیت 31 تا انتهای خط ورودی چاپ کنید.

شما باید خروجی مانند موارد زیر را دریافت کنید:

 

Output

0d86fac3bc

در این خروجی مثال ، مجموعه بایت ها عبارتند از: 0d 86 fa c3 bc.

اکنون می توانید پیشوند شبکه IPv6 منحصر به فرد خود را با افزودن 5 بایت ایجاد شده با پیشوند fd بسازید و هر 2 بایت را با یک: colon برای خوانایی جدا کنید. از آنجا که هر زیر شبکه در پیشوند منحصر به فرد شما می تواند در مجموع 18،446،744،073،709،551،616 آدرس IPv6 احتمالی را در خود جای دهد ، می توانید برای سادگی زیر شبکه را به اندازه استاندارد 64 /محدود کنید.

با استفاده از بایت هایی که قبلاً با اندازه زیر شبکه /64 ایجاد شده بود ، پیشوند به شرح زیر خواهد بود:

 

Unique Local IPv6 Address Prefix

fd0d:86fa:c3bc::/64

این محدوده fd0d: 86fa: c3bc ::/64 چیزی است که شما برای اختصاص آدرس IP جداگانه به واسط های تونل WireGuard خود در سرور و همکاران استفاده خواهید کرد. برای اختصاص IP برای سرور ، 1 را پس از نویسه های نهایی :: اضافه کنید. آدرس حاصله fd0d: 86fa: c3bc :: 1/64 خواهد بود. همسالان می توانند از هر IP در محدوده استفاده کنند ، اما به طور معمول هر بار که یک همتا اضافه می کنید ، مقدار را به یک افزایش می دهید ، به عنوان مثال fd0d: 86fa: c3bc :: 2/64. IP را یادداشت کرده و پیکربندی WireGuard Server را در قسمت بعدی این آموزش انجام دهید.

مرحله 3 – ایجاد پیکربندی سرور WireGuard

قبل از ایجاد پیکربندی سرور WireGuard ، به اطلاعات زیر نیاز دارید:

  1. مطمئن شوید که کلید خصوصی موجود در مرحله 1 را دارید – نصب WireGuard و ایجاد یک جفت کلید.
  2. اگر از WireGuard با IPv4 استفاده می کنید ، به آدرس IP ای که در مرحله 2 (a) برای سرور انتخاب کرده اید نیاز دارید – انتخاب محدوده IPv4 ، که در این مثال 10.8.0.1/24 است.
  3. اگر از WireGuard با IPv6 استفاده می کنید ، به آدرس IP سروری که در مرحله 2 (ب) ایجاد کرده اید – انتخاب محدوده IPv6) نیاز دارید. در این مثال IP fd0d: 86fa: c3bc :: 1/64 است.

هنگامی که کلید خصوصی و آدرس IP مورد نیاز را دارید ، یک فایل پیکربندی جدید با استفاده از vi یا ویرایشگر دلخواه خود با اجرای دستور زیر ایجاد کنید:

sudo vi /etc/wireguard/wg0.conf

خطوط زیر را به فایل اضافه کنید و کلید خصوصی خود را به جای مقدار مشخص شده base64_encoded_private_key_goes_here و آدرس (های) IP در خط آدرس جایگزین کنید. اگر می خواهید WireGuard در پورت دیگری در دسترس باشد ، می توانید خط ListenPort را تغییر دهید.

i را فشار دهید تا vi وارد حالت درج شود و سپس خطوط زیر را اضافه کنید:

 

/etc/wireguard/wg0.conf

[Interface]
PrivateKey = base64_encoded_private_key_goes_here
Address = 10.8.0.1/24, fd0d:86fa:c3bc::1/64
ListenPort = 51820
SaveConfig = true

خط SaveConfig تضمین می کند که وقتی رابط WireGuard خاموش می شود ، هرگونه تغییر در فایل پیکربندی ذخیره می شود.

پس از اتمام اعمال تغییرات ، ESC و سپس: wq را فشار دهید تا تغییرات را در فایل بنویسید و خارج شوید. شما در حال حاضر پیکربندی اولیه سرور را دارید که می توانید بسته به نحوه استفاده از سرور WireGuard VPN خود ، بر اساس آن اقدام کنید.

مرحله 4 – تنظیم پیکربندی شبکه WireGuard Server

اگر از WireGuard برای اتصال همتای خود به سرور WireGuard استفاده می کنید تا فقط به خدمات روی سرور دسترسی داشته باشید ، نیازی به تکمیل این بخش ندارید. اگر می خواهید ترافیک اینترنت WireGuard Peer خود را از طریق سرور WireGuard هدایت کنید ، باید با دنبال کردن این بخش از آموزش ، ارسال IP را پیکربندی کنید.

برای پیکربندی حمل و نقل ، فایل /etc/sysctl.conf را با استفاده از vi یا ویرایشگر دلخواه خود باز کنید:

sudo vi /etc/sysctl.conf

اگر از IPv4 با WireGuard استفاده می کنید ، خط زیر را در پایین فایل اضافه کنید:

/etc/sysctl.conf

net.ipv4.ip_forward=1

اگر از IPv6 با WireGuard استفاده می کنید ، این خط را در پایین فایل اضافه کنید:

/etc/sysctl.conf

net.ipv6.conf.all.forwarding=1

اگر از IPv4 و IPv6 استفاده می کنید ، مطمئن شوید که هر دو خط را وارد کرده اید. پس از اتمام کار فایل را ذخیره و ببندید.

برای خواندن فایل و بارگذاری مقادیر جدید برای جلسه ترمینال فعلی خود ، دستور زیر را اجرا کنید:

sudo sysctl -p

 

Output

net.ipv6.conf.all.forwarding = 1
net.ipv4.ip_forward = 1

اکنون سرور WireGuard شما می تواند ترافیک ورودی را از دستگاه مجازی اترنت VPN به سرورهای دیگر و از آنجا به اینترنت عمومی هدایت کند. استفاده از این پیکربندی به شما امکان می دهد تمام ترافیک وب را از WireGuard Peer خود از طریق آدرس IP سرور خود مسیریابی کنید و آدرس IP عمومی مشتری شما به طور م hiddenثر پنهان می شود.

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

مرحله 5 – پیکربندی فایروال سرور WireGuard

در این بخش پیکربندی WireGuard Server را ویرایش می کنید تا قوانین فایروال cmd فایروال را اضافه کنید که باعث می شود ترافیک به سمت سرور و کلاینت ها به درستی مسیریابی شود. مانند بخش قبل ، اگر از WireGuard VPN خود برای اتصال دستگاه به دستگاه برای دسترسی به منابع محدود شده برای VPN خود استفاده می کنید ، این مرحله را رد کنید.

برای افزودن قوانین فایروال به سرور WireGuard ، برخی از قوانین دائمی را ایجاد می کنید که از پیکربندی صحیح سرور در هنگام راه اندازی مجدد اطمینان حاصل می کند. برای دسترسی به سرویس WireGuard در پورت UDP 51820 موارد زیر را اجرا کنید:

sudo firewall-cmd –zone=public –add-port=51820/udp –permanent

در مرحله بعد باید دستگاه wg0 را به منطقه داخلی اضافه کنید ، که به ترافیک رابط VPN اجازه می دهد تا به رابط های دیگر در سرور WireGuard برسد. اگر از سرور به عنوان دروازه VPN برای تمام ترافیک اینترنت Peer استفاده می کنید ، این تنظیم بسیار مهم است. اگر در آینده تونل های WireGuard بیشتری به سرور خود اضافه می کنید ، حتماً دستگاه های آنها را به منطقه داخلی یا مورد اطمینان نیز اضافه کنید.

برای افزودن رابط wg0 به منطقه داخلی موارد زیر را اجرا کنید:

sudo firewall-cmd –zone=internal –add-interface=wg0 –permanent

در نهایت ، اگر از سرور WireGuard به عنوان دروازه VPN استفاده می کنید ، باید یک قانون ماسکراس را به منطقه عمومی اضافه کنید. Masquerading برای بازنویسی ترافیکی که در یک رابط داخلی وارد می شود (در این مورد wg0) استفاده می شود تا به نظر برسد که مستقیماً از آدرس های عمومی IPv4 یا IPv6 سرور WireGuard سرچشمه می گیرد.

دستورات زیر را برای فعال کردن مخفی سازی ، جایگزینی در محدوده شبکه IPv4 و IPv6 خود به جای مقادیر برجسته ، اجرا کنید:

sudo firewall-cmd –zone=public –add-rich-rule=’rule family=ipv4 source address=10.8.0.0/24 masquerade’ –permanent
sudo firewall-cmd –zone=public –add-rich-rule=’rule family=ipv6 source address=fd0d:86fa:c3bc::/64 masquerade’ –permanent

اکنون فایروال را مجدداً بارگذاری کنید تا تغییرات اعمال شده و از دائمی بودن آنها اطمینان حاصل کنید:

sudo firewall-cmd –reload

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

sudo firewall-cmd –zone=public –list-all

خروجی مانند موارد زیر را دریافت خواهید کرد:

 

Output

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources:
  services: cockpit dhcpv6-client ssh
  ports: 51820/udp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
    rule family="ipv4" source address="10.8.0.0/24" masquerade
    rule family="ipv6" source address="fd0d:86fa:c3bc::/64" masquerade

مقادیر برجسته شده حاکی از قاعده ای است که اجازه می دهد ترافیک UDP در پورت 51820 موجود باشد و مخفی سازی برای هر یک از شبکه های ذکر شده فعال است.

همچنین می توانید با استفاده از دستور زیر تأیید کنید که قانون ارسال داخلی وجود دارد:

sudo firewall-cmd –zone=internal –list-interfaces

در صورت وجود قانون ، خروجی مشابه زیر دریافت خواهید کرد:

 

Output

wg0

سرور WireGuard شما پیکربندی شده است تا بتواند ترافیک VPN را به درستی مدیریت کند ، از جمله حمل و نقل و نقاب برای همسالان. با رعایت قوانین فایروال ، می توانید سرویس WireGuard را برای گوش دادن به ارتباطات همتا راه اندازی کنید.

مرحله 6 – راه اندازی سرور WireGuard

WireGuard را می توان پیکربندی کرد تا با استفاده از اسکریپت wg-quick خود به عنوان یک سرویس systemd اجرا شود. در حالی که می توانید به صورت دستی از دستور wg برای ایجاد تونل در هر زمان که می خواهید از VPN استفاده کنید استفاده کنید ، انجام این کار یک فرآیند دستی است که تکراری و مستعد خطا می شود. در عوض ، می توانید از systemctl برای مدیریت تونل با کمک اسکریپت wg-quick استفاده کنید.

استفاده از سرویس systemd به این معنی است که می توانید WireGuard را برای راه اندازی در هنگام راه اندازی پیکربندی کنید تا بتوانید در هر زمان که سرور در حال اجرا است به VPN خود متصل شوید. برای انجام این کار ، سرویس wg-quick را برای تونل wg0 که با افزودن آن به systemctl تعریف کرده اید ، فعال کنید:

sudo systemctl enable wg-quick@wg0.service

توجه داشته باشید که فرمان نام تونل wg0 را به عنوان بخشی از نام سرویس مشخص می کند. این نام به فایل پیکربندی /etc/wireguard/wg0.conf مربوط می شود. این رویکرد برای نامگذاری به این معنی است که می توانید هر تعداد دلخواه که از سرور خود استفاده می کنید تونل VPN جداگانه ایجاد کنید. هر تونل می تواند شامل IPv4 ، IPv6 و تنظیمات فایروال مشتری باشد.

حالا سرویس را شروع کنید:

sudo systemctl start wg-quick@wg0.service

با دستور زیر بررسی کنید که سرویس WireGuard فعال است. شما باید خروجی را فعال (در حال اجرا) ببینید:

sudo systemctl status wg-quick@wg0.service

 

Output

● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
   Loaded: loaded (/usr/lib/systemd/system/wg-quick@.service; enabled; vendor preset: disabled)
   Active: active (exited) since Fri 2021-09-17 19:58:14 UTC; 6 days ago
     Docs: man:wg-quick(8)
           man:wg(8)
           https://www.wireguard.com/
           https://www.wireguard.com/quickstart/
           https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
           https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
 Main PID: 22924 (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 11188)
   Memory: 0B
   CGroup: /system.slice/system-wg\x2dquick.slice/wg-quick@wg0.service

Sep 17 19:58:14 wg0 systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
Sep 17 19:58:14 wg0 wg-quick[22924]: [#] ip link add wg0 type wireguard
Sep 17 19:58:14 wg0 wg-quick[22924]: [#] wg setconf wg0 /dev/fd/63
Sep 17 19:58:14 wg0 wg-quick[22924]: [#] ip -4 address add 10.8.0.1/24 dev wg0
Sep 17 19:58:14 wg0 wg-quick[22924]: [#] ip -6 address add fd0d:86fa:c3bc::1/64 dev wg0
Sep 17 19:58:14 wg0 wg-quick[22924]: [#] ip link set mtu 1420 up dev wg0
Sep 17 19:58:14 wg0 systemd[1]: Started WireGuard via wg-quick(8) for wg0.

توجه کنید که چگونه خروجی دستورات ip را که برای ایجاد دستگاه مجازی wg0 استفاده می شود نشان می دهد و آدرس IPv4 و IPv6 را که به فایل پیکربندی اضافه کرده اید به آن اختصاص می دهد. اگر می خواهید پیکربندی دستی VPN را پیکربندی کنید ، می توانید از این قوانین برای عیب یابی تونل استفاده کنید ، یا با خود دستور wg.

با سرور پیکربندی و اجرا ، گام بعدی این است که دستگاه مشتری خود را به صورت WireGuard Peer پیکربندی کرده و به سرور WireGuard متصل شوید.

مرحله 7 – پیکربندی WireGuard Peer

پیکربندی یک همتای WireGuard مشابه راه اندازی WireGuard Server است. هنگامی که نرم افزار سرویس گیرنده را نصب کردید ، یک جفت کلید عمومی و خصوصی ایجاد می کنید ، در مورد آدرس IP یا آدرس برای همتای خود تصمیم می گیرید ، یک فایل پیکربندی برای همتا تعریف می کنید و سپس با استفاده از اسکریپت wg-quick تونل را راه اندازی می کنید.

با ایجاد یک جفت کلید و پیکربندی با استفاده از مراحل زیر ، می توانید هر تعداد همکار که دوست دارید به VPN خود اضافه کنید. اگر چندین VPN را به VPN اضافه می کنید ، حتماً آدرس IP خصوصی آنها را پیگیری کنید تا از برخورد جلوگیری شود.

برای پیکربندی WireGuard Peer ، مطمئن شوید که بسته WireGuard را با استفاده از دستورات dnf زیر نصب کرده اید. در اجرای همکار WireGuard:

sudo dnf install elrepo-release epel-release
sudo dnf install kmod-wireguard wireguard-tools

ایجاد جفت کلید WireGuard Peer’s Key

در مرحله بعد ، باید جفت کلید را در همتا با استفاده از مراحل مشابهی که در سرور استفاده می کنید ایجاد کنید. از دستگاه محلی یا سرور راه دور خود که به عنوان همکار عمل می کند ، دستور زیر را برای تنظیم umask روی 077 اجرا کنید:

umask 077

اکنون می توانید با استفاده از دستور زیر کلید خصوصی را برای همتا ایجاد کنید:

wg genkey | sudo tee /etc/wireguard/private.key

مجدداً یک خط خروجی کد شده base64 دریافت خواهید کرد که کلید خصوصی است. یک نسخه از خروجی نیز در /etc/wireguard/private.key ذخیره می شود. کلید خصوصی خروجی را با دقت یادداشت کنید زیرا بعداً در این بخش باید آن را به فایل پیکربندی WireGuard اضافه کنید.

سپس برای ایجاد فایل کلید عمومی از دستور زیر استفاده کنید:

sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

مجدداً یک خط خروجی کد شده base64 دریافت خواهید کرد که کلید عمومی WireGuard Peer شما است. آن را در جایی برای مرجع کپی کنید ، زیرا برای ایجاد یک اتصال رمزگذاری شده ، باید کلید عمومی را در سرور WireGuard توزیع کنید.

ایجاد فایل پیکربندی WireGuard Peer

اکنون که یک جفت کلید دارید ، می توانید یک فایل پیکربندی برای همتای خود ایجاد کنید که حاوی تمام اطلاعات مورد نیاز برای ایجاد ارتباط با سرور WireGuard باشد.

برای فایل پیکربندی به چند قطعه اطلاعات نیاز دارید:

  • base64 کلید خصوصی را که در همتا ایجاد کرده اید رمزگذاری کرد.
  • محدوده آدرس IPv4 و IPv6 که در سرور WireGuard تعریف کرده اید.
  • base64 کلید عمومی را از سرور WireGuard رمزگذاری کرد.
  • آدرس IP عمومی و شماره پورت سرور WireGuard. معمولاً این آدرس IPv4 خواهد بود ، اما اگر سرور شما دارای آدرس IPv6 است و دستگاه سرویس گیرنده شما دارای اتصال IPv6 به اینترنت است ، می توانید به جای IPv4 از این آدرس استفاده کنید.

با تمام این اطلاعات موجود ، یک فایل /etc/wireguard/wg0.conf جدید در دستگاه WireGuard Peer با استفاده از vi یا ویرایشگر دلخواه خود باز کنید:

sudo vi /etc/wireguard/wg0.conf

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

 

/etc/wireguard/wg0.conf

[Interface]
PrivateKey = base64_encoded_peer_private_key_goes_here
Address = 10.8.0.2/24
Address = fd0d:86fa:c3bc::2/64

[Peer]
PublicKey = base64_encoded_server_public_key_goes_here
AllowedIPs = 10.8.0.0/24, fd0d:86fa:c3bc::/64
Endpoint = 203.0.113.1:51820

 

توجه کنید که چگونه اولین خط آدرس از آدرس IPv4 از زیر شبکه 10.8.0.0/24 که قبلاً انتخاب کرده اید استفاده می کند. این آدرس IP می تواند هر چیزی در زیر شبکه باشد مگر اینکه با IP سرور متفاوت باشد. افزایش آدرس ها به میزان 1 در هر بار افزودن یک همتا به طور کلی ساده ترین راه برای تخصیص IP است.

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

بخش قابل توجه دیگر فایل آخرین خط AllowedIPs است. این دو محدوده IPv4 و IPv6 به همکاران دستور می دهند فقط در صورتی ترافیک از طریق VPN ارسال کنند که سیستم مقصد دارای آدرس IP در هر محدوده باشد. با استفاده از دستورالعمل AllowedIPs ، می توانید VPN را بر روی همتا محدود کنید تا فقط به سایر خدمات و خدمات مشابه در VPN متصل شود ، یا می توانید تنظیماتی را انجام دهید که تمام ترافیک VPN را تونل گذاری کرده و از سرور WireGuard به عنوان دروازه استفاده کنید.

اگر فقط از IPv4 استفاده می کنید ، محدوده fd0d: 86fa: c3bc ::/64 (شامل کاما) را حذف کنید. برعکس ، اگر فقط از IPv6 استفاده می کنید ، فقط پیشوند fd0d: 86fa: c3bc ::/64 را وارد کنید و محدوده 10.8.0.0/24 IPv4 را کنار بگذارید.

در هر دو مورد ، اگر می خواهید تمام ترافیک همسالان خود را از طریق VPN ارسال کنید و از سرور WireGuard به عنوان دروازه ای برای همه ترافیک استفاده کنید ، می توانید از 0.0.0.0/0 ، که نشان دهنده کل فضای آدرس IPv4 است ، و :: /0 برای کل فضای آدرس IPv6.

(اختیاری) پیکربندی یک همتا برای مسیریابی تمام ترافیک در تونل

اگر تصمیم گرفته اید تمام ترافیک همکاران خود را از طریق تونل با استفاده از مسیرهای 0.0.0.0/0 یا ::/0 مسیریابی کنید و همتا یک سیستم از راه دور است ، باید مراحل این بخش را تکمیل کنید. اگر همتای شما یک سیستم محلی است ، بهتر است از این بخش صرف نظر کنید.

برای همسالان از راه دور که از طریق SSH یا پروتکل دیگری با استفاده از آدرس IP عمومی به آنها دسترسی پیدا می کنید ، باید برخی قوانین اضافی را به فایل wg0.conf همتا اضافه کنید. این قوانین تضمین می کند که شما هنوز می توانید از خارج از تونل به سیستم متصل شوید. در غیر این صورت ، هنگامی که تونل ایجاد می شود ، تمام ترافیکی که معمولاً در رابط شبکه عمومی انجام می شود ، به درستی جهت دور زدن رابط تونل wg0 هدایت نمی شوند و منجر به یک سیستم از راه دور می شود.

ابتدا باید آدرس IP ای را که سیستم به عنوان دروازه پیش فرض خود استفاده می کند ، تعیین کنید. دستور ip route زیر را اجرا کنید:

ip route list table main default

خروجی مانند موارد زیر را دریافت خواهید کرد:

 

Output

default via 203.0.113.1 dev eth0 proto static

به آدرس IP برجسته 203.0.113.1 درگاه برای استفاده بعدی و eth0 دستگاه توجه کنید. ممکن است نام دستگاه شما متفاوت باشد. اگر چنین است ، آن را به جای eth0 در دستورات زیر جایگزین کنید.

سپس با بررسی دستگاه با دستور نشان دادن آدرس IP آدرس عمومی سیستم را بیابید:

ip -brief address show eth0

خروجی مانند موارد زیر را دریافت خواهید کرد:

 

Output

eth0             UP             203.0.113.5/20 10.20.30.40/16 2604:a880:400:d1::3d3:6001/64 fe80::68d5:beff:feff:974c/64

در این خروجی مثال ، IP برجسته 203.0.113.5 (بدون دنباله /20) آدرس عمومی است که به دستگاه eth0 اختصاص داده شده است که باید به پیکربندی WireGuard اضافه کنید.

اکنون فایل /etc/wireguard/wg0.conf WireGuard Peer را با vi یا ویرایشگر دلخواه خود باز کنید.

sudo vi /etc/wireguard/wg0.conf

قبل از خط [Peer] ، 4 خط زیر را اضافه کنید:

PostUp = ip rule add table 200 from 203.0.113.5
PostUp = ip route add table 200 default via 203.0.113.1
PreDown = ip rule delete table 200 from 203.0.113.5
PreDown = ip route delete table 200 default via 203.0.113.1

[Peer]
. . .

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

  • PostUp = ip rule add table 200 from 203.0.113.5 – این فرمان یک قاعده ایجاد می کند که هنگام ورود IP با آدرس عمومی 203.0.113.5 سیستم ، هرگونه ورودی مسیریابی در جدول شماره 200 را بررسی می کند.
  • PostUp = ip route add table 200 default by 203.0.113.1 – این دستور اطمینان می دهد که هر ترافیکی که توسط جدول 200 پردازش می شود ، به جای رابط WireGuard ، از دروازه 203.0.113.1 برای مسیریابی استفاده می کند.
  • خطوط PreDown هنگام خاموش شدن تونل ، قانون و مسیر سفارشی را حذف می کند.

اگر تمام ترافیک همکاران خود را از طریق VPN مسیریابی می کنید ، مطمئن شوید که در sysctl و firewall-cmd درست در سرور WireGuard در مرحله 4-تنظیم پیکربندی شبکه WireGuard سرور و مرحله 5-پیکربندی فایروال سرور WireGuard پیکربندی کرده اید.

(اختیاری) پیکربندی حل کننده های DNS WireGuard Peer

اگر از سرور WireGuard به عنوان یک دروازه VPN برای همه ترافیک همکاران خود استفاده می کنید ، باید خطی را به بخش [رابط] اضافه کنید که حل کننده های DNS را مشخص می کند. اگر این تنظیم را اضافه نکنید ، ممکن است درخواست های DNS شما توسط VPN محافظت نشود ، یا ممکن است به ارائه دهنده خدمات اینترنت شما یا سایر اشخاص ثالث فاش شود.

اگر فقط از WireGuard برای دسترسی به منابع در شبکه VPN یا پیکربندی peer-to-peer استفاده می کنید ، می توانید این بخش را رد کنید.

برای افزودن حل کننده های DNS به پیکربندی همکار خود ، ابتدا تعیین کنید سرور WireGuard شما از کدام سرورهای DNS استفاده می کند. دستور زیر را در سرور WireGuard اجرا کنید ، اگر نام دستگاه اترنت خود را به جای eth0 جایگزین کنید اگر متفاوت از این مثال باشد:

cat /etc/resolv.conf

شما باید خروجی مانند موارد زیر را دریافت کنید:

 

Output

; Created by cloud-init on instance boot automatically, do not edit.
;
nameserver 67.207.67.2
nameserver 67.207.67.3

آدرس های IP خروجی راه حل های DNS هستند که سرور از آنها استفاده می کند. بسته به نیاز خود می توانید از همه یا همه آنها یا فقط IPv4 یا IPv6 استفاده کنید. حل کننده هایی را که استفاده می کنید یادداشت کنید.

در مرحله بعد باید حل کننده های انتخابی خود را به فایل پیکربندی WireGuard Peer اضافه کنید. دوباره به WireGuard Peer برگردید ، فایل /etc/wireguard/wg0.conf را با استفاده از vi یا ویرایشگر دلخواه باز کنید:

sudo vi /etc/wireguard/wg0.conf

قبل از خط [Peer] موارد زیر را اضافه کنید:

DNS = 67.207.67.2 67.207.67.3

[Peer]
. . .

باز هم ، بسته به اولویت یا الزامات شما برای IPv4 و IPv6 ، می توانید لیست را با توجه به نیاز خود ویرایش کنید.

در مرحله بعد ، سرویس حل شده با سیستم را در Peer فعال و راه اندازی کنید تا وقتی تونل ایجاد شد ، حل کننده های DNS Peer به روز شود:

sudo systemctl enable systemd-resolved

اگر Rocky Linux و احتمالاً سایر توزیع های مشتق از RedHat مانند CentOS یا Fedora در حال اجرا هستند ، باید سیستم همتای خود را در این مرحله راه اندازی مجدد کنید. اگر آن را راه اندازی مجدد نکنید ، فایل /etc/resolv.conf هنگام راه اندازی تونل به دلیل اشکالی در برنامه های systemd-حل شده یا ابزارهای حفاظتی ، مجوزهای صحیح را تنظیم نمی کند. WireGuard Peer را با دستور زیر راه اندازی مجدد کنید:

sudo reboot

با وجود همه این تنظیمات حل کننده DNS و راه اندازی مجدد همکار ، اکنون آماده هستید که کلید عمومی همکار را به سرور اضافه کنید و سپس تونل WireGuard را روی همتا راه اندازی کنید.

مرحله 8 – افزودن کلید عمومی Peer به سرور WireGuard

قبل از اتصال همتا به سرور ، مهم است که کلید عمومی همتا را به سرور WireGuard اضافه کنید. این مرحله تضمین می کند که می توانید ترافیک را از طریق VPN متصل و مسیریابی کنید. بدون اتمام این مرحله ، سرور WireGuard به همکاران اجازه ارسال یا دریافت ترافیک از طریق تونل را نمی دهد.

با اجرای موارد زیر ، مطمئن شوید که نسخه ای از کلید عمومی کد شده base64 را برای WireGuard Peer در اختیار دارید:

sudo cat /etc/wireguard/public.key

 

Output

PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=

حالا وارد سرور WireGuard شده و دستور زیر را اجرا کنید:

sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd0d:86fa:c3bc::2

توجه داشته باشید که قسمت مجاز-ips فرمان ، لیستی از آدرس های IPv4 و IPv6 را با کاما جدا می کند. اگر می خواهید آدرس IP را که یک همتا می تواند به خود اختصاص دهد محدود کنید یا اگر همسالان شما می توانند از هر آدرس IP در محدوده VPN استفاده کنند ، می توانید IP های فردی را تعیین کنید. همچنین توجه داشته باشید که هیچ یک از همسالان نمی توانند تنظیمات مجاز ips یکسانی داشته باشند.

اگر می خواهید ips مجاز برای یک همکار موجود را به روز کنید ، می توانید دوباره همان فرمان را اجرا کنید ، اما آدرس IP را تغییر دهید. چندین آدرس IP پشتیبانی می شود. به عنوان مثال ، برای تغییر WireGuard Peer که به تازگی اضافه کرده اید و IP ای مانند 10.8.0.100 را به IP های 10.8.0.2 و fd0d: 86fa: c3bc :: 2 موجود اضافه می کنید ، موارد زیر را اجرا کنید:

sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd0d:86fa:c3bc::2

پس از اجرای دستور افزودن همتا ، وضعیت تونل را روی سرور با استفاده از دستور wg بررسی کنید:

sudo wg

 

Output

interface: wg0
 public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
 private key: (hidden)
 listening port: 51820

peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
 allowed ips: 10.8.0.2/32, fd0d:86fa:c3bc::/128

توجه کنید که چگونه خط همتا کلید عمومی WireGuard Peer و آدرس های IP یا محدوده آدرس هایی را نشان می دهد که مجاز است از آنها برای اختصاص IP خود استفاده کند.

اکنون که پارامترهای اتصال همتا را روی سرور تعریف کرده اید ، مرحله بعدی این است که تونل را روی همتا راه اندازی کنید.

مرحله 9 – اتصال WireGuard Peer به Tunnel

اکنون که سرور و همکار شما به گونه ای پیکربندی شده اند که از انتخاب IPv4 ، IPv6 ، ارسال بسته ها و وضوح DNS پشتیبانی می کنند ، زمان آن رسیده است که همتا را به تونل VPN متصل کنید.

از آنجا که ممکن است فقط بخواهید VPN برای موارد خاص استفاده شود ، ما از دستور wg-quick برای ایجاد اتصال بصورت دستی استفاده می کنیم. اگر می خواهید شروع به کار تونل را مانند سرور انجام دهید ، مراحل زیر را در مرحله 6 دنبال کنید-به جای استفاده از دستور wq-quick ، بخش WireGuard Server را راه اندازی کنید.

برای شروع تونل ، موارد زیر را در WireGuard Peer اجرا کنید:

sudo wg-quick up wg0

خروجی مانند موارد زیر را دریافت خواهید کرد:

 

Output

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.2/24 dev wg0
[#] ip -6 address add fd0d:86fa:c3bc::2/64 dev wg0
[#] ip link set mtu 1420 up dev wg0

آدرس های IPv4 و IPv6 برجسته ای را که به همتای خود اختصاص داده اید ، اضافه کنید.

اگر AllowedIPs را روی همتا روی 0.0.0.0/0 و ::/0 تنظیم کنید (یا از محدوده هایی غیر از محدوده هایی که برای VPN انتخاب کرده اید استفاده کنید) ، خروجی شما شبیه موارد زیر خواهد بود:

 

Output

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.2/24 dev wg0
[#] ip -6 address add fd0d:86fa:c3bc::2/64 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] mount `67.207.67.2' /etc/resolv.conf
[#] wg set wg0 fwmark 51820
[#] ip -6 route add ::/0 dev wg0 table 51820
[#] ip -6 rule add not fwmark 51820 table 51820
[#] ip -6 rule add table main suppress_prefixlength 0
[#] nft -f /dev/fd/63
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] nft -f /dev/fd/63
[#] ip rule add table 200 from 203.0.113.5
[#] ip route add table 200 default via 203.0.113.1

در این مثال ، به مسیرهای برجسته شده ای که فرمان اضافه کرده و مربوط به AllowedIPs در پیکربندی همتا است توجه کنید.

در مرحله بعد ، با استفاده از ping مقداری ترافیک در رابط تونل ایجاد کنید تا یک بسته ICMP (که در دستورات زیر با آرگومان -c 1 مشخص شده است) به سرور WireGuard نشان داده شود:

ping -c 1 10.8.0.1

اگر تمام ترافیک را از طریق VPN مسیریابی می کنید ، می توانید به جای آن از یکی از سرورهای CloudFlare استفاده کنید:

ping -c 1 1.1.1.1

اکنون با استفاده از دستور wg وضعیت تونل را روی همتا بررسی کنید:

sudo wg

 

Output

interface: wg0
 public key: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
 private key: (hidden)
 listening port: 49338
 fwmark: 0xca6c

peer: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
 endpoint: 203.0.113.1:51820
 allowed ips: 10.8.0.0/24, fd0d:86fa:c3bc::/64
 latest handshake: 1 second ago
 transfer: 6.50 KiB received, 15.41 KiB sent

همچنین می توانید وضعیت سرور را دوباره بررسی کنید و خروجی مشابهی دریافت خواهید کرد.

با استفاده از دستورات مسیر ip و مسیر ip -6 تأیید کنید که همتای شما از VPN استفاده می کند. اگر از VPN به عنوان دروازه ای برای همه ترافیک اینترنت خود استفاده می کنید ، بررسی کنید که کدام رابط برای ترافیک مقصد 1.1.1.1 CloudFlare و 2606: 4700: 4700 :: 1111 DNS وضوح مورد استفاده قرار می گیرد.

ip route get 1.1.1.1

 

Output

1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000
   cache

توجه داشته باشید که از دستگاه wg0 و آدرس IPv4 10.8.0.2 که به همتای خود اختصاص داده اید استفاده می شود. به همین ترتیب ، اگر از IPv6 استفاده می کنید ، موارد زیر را اجرا کنید:

ip -6 route get 2606:4700:4700::1111

 

Output

2606:4700:4700::1111 dev wg0 table 51820 src fd0d:86fa:c3bc::2 metric 1024 pref medium

دوباره به رابط wg0 و آدرس IPv6 fd0d: 86fa: c3bc :: 2 که به همتای خود اختصاص داده اید توجه کنید.

اگر مرورگر همتای شما نصب شده است ، همچنین می توانید از ipleak.net و ipv6-test.com دیدن کنید تا تأیید کنید که همتای شما ترافیک خود را از طریق VPN مسیریابی می کند.

هنگامی که آماده قطع ارتباط VPN با همکار هستید ، از دستور wg-quick استفاده کنید:

sudo wg-quick down wg0

خروجی مشابه زیر دریافت خواهید کرد که نشان می دهد تونل VPN خاموش است:

 

Output

[#] ip link delete dev wg0

اگر AllowedIPs را روی همتا روی 0.0.0.0/0 و ::/0 تنظیم کنید (یا از محدوده هایی غیر از محدوده هایی که برای VPN انتخاب کرده اید استفاده کنید) ، خروجی شما شبیه موارد زیر خواهد بود:

 

Output

[#] ip rule delete table 200 from 137.184.109.48
[#] ip route delete table 200 default via 137.184.96.1
[#] ip -4 rule delete table 51820
[#] ip -4 rule delete table main suppress_prefixlength 0
[#] ip -6 rule delete table 51820
[#] ip -6 rule delete table main suppress_prefixlength 0
[#] ip link delete dev wg0
[#] umount /etc/resolv.conf
[#] nft -f /dev/fd/63

برای اتصال مجدد به VPN ، دستور wg-quick up wg0 را دوباره روی همتا اجرا کنید. اگر می خواهید پیکربندی همتا را از سرور WireGuard حذف کنید ، می توانید دستور زیر را اجرا کنید ، مطمئن باشید که کلید عمومی صحیح را برای همتایی که می خواهید حذف کنید جایگزین کنید:

sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove

به طور معمول فقط در صورت عدم وجود همتای دیگر ، یا کلیدهای رمزگذاری آن به خطر افتاده یا تغییر کرده است ، باید پیکربندی همتا را حذف کنید. در غیر این صورت بهتر است پیکربندی را در محل خود بگذارید تا همکار بتواند مجدداً به VPN متصل شود بدون اینکه لازم باشد هر بار کلید و ips مجاز آن را اضافه کنید.

نتیجه

در این آموزش شما بسته و ابزار WireGuard را روی هر دو سیستم سرور و سرویس گیرنده Rocky Linux 8 نصب کرده اید. شما قوانین فایروال را برای WireGuard تنظیم کرده و تنظیمات هسته را پیکربندی کرده اید تا بتوانید با استفاده از دستور sysctl روی سرور ، ارسال بسته را انجام دهید. شما نحوه تولید کلیدهای رمزگذاری خصوصی و عمومی WireGuard و نحوه پیکربندی سرور و همکاران (یا همتا) برای اتصال به یکدیگر را آموختید.

اگر شبکه شما از IPv6 استفاده می کند ، همچنین آموخته اید که چگونه یک محدوده آدرس محلی منحصر به فرد برای استفاده از اتصالات همتا ایجاد کنید. در نهایت ، شما نحوه محدود کردن میزان ترافیک VPN را با محدود کردن پیشوندهای شبکه که همکار می تواند استفاده کند ، و همچنین نحوه استفاده از سرور WireGuard به عنوان یک دروازه VPN برای رسیدگی به تمام ترافیک اینترنت برای همسالان یاد گرفتید.

 

  • behnam gol mohamadi