在家庭路由器上托管网站

我很早就想在互联网服务上“动手”,从头开始搭建一个Web服务器,并将其发布到互联网上。 在本文中,我想分享我将家庭路由器从功能强大的设备转变为几乎成熟的服务器的经验。

这一切都始于曾经忠实服务的TP-Link TL-WR1043ND路由器不再满足家庭网络的需求;我想要5 GHz频段并快速访问连接到路由器的存储设备上的文件。 在浏览了专业论坛(4pda、ixbt)、有评论的网站并查看了当地商店的分类后,我决定购买 Keenetic Ultra。

业主的好评对这款特定设备有利:

  • 没有过热问题(这里我们不得不放弃华硕的产品);
  • 运行可靠性(这里我划掉了TP-Link);
  • 易于设置(我担心我无法处理它并划掉了 Microtik)。

我不得不接受缺点:

  • 没有WiFi6,想带个设备,为以后储备;
  • 4 个 LAN 端口,我想要更多,但这不再是家庭类别。

结果,我们得到了这个“服务器”:

在家庭路由器上托管网站

  • 左边是Rostelecom的光端机;
  • 右边是我们的实验路由器;
  • 闲置的2GB m.128 SSD,放在速卖通的USB3盒子里,用线连接到路由器,现在整齐地挂在墙上;
  • 前景是一根带有独立断开插座的延长线,它的电线连接到一台廉价的 UPS;
  • 背景中有一束双绞线——在装修公寓的阶段,我立即在应该放置设备的地方规划了RJ45插座,以免依赖WiFi乱七八糟。

那么,我们有了设备,我们需要配置它:

在家庭路由器上托管网站

  • 路由器的初始设置大约需要2分钟,我们向提供商指示连接参数(我的光纤终端切换到桥接模式,PPPoE连接解除路由器),WiFi网络的名称和密码 - 基本上就是这样,路由器启动并工作。

在家庭路由器上托管网站

我们在“网络规则-转发”部分设置将外部端口转发到路由器本身的端口:

在家庭路由器上托管网站

在家庭路由器上托管网站

现在我们可以继续“高级”部分,这是我想要从路由器获得的:

  1. 家庭网络小型 NAS 的功能;
  2. 为多个私人页面执行网络服务器功能;
  3. 个人云功能,用于从世界任何地方访问个人数据。

第一个是使用内置工具实现的,不需要太多努力:

  • 我们使用专门用于此角色的驱动器(闪存驱动器、读卡器中的存储卡、外部盒中的硬盘驱动器或 SSD)并使用以下命令将其格式化为 Ext4: MiniTool分区向导免费版 (我手头没有安装Linux的电脑,可以使用内置工具)。 据我了解,在操作过程中,系统仅将日志写入闪存驱动器,因此,如果您在设置系统后对其进行限制,如果您打算经常向驱动器写入大量数据,也可以使用存储卡 - SSD 或硬盘更好。

在家庭路由器上托管网站

之后,我们将驱动器连接到路由器并在系统监视器屏幕上观察它

在家庭路由器上托管网站

单击“应用程序”部分的“USB 驱动器和打印机”,然后在“Windows 网络”部分配置共享:

在家庭路由器上托管网站

我们有一个可以从 Windows 计算机使用的网络资源,如有必要,可以作为磁盘连接:net use y: \192.168.1.1SSD /persistent:yes

这种临时搭建的 NAS 的速度对于家庭使用来说已经足够了;通过电线它可以使用整个千兆位,通过 WiFi 速度约为 400-500 兆位。

在家庭路由器上托管网站

设置存储是配置服务器的必要步骤之一,那么我们需要:
- 购买域名 和一个静态IP地址(你可以通过使用动态DNS来做到这一点,但我已经有一个静态IP,所以事实证明它更容易使用 免费的 Yandex 服务 - 通过在那里委托域名,我们在我们的域上接收 DNS 托管和邮件);

在家庭路由器上托管网站

- 配置 DNS 服务器 并添加指向您的IP的A记录:

在家庭路由器上托管网站

域和 DNS 委派设置需要几个小时才能生效,因此我们正在同时设置路由器。

首先,我们需要安装 Entware 存储库,从中我们可以在路由器上安装必要的软件包。 我利用了 这条指令,只是没有通过FTP上传安装包,而是直接在之前连接的网络驱动器上创建一个文件夹,并按照通常的方式将文件复制到那里。

通过 SSH 获得访问权限后,使用 passwd 命令更改密码,并使用 opkg install [package name] 命令安装所有必需的软件包:

在家庭路由器上托管网站

在安装过程中,以下软件包已安装在路由器上(opkg list-installed 命令的输出):

包列表
bash - 5.0-3
busybox - 1.31.1-1
ca 捆绑包 - 20190110-2
ca-证书 - 20190110-2
coreutils - 8.31-1
coreutils-mktemp - 8.31-1
克朗-4.1-3
卷曲 - 7.69.0-1
diffutils - 3.7-2
掉落熊 - 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
利布卢阿 - 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
库 - 2.27-9
libslang2 - 2.3.2-4
libssh2 - 1.9.0-2
libssp - 8.3.0-9
libstdcpp - 8.3.0-9
利布伊德 - 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
选择 ndmsv2 - 1.0-12
php7 - 7.4.3-1
php7-mod-openssl - 7.4.3-1
穷盒子 - 1.31.1-2
术语信息 - 6.2-1
zlib-1.2.11-3
亚洲区信息 - 2019c-1
欧洲地区信息 - 2019c-1

也许这里有多余的东西,但驱动器上有很多空间,所以我没有费心去查看它。

安装软件包后,我们配置 nginx,我尝试使用两个域 - 第二个域配置了 https,现在有一个存根。 使用内部端口 81 和 433 而不是 80 和 443,因为路由器管理面板挂在普通端口上。

等/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 运行,我使用了众所周知的脱水脚本,并使用 本手册。 这个过程没有造成任何困难,我只是偶然发现在我的路由器上工作的脚本文本中 你需要注释掉文件中的行 /opt/etc/ssl/openssl.cnf:

[openssl_conf]
#engines=engines

我注意到,在我的路由器上使用命令“openssl dhparam -out dhparams.pem 2048”生成 dhparams.pem 需要两个多小时,如果没有进度指示器,我会失去耐心并重新启动。

收到证书后,使用命令“/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>

为了美观地放置信息,对于我这样的非专业人士来说,使用现成的模板会更容易;经过长时间的搜索各种目录,我发现 模板网站 - 有很多不需要归属的免费模板(这在互联网上很少见;许可证中的大多数模板都要求您保存指向其获取资源的链接)。

我们选择一个合适的模板 - 有适合各种情况的模板,下载存档并将其解压到 /share/nginx/html 目录中,您可以在计算机上执行此操作,然后编辑模板(这里您需要最少的知识HTML 以免破坏结构)并替换图形,如下图所示。

在家庭路由器上托管网站

摘要:原则上,路由器非常适合在其上托管轻型网站 - 如果预计不会有大负载,您可以 安装和PHP,并尝试更复杂的项目(我查看了 nextcloud/owncloud,在此类硬件上似乎有成功的安装)。 安装软件包的能力增加了它的实用性——例如,当需要保护本地网络上PC的RDP端口时,我在路由器上安装了knockd——并且只有在端口knock之后才打开到PC的端口转发。

为什么是路由器而不是普通电脑? 路由器是许多公寓中为数不多的全天候工作的计算机硬件之一;家庭路由器通常是绝对安静的,每天访问量少于一百次的轻型站点根本不会打扰它。

来源: habr.com

添加评论