Lưu trữ một trang web trên bộ định tuyến tại nhà của bạn

Từ lâu, tôi đã muốn “chạm tay” vào các dịch vụ Internet bằng cách thiết lập một máy chủ web từ đầu và phát hành nó lên Internet. Trong bài viết này, tôi muốn chia sẻ kinh nghiệm của mình trong việc chuyển đổi bộ định tuyến gia đình từ một thiết bị có chức năng cao thành một máy chủ gần như hoàn chỉnh.

Mọi chuyện bắt đầu với thực tế là bộ định tuyến TP-Link TL-WR1043ND, vốn đã hoạt động trung thực, không còn đáp ứng được nhu cầu của mạng gia đình; Tôi muốn có băng tần 5 GHz và truy cập nhanh vào các tệp trên thiết bị lưu trữ được kết nối với bộ định tuyến . Sau khi xem qua các diễn đàn chuyên biệt (4pda, ixbt), các trang web có đánh giá và xem xét các loại cửa hàng địa phương, tôi quyết định mua Keenetic Ultra.

Đánh giá tốt từ các chủ sở hữu đã ủng hộ thiết bị cụ thể này:

  • không có vấn đề về quá nhiệt (ở đây chúng tôi phải từ bỏ các sản phẩm của Asus);
  • độ tin cậy hoạt động (ở đây tôi đã gạch bỏ TP-Link);
  • dễ cài đặt (tôi sợ không xử lý được nên đã gạch bỏ Microtik).

Tôi đã phải đối mặt với những nhược điểm:

  • không có WiFi6, tôi muốn mang theo thiết bị dự trữ cho tương lai;
  • 4 cổng LAN, tôi muốn nhiều hơn, nhưng đây không còn là loại dành cho gia đình nữa.

Kết quả là chúng ta có được “máy chủ” này:

Lưu trữ một trang web trên bộ định tuyến tại nhà của bạn

  • bên trái là thiết bị đầu cuối quang học của Rostelecom;
  • bên phải là bộ định tuyến thử nghiệm của chúng tôi;
  • một ổ SSD 2 GB m.128 nằm xung quanh, đặt trong hộp USB3 từ Aliexpress, được kết nối với bộ định tuyến bằng dây, giờ đây nó được gắn gọn gàng trên tường;
  • ở phía trước là một dây nối dài với các ổ cắm được ngắt kết nối độc lập, dây từ nó đi đến một UPS rẻ tiền;
  • phía sau có một đống dây cáp xoắn đôi - ở giai đoạn cải tạo căn hộ, tôi lập tức lên kế hoạch cho ổ cắm RJ45 ở những nơi lẽ ra phải đặt thiết bị, để không phụ thuộc vào việc WiFi bị vứt bừa bãi.

Vì vậy, chúng ta có thiết bị, chúng ta cần cấu hình nó:

Lưu trữ một trang web trên bộ định tuyến tại nhà của bạn

  • Quá trình thiết lập ban đầu của bộ định tuyến mất khoảng 2 phút, chúng tôi chỉ ra các thông số kết nối cho nhà cung cấp (thiết bị đầu cuối quang của tôi được chuyển sang chế độ cầu nối, kết nối PPPoE nâng bộ định tuyến), tên mạng WiFi và mật khẩu - về cơ bản là vậy , bộ định tuyến sẽ khởi động và hoạt động.

Lưu trữ một trang web trên bộ định tuyến tại nhà của bạn

Chúng tôi thiết lập chuyển tiếp các cổng bên ngoài đến các cổng của chính bộ định tuyến trong phần “Quy tắc mạng - Chuyển tiếp”:

Lưu trữ một trang web trên bộ định tuyến tại nhà của bạn

Lưu trữ một trang web trên bộ định tuyến tại nhà của bạn

Bây giờ chúng ta có thể chuyển sang phần “nâng cao”, những gì tôi muốn từ bộ định tuyến:

  1. chức năng của một NAS nhỏ cho mạng gia đình;
  2. thực hiện các chức năng của máy chủ web cho một số trang riêng tư;
  3. chức năng đám mây cá nhân để truy cập dữ liệu cá nhân từ mọi nơi trên thế giới.

