میزبانی وب سایت در روتر خانگی شما

من مدتهاست که می خواستم با راه اندازی یک وب سرور از ابتدا و انتشار آن در اینترنت، در خدمات اینترنتی "دست هایم را لمس کنم". در این مقاله می خواهم تجربه خود را در تبدیل یک روتر خانگی از یک دستگاه بسیار کاربردی به یک سرور تقریباً کامل به اشتراک بگذارم.

همه چیز با این واقعیت شروع شد که روتر TP-Link TL-WR1043ND که به طور صادقانه کار می کرد، دیگر نیازهای یک شبکه خانگی را برآورده نمی کرد؛ من یک باند 5 گیگاهرتز و دسترسی سریع به فایل ها در یک دستگاه ذخیره سازی متصل به روتر می خواستم. . پس از نگاهی به انجمن های تخصصی (4pda، ixbt)، سایت هایی با بررسی و مشاهده مجموعه ای از فروشگاه های محلی، تصمیم گرفتم Keenetic Ultra را خریداری کنم.

نظرات خوب صاحبان به نفع این دستگاه خاص بود:

  • هیچ مشکلی با گرمای بیش از حد (در اینجا مجبور شدیم محصولات Asus را رها کنیم)؛
  • قابلیت اطمینان عملیاتی (در اینجا من TP-Link را خط زدم)؛
  • راه اندازی آسان (می ترسیدم نتوانم با آن کنار بیایم و Microtik را خط زدم).

باید با معایب کنار می آمدم:

  • بدون WiFi6، من می خواستم تجهیزاتی را با ذخیره برای آینده بگیرم.
  • 4 پورت LAN، من بیشتر می خواستم، اما این دیگر یک دسته خانگی نیست.

در نتیجه، ما این "سرور" را دریافت کردیم:

میزبانی وب سایت در روتر خانگی شما

  • در سمت چپ ترمینال نوری Rostelecom است.
  • در سمت راست روتر آزمایشی ما قرار دارد.
  • یک SSD 2 گیگابایتی m.128 در اطراف، که در جعبه USB3 از Aliexpress قرار گرفته است، با سیم به روتر متصل شده است، اکنون به زیبایی روی دیوار نصب شده است.
  • در پیش زمینه یک سیم پسوند با سوکت های جدا شده به طور مستقل است، سیم از آن به یک UPS ارزان قیمت می رود.
  • در پس زمینه یک دسته کابل جفت پیچ خورده وجود دارد - در مرحله بازسازی آپارتمان، من بلافاصله سوکت های RJ45 را در مکان هایی که قرار بود تجهیزات قرار بگیرند برنامه ریزی کردم تا به پر شدن وای فای وابسته نباشم.

بنابراین، ما تجهیزات را داریم، باید آن را پیکربندی کنیم:

میزبانی وب سایت در روتر خانگی شما

  • راه اندازی اولیه روتر حدود 2 دقیقه طول می کشد، ما پارامترهای اتصال را به ارائه دهنده نشان می دهیم (ترمینال نوری من به حالت پل تغییر می کند، اتصال PPPoE روتر را بلند می کند)، نام شبکه WiFi و رمز عبور - اساساً همین است. ، روتر راه اندازی می شود و کار می کند.

میزبانی وب سایت در روتر خانگی شما

ما ارسال پورت های خارجی را به پورت های خود روتر در بخش "قوانین شبکه - حمل و نقل" تنظیم می کنیم:

میزبانی وب سایت در روتر خانگی شما

میزبانی وب سایت در روتر خانگی شما

