我们将站点托管在家用路由器上

我一直想通过从头开始设置Web服务器并将其发布到Internet上来“触摸” Internet服务。在本文中,我想分享一下将家用路由器从功能有限的设备转变为功能完善的服务器的经验。



这一切都始于这样一个事实,即忠实运行的TP-Link TL-WR1043ND路由器不再满足家庭网络的需求,我想要5 GHz频段并能快速访问连接到该路由器的驱动器上的文件。在浏览了专门论坛(w3bsit3-dns.com,ixbt),有评论的网站并查看了当地商店的范围之后,我决定购买Keenetic Ultra。



为了支持这种特定的设备,业主的好评包括:



  • 过热没有问题(在这里我们不得不放弃华硕产品);
  • 工作的可靠性(这里我删除了TP-Link);
  • 易于设置(我担心不能应付,并且淘汰了MikroTik)。


我不得不接受缺点:



  • 没有WiFi6,我想带些可赚钱的设备;
  • 4个LAN端口,我想要更多,但现在不再是家庭类别。


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







  • 左侧是Rostelecom的光端机;
  • 右边是我们的实验路由器;
  • 路由器的电线已连接到m.2 SSD 128 GB周围,并放置在aliexpress的USB3盒中,现在已整齐地固定在墙上;
  • 前景是一根带有独立断开插座的延长线,从电线到便宜的UPS;
  • 在背景中有一束双绞线-在装修公寓的阶段,我立即在应该放置设备的地方规划了RJ45插座,以免依赖于WiFi干扰。


因此,我们有了设备,我们需要对其进行配置:







  • 路由器的初始配置大约需要2分钟,我们会指出与提供商的连接参数(我的光终端已切换到桥接模式,路由器提起了PPPoE连接),WiFi网络的名称和密码-基本上所有内容,路由器都会启动并正常工作。






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











现在,您可以转到“高级”部分,这是我想要的路由器:



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


第一种是通过内置工具实现的,无需付出太多努力:









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







单击“应用程序”部分中的“ USB磁盘和打印机”,然后在“ Windows网络”部分中设置共享:







并且我们拥有可用于Windows下的计算机,如果需要作为磁盘进行连接:net y:\\ 192.168.1.1 \ SSD /持久性:是



这样的简易NAS的速度足以家用,它通过有线使用所有千兆位,通过WiFi的速度约为400-500兆位。







配置存储是配置服务器的必要步骤之一,然后我们需要:

- 购买域和一个静态IP地址(您可以使用动态DNS来取消此操作,但是我已经有了一个静态IP,因此事实证明,使用免费的Yandex服务会更容易-通过在此委派一个域,我们可以在该域上获得DNS托管和邮件);







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







域和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-certificates — 20190110-2

coreutils — 8.31-1

coreutils-mktemp — 8.31-1

cron — 4.1-3

curl — 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

libuuid — 2.35.1-1

libxml2 — 2.9.10-1

locales — 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。



等/ 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;
            }
        }
}




等/ 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需要2个多小时,如果不是进度指示器,我将失去耐心并重新启动。



收到证书后,使用命令“ /opt/etc/init.d/S80nginx restart”重新启动nginx。原则上,这可以完成设置,但是该站点尚不存在-如果将index.html文件放在/ share / nginx / 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更加容易使用现成的模板 -可以选择很多不需要强制归属的免费模板(这在Internet上很少见,许可证中的大多数模板都要求您保留指向该资源的链接它们是从哪里获得的。



我们选择合适的模板-针对各种情况,下载档案并将其解压缩到/ share / nginx / html目录中,您可以从计算机上执行此操作,然后编辑模板(此处您需要很少的HTML知识才能不破坏结构)和如下图所示更换图形。







简介:路由器非常适合在其上托管轻型站点-原则上-如果预计不会带来繁重的负载,则可以安装php并尝试更复杂的项目(我查看nextcloud / owncloud,似乎在此类硬件上已成功安装)。安装软件包的能力提高了它的实用性-例如,当有必要在本地网络上保护PC的RDP端口时,将其放在路由器上-并且仅在端口被敲除之后才打开到PC的端口转发。



为什么是路由器而不是普通PC?路由器是许多公寓中昼夜不停工作的少数计算机硬件之一,家用路由器通常是完全安静的,每天访问量不足100的小型站点根本不会给路由器带来压力。



All Articles