Việc đầu tiên được thực hiện bằng cách sử dụng các công cụ tích hợp mà không cần nhiều nỗ lực:

  • Chúng tôi lấy một ổ đĩa dành cho vai trò này (ổ đĩa flash, thẻ nhớ trong đầu đọc thẻ, ổ cứng hoặc SSD trong hộp bên ngoài và định dạng nó thành Ext4 bằng cách sử dụng Thuật sĩ phân vùng MiniTool Phiên bản miễn phí (Tôi không có máy tính chạy Linux, có thể thực hiện được bằng các công cụ tích hợp sẵn). Theo tôi hiểu, trong quá trình hoạt động, hệ thống chỉ ghi nhật ký vào ổ đĩa flash, vì vậy nếu bạn hạn chế chúng sau khi thiết lập hệ thống, bạn cũng có thể sử dụng thẻ nhớ nếu định ghi nhiều và thường xuyên vào ổ đĩa - ổ SSD hoặc HDD tốt hơn.

Lưu trữ một trang web trên bộ định tuyến tại nhà của bạn

Sau đó, chúng tôi kết nối ổ đĩa với bộ định tuyến và quan sát nó trên màn hình giám sát hệ thống

Lưu trữ một trang web trên bộ định tuyến tại nhà của bạn

Nhấp vào “Ổ đĩa USB và máy in” đến phần “Ứng dụng” và định cấu hình chia sẻ trong phần “Mạng Windows”:

Lưu trữ một trang web trên bộ định tuyến tại nhà của bạn

Và chúng ta có tài nguyên mạng có thể sử dụng từ máy tính Windows, kết nối dưới dạng đĩa nếu cần: ​net use y: \192.168.1.1SSD /persistent:yes

Tốc độ của một NAS ngẫu hứng như vậy là khá đủ để sử dụng tại nhà, qua dây, nó sử dụng toàn bộ gigabit, qua WiFi, tốc độ khoảng 400-500 megabit.

Lưu trữ một trang web trên bộ định tuyến tại nhà của bạn

Thiết lập bộ nhớ là một trong những bước cần thiết để cấu hình máy chủ, khi đó chúng ta cần:
- mua một tên miền và một địa chỉ IP tĩnh (bạn có thể thực hiện mà không cần điều này bằng cách sử dụng DNS động, nhưng tôi đã có IP tĩnh nên hóa ra nó dễ sử dụng hơn dịch vụ Yandex miễn phí - bằng cách ủy quyền tên miền ở đó, chúng tôi nhận được dịch vụ lưu trữ DNS và thư trên miền của chúng tôi);

Lưu trữ một trang web trên bộ định tuyến tại nhà của bạn

- cấu hình máy chủ DNS và thêm bản ghi A trỏ đến IP của bạn:

Lưu trữ một trang web trên bộ định tuyến tại nhà của bạn

Phải mất vài giờ để cài đặt ủy quyền tên miền và DNS có hiệu lực, vì vậy chúng tôi đang đồng thời thiết lập bộ định tuyến.

Đầu tiên, chúng ta cần cài đặt kho lưu trữ Entware, từ đó chúng ta có thể cài đặt các gói cần thiết trên bộ định tuyến. Tôi đã lợi dụng hướng dẫn này, chỉ không tải gói cài đặt lên qua FTP mà tạo một thư mục trực tiếp trên ổ đĩa mạng đã kết nối trước đó và sao chép tệp vào đó theo cách thông thường.

Có được quyền truy cập thông qua SSH, hãy thay đổi mật khẩu bằng lệnh passwd và cài đặt tất cả các gói cần thiết bằng lệnh opkg install [tên gói]:

Lưu trữ một trang web trên bộ định tuyến tại nhà của bạn

Trong quá trình thiết lập, các gói sau đã được cài đặt trên bộ định tuyến (đầu ra của lệnh opkg list-installed):

Danh sách các gói
bash - 5.0-3
hộp bận - 1.31.1-1
ca-bundle - 20190110-2
ca-chứng chỉ - 20190110-2
coreutils - 8.31-1
coreutils-mktemp - 8.31-1
cron - 4.1-3
cong - 7.69.0-1
khuếch tán - 3.7-2
thả gấu - 2019.78-3
phát hành phần mềm - 1.0-2
tìm kiếm - 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-đầy đủ - 1.11.1-4
libintl-đầy đủ - 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
địa phương - 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
hộp nghèo - 1.31.1-2
thông tin hạn - 6.2-1
zlib - 1.2.11-3
Zoneinfo-asia - 2019c-1
khu vực thông tin-châu Âu - 2019c-1

Có lẽ ở đây có gì đó thừa thãi nhưng ổ đĩa còn nhiều dung lượng nên tôi không buồn lục lọi.

Sau khi cài đặt các gói, chúng tôi định cấu hình nginx, tôi đã thử với hai miền - miền thứ hai được định cấu hình bằng https và hiện tại vẫn còn sơ khai. Các cổng nội bộ 81 và 433 được sử dụng thay vì 80 và 443 vì bảng quản trị bộ định tuyến bị treo trên các cổng thông thường.

v.v/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;

Để trang web hoạt động qua https, tôi đã sử dụng tập lệnh khử nước nổi tiếng, cài đặt nó bằng cách sử dụng hướng dẫn này. Quá trình này không gây ra bất kỳ khó khăn nào, tôi chỉ tình cờ phát hiện ra rằng trong văn bản của tập lệnh làm việc trên bộ định tuyến của tôi bạn cần bình luận dòng trong tập tin /opt/etc/ssl/openssl.cnf:

[openssl_conf]
#engines=engines

Và tôi lưu ý rằng việc tạo dhparams.pem bằng lệnh “openssl dhparam -out dhparams.pem 2048” trên bộ định tuyến của tôi mất hơn 2 giờ, nếu không có chỉ báo tiến trình, tôi sẽ mất kiên nhẫn và khởi động lại.

Sau khi nhận được chứng chỉ, hãy khởi động lại nginx bằng lệnh “/opt/etc/init.d/S80nginx restart”. Về nguyên tắc, quá trình thiết lập đã hoàn tất, nhưng vẫn chưa có trang web - nếu chúng ta đặt tệp index.html vào thư mục /share/nginx/html, chúng ta sẽ thấy một sơ khai.

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>

Để đặt thông tin đẹp mắt, người không chuyên như tôi sử dụng các mẫu có sẵn sẽ dễ dàng hơn; sau một thời gian dài tìm kiếm qua nhiều danh mục khác nhau, tôi đã tìm thấy templatemo.com - có rất nhiều mẫu miễn phí không yêu cầu ghi công (điều này rất hiếm trên Internet; hầu hết các mẫu trong giấy phép đều yêu cầu bạn lưu liên kết đến tài nguyên mà chúng được lấy từ đó).

Chúng tôi chọn một mẫu phù hợp - có những mẫu dành cho nhiều trường hợp khác nhau, tải xuống kho lưu trữ và giải nén nó vào thư mục /share/nginx/html, bạn có thể thực hiện việc này từ máy tính của mình, sau đó chỉnh sửa mẫu (ở đây bạn sẽ cần kiến ​​​​thức tối thiểu của HTML để không phá vỡ cấu trúc) và thay thế đồ họa như trong hình bên dưới.

Lưu trữ một trang web trên bộ định tuyến tại nhà của bạn

Tóm tắt: về nguyên tắc, bộ định tuyến khá phù hợp để lưu trữ một trang web nhẹ trên đó - nếu bạn không mong đợi tải trọng lớn, bạn có thể cài đặt và phpvà thử nghiệm các dự án phức tạp hơn (tôi xem nextcloud/owncloud, dường như có những cài đặt thành công trên phần cứng như vậy). Khả năng cài đặt các gói làm tăng tính hữu dụng của nó - ví dụ: khi cần bảo vệ cổng RDP của PC trên mạng cục bộ, tôi đã cài đặt knockd trên bộ định tuyến - và việc chuyển tiếp cổng tới PC chỉ được mở sau khi gõ cổng.

Tại sao lại là bộ định tuyến mà không phải PC thông thường? Bộ định tuyến là một trong số ít phần cứng máy tính hoạt động suốt ngày đêm trong nhiều căn hộ; bộ định tuyến gia đình thường hoàn toàn im lặng và một trang web nhẹ có ít hơn một trăm lượt truy cập mỗi ngày sẽ không làm phiền nó chút nào.

Nguồn: www.habr.com

Thêm một lời nhận xét