اکنون می‌توانیم به بخش «پیشرفته» برویم، چیزی که از روتر می‌خواستم:

  1. عملکرد یک NAS کوچک برای یک شبکه خانگی؛
  2. انجام عملکردهای وب سرور برای چندین صفحه خصوصی؛
  3. عملکرد ابر شخصی برای دسترسی به داده های شخصی از هر نقطه از جهان.

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

  • ما یک درایو در نظر گرفته شده برای این نقش (درایو فلش، کارت حافظه در کارت خوان، هارد دیسک یا SSD در یک جعبه خارجی می گیریم و با استفاده از آن به Ext4 فرمت می کنیم. MiniTool Partition Wizard Edition Free (من کامپیوتری با لینوکس در دست ندارم، با ابزارهای داخلی امکان پذیر است). همانطور که متوجه شدم، در حین کار، سیستم فقط گزارش ها را در درایو فلش می نویسد، بنابراین اگر پس از راه اندازی سیستم آنها را محدود کنید، اگر قصد دارید زیاد و اغلب در درایو بنویسید - یک SSD یا HDD بهتر است.

میزبانی وب سایت در روتر خانگی شما

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

میزبانی وب سایت در روتر خانگی شما

روی «درایوهای USB و چاپگرها» در بخش «برنامه‌ها» کلیک کنید و سهم را در بخش «شبکه ویندوز» پیکربندی کنید:

میزبانی وب سایت در روتر خانگی شما

و ما یک منبع شبکه داریم که می تواند از رایانه های ویندوز استفاده شود، در صورت لزوم به عنوان یک دیسک متصل می شود: net use y: \192.168.1.1SSD /persistent:yes

سرعت چنین NAS بداهه‌ای برای استفاده خانگی کاملاً کافی است؛ از طریق سیم از کل گیگابیت استفاده می‌کند، از طریق WiFi سرعت آن حدود 400-500 مگابیت است.

میزبانی وب سایت در روتر خانگی شما

راه اندازی فضای ذخیره سازی یکی از مراحل ضروری برای پیکربندی سرور است، پس ما نیاز داریم:
- خرید دامنه و یک آدرس IP ثابت (با استفاده از Dynamic DNS می توانید بدون این کار انجام دهید، اما من قبلاً یک IP ثابت داشتم، بنابراین استفاده از آن راحت تر بود. خدمات رایگان Yandex - با تفویض اختیار دامنه به آنجا، ما میزبانی DNS و نامه را در دامنه خود دریافت می کنیم).

میزبانی وب سایت در روتر خانگی شما

- سرورهای DNS را پیکربندی کنید و رکوردهای A را که به IP شما اشاره دارد اضافه کنید:

میزبانی وب سایت در روتر خانگی شما

چندین ساعت طول می کشد تا تنظیمات مربوط به دامنه و DNS اعمال شود، بنابراین ما به طور همزمان روتر را راه اندازی می کنیم.

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

پس از دسترسی از طریق SSH، رمز عبور را با دستور passwd تغییر دهید و با دستور opkg install [package names] تمامی بسته های لازم را نصب کنید:

میزبانی وب سایت در روتر خانگی شما

در حین راه اندازی، بسته های زیر روی روتر نصب شدند (خروجی دستور opkg list-installed):

لیست بسته ها
bash - 5.0-3
busybox - 1.31.1-1
ca-bundle - 20190110-2
گواهینامه های ca-20190110-2
coreutils - 8.31-1
coreutils-mktemp - 8.31-1
cron - 4.1-3
حلقه - 7.69.0-1
diffutils - 3.7-2
dropbear - 2019.78-3
entware-release - 1.0-2
findutils - 4.7.0-1
glib2 - 2.58.3-5
grep - 3.4-1
ldconfig - 2.27-9
libattr - 2.4.48-2
libblkid - 2.35.1-1
libc - 2.27-9
libcurl - 7.69.0-1
libffi - 3.2.1-4
libgcc - 8.3.0-9
libiconv-full - 1.11.1-4
libintl-full - 0.19.8.1-2
liblua - 5.1.5-7
libmbedtls - 2.16.5-1
libmount - 2.35.1-1
libncurses - 6.2-1
libncursesw - 6.2-1
libndm - 1.1.10-1a
libopenssl - 1.1.1d-2
libopenssl-conf - 1.1.1d-2
libpcap - 1.9.1-2
libpcre - 8.43-2
libpcre2 - 10.34-1
libpthread - 2.27-9
libreadline - 8.0-1a
librt - 2.27-9
libslang2 - 2.3.2-4
libssh2 - 1.9.0-2
libssp - 8.3.0-9
libstdcpp - 8.3.0-9
libuid - 2.35.1-1
libxml2 - 2.9.10-1
مناطق - 2.27-9
mc - 4.8.23-2
ndmq - 1.0.2-5a
nginx - 1.17.8-1
openssl-util - 1.1.1d-2
opkg — 2019-06-14-dcbc142e-2
opt-ndmsv2 - 1.0-12
php7 - 7.4.3-1
php7-mod-openssl - 7.4.3-1
poorbox - 1.31.1-2
terminfo - 6.2-1
zlib - 1.2.11-3
zoneinfo-asia - 2019c-1
zoneinfo-europe - 2019c-1

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

بعد از نصب بسته ها، nginx را پیکربندی می کنیم، من آن را با دو دامنه امتحان کردم - دومی با https پیکربندی شده است و فعلاً یک خرد وجود دارد. از پورت های داخلی 81 و 433 به جای 80 و 443 استفاده می شود، زیرا پنل مدیریت روتر روی پورت های معمولی آویزان است.

etc/nginx/nginx.conf

user  nobody;
worker_processes  1;
#error_log  /opt/var/log/nginx/error.log;
#error_log  /opt/var/log/nginx/error.log  notice;
#error_log  /opt/var/log/nginx/error.log  info;
#pid        /opt/var/run/nginx.pid;

events {
    worker_connections  64;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  /opt/var/log/nginx/access.log main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;

server {
    listen 81;
    server_name milkov.su www.milkov.su;
    return 301 https://milkov.su$request_uri;
}

server {
        listen 433 ssl;
        server_name milkov.su;
        #SSL support
        include ssl.conf;
        location / {
            root   /opt/share/nginx/html;
            index  index.html index.htm;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
            }
        }
}
</spoiler>
<spoiler title="etc/nginx/ssl.conf">
ssl_certificate /opt/etc/nginx/certs/milkov.su/fullchain.pem;
ssl_certificate_key /opt/etc/nginx/certs/milkov.su/privkey.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
ssl_dhparam /opt/etc/nginx/dhparams.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_stapling on;

برای اینکه سایت از طریق https کار کند، از اسکریپت معروف dehydrated استفاده کردم و آن را با استفاده از آن نصب کردم این دستورالعمل. این روند هیچ مشکلی ایجاد نکرد ، من فقط به این واقعیت برخورد کردم که در متن اسکریپت کار روی روتر من شما باید خط موجود در فایل را نظر دهید /opt/etc/ssl/openssl.cnf:

[openssl_conf]
#engines=engines

و توجه دارم که تولید dhparams.pem با دستور "openssl dhparam -out dhparams.pem 2048" در روتر من بیش از 2 ساعت طول می کشد، اگر نشانگر پیشرفت نبود، صبرم را از دست می دادم و راه اندازی مجدد می کردم.

پس از دریافت گواهینامه ها، با دستور “/opt/etc/init.d/S80nginx restart” nginx را مجددا راه اندازی کنید. در اصل، راه اندازی کامل است، اما هنوز وب سایتی وجود ندارد - اگر فایل index.html را در پوشه /share/nginx/html قرار دهیم، یک خرد خواهیم دید.

index.html به

<!DOCTYPE html>
<html>
<head>
<title>Тестовая страничка!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Тестовая страничка!</h1>
<p>Это простая статическая тестовая страничка, абсолютно ничего интересного.</p>
</body>
</html>

برای قرار دادن اطلاعات به زیبایی، استفاده از قالب‌های آماده برای افراد غیرحرفه‌ای مانند من آسان‌تر است؛ پس از جستجوی طولانی در کاتالوگ‌های مختلف، پیدا کردم templatemo.com - انتخاب خوبی از الگوهای رایگان وجود دارد که نیازی به ذکر منبع ندارند (که در اینترنت نادر است؛ بیشتر الگوهای موجود در مجوز از شما می خواهند پیوندی را به منبعی که از آن به دست آمده اند ذخیره کنید).

ما یک الگوی مناسب را انتخاب می کنیم - مواردی برای موارد مختلف وجود دارد، بایگانی را دانلود کرده و آن را در پوشه /share/nginx/html باز کنید، می توانید این کار را از رایانه خود انجام دهید، سپس الگو را ویرایش کنید (در اینجا به حداقل دانش نیاز دارید. از HTML تا ساختارش شکسته نشود) و گرافیک را مطابق شکل زیر جایگزین کنید.

میزبانی وب سایت در روتر خانگی شما

خلاصه: روتر در اصل برای میزبانی یک وب سایت سبک در آن کاملاً مناسب است - اگر بار زیادی انتظار نمی رود، می توانید نصب کنید و php کنیدو پروژه های پیچیده تری را آزمایش کنید (من به nextcloud/owncloud نگاه می کنم، به نظر می رسد نصب های موفقی روی چنین سخت افزاری وجود دارد). قابلیت نصب بسته ها سودمندی آن را افزایش می دهد - به عنوان مثال، زمانی که لازم بود از پورت RDP رایانه شخصی در یک شبکه محلی محافظت کنم، knockd را روی روتر نصب کردم - و ارسال پورت به رایانه شخصی فقط پس از ضربه زدن پورت باز شد.

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

منبع: www.habr.com

اضافه کردن نظر