การโฮสต์เว็บไซต์บนเราเตอร์ที่บ้านของคุณ

ฉันอยากจะ "สัมผัสมือของฉัน" ในบริการอินเทอร์เน็ตมานานแล้วด้วยการตั้งค่าเว็บเซิร์ฟเวอร์ตั้งแต่เริ่มต้นและเผยแพร่สู่อินเทอร์เน็ต ในบทความนี้ ฉันต้องการแบ่งปันประสบการณ์ของฉันในการเปลี่ยนเราเตอร์ที่บ้านจากอุปกรณ์ที่มีฟังก์ชั่นสูงให้เป็นเซิร์ฟเวอร์ที่เกือบจะเต็มเปี่ยม

ทุกอย่างเริ่มต้นด้วยความจริงที่ว่าเราเตอร์ TP-Link TL-WR1043ND ซึ่งให้บริการอย่างซื่อสัตย์ไม่ตอบสนองความต้องการของเครือข่ายในบ้านอีกต่อไป ฉันต้องการแบนด์ 5 GHz และเข้าถึงไฟล์อย่างรวดเร็วบนอุปกรณ์เก็บข้อมูลที่เชื่อมต่อกับเราเตอร์ . หลังจากดูฟอรัมเฉพาะทาง (4pda, ixbt) ไซต์ที่มีบทวิจารณ์ และดูร้านค้าในพื้นที่ต่างๆ ฉันจึงตัดสินใจซื้อ Keenetic Ultra

ความคิดเห็นที่ดีจากเจ้าของใช้งานได้ดีกับอุปกรณ์นี้:

  • ไม่มีปัญหาเรื่องความร้อนสูงเกินไป (ที่นี่เราต้องละทิ้งผลิตภัณฑ์ Asus);
  • ความน่าเชื่อถือในการปฏิบัติงาน (ที่นี่ฉันขีดฆ่า TP-Link)
  • ติดตั้งง่าย (กลัวทนไม่ไหวจึงขีดฆ่า Microtik)

ฉันต้องยอมรับข้อเสีย:

  • ไม่มี WiFi6 ฉันต้องการนำอุปกรณ์สำรองไว้ใช้ในอนาคต
  • พอร์ต LAN 4 พอร์ต ฉันต้องการมากกว่านี้ แต่นี่ไม่ใช่หมวดบ้านอีกต่อไป

เป็นผลให้เราได้รับ "เซิร์ฟเวอร์" นี้:

การโฮสต์เว็บไซต์บนเราเตอร์ที่บ้านของคุณ

  • ด้านซ้ายคือเทอร์มินัลออปติคัลของ Rostelecom
  • ทางด้านขวาคือเราเตอร์ทดลองของเรา
  • m.2 SSD ขนาด 128 GB ที่วางอยู่ในกล่อง USB3 จาก Aliexpress เชื่อมต่อกับเราเตอร์ด้วยสายไฟตอนนี้ติดตั้งบนผนังอย่างเรียบร้อย
  • ในเบื้องหน้าเป็นสายไฟต่อที่มีช่องเสียบแยกอิสระสายไฟจากนั้นไปที่ UPS ราคาไม่แพง
  • ในพื้นหลังมีสายเคเบิลคู่บิดเกลียวจำนวนมาก - ในขั้นตอนของการปรับปรุงอพาร์ทเมนต์ฉันได้วางแผนซ็อกเก็ต RJ45 ทันทีในสถานที่ที่ควรจะวางอุปกรณ์เพื่อไม่ให้ขึ้นอยู่กับ WiFi ที่ถูกทิ้งเกลื่อน

ดังนั้นเราจึงมีอุปกรณ์ เราต้องกำหนดค่ามัน:

การโฮสต์เว็บไซต์บนเราเตอร์ที่บ้านของคุณ

  • การตั้งค่าเริ่มต้นของเราเตอร์ใช้เวลาประมาณ 2 นาที เราระบุพารามิเตอร์การเชื่อมต่อกับผู้ให้บริการ (เทอร์มินัลออปติคอลของฉันเปลี่ยนเป็นโหมดบริดจ์ การเชื่อมต่อ PPPoE จะยกเราเตอร์) ชื่อของเครือข่าย WiFi และรหัสผ่าน - โดยพื้นฐานแล้ว เราเตอร์จะเริ่มทำงานและทำงาน

การโฮสต์เว็บไซต์บนเราเตอร์ที่บ้านของคุณ

เราตั้งค่าการส่งต่อพอร์ตภายนอกไปยังพอร์ตของเราเตอร์เองในส่วน "กฎเครือข่าย - การส่งต่อ":

การโฮสต์เว็บไซต์บนเราเตอร์ที่บ้านของคุณ

การโฮสต์เว็บไซต์บนเราเตอร์ที่บ้านของคุณ

ตอนนี้เราสามารถไปยังส่วน "ขั้นสูง" ได้แล้ว สิ่งที่ฉันต้องการจากเราเตอร์:

  1. การทำงานของ NAS ขนาดเล็กสำหรับเครือข่ายภายในบ้าน
  2. ใช้งานฟังก์ชั่นเว็บเซิร์ฟเวอร์สำหรับเพจส่วนตัวหลายเพจ
  3. ฟังก์ชั่นคลาวด์ส่วนบุคคลสำหรับการเข้าถึงข้อมูลส่วนบุคคลจากทุกที่ในโลก

สิ่งแรกถูกนำไปใช้โดยใช้เครื่องมือในตัวโดยไม่ต้องใช้ความพยายามมาก:

  • เราใช้ไดรฟ์ที่มีไว้สำหรับบทบาทนี้ (แฟลชไดรฟ์, การ์ดหน่วยความจำในตัวอ่านการ์ด, ฮาร์ดไดรฟ์หรือ SSD ในกล่องภายนอกและฟอร์แมตเป็น Ext4 โดยใช้ ตัวช่วยสร้างพาร์ติชัน MiniTool รุ่นฟรี (ฉันไม่มีคอมพิวเตอร์ที่ใช้ Linux แต่เป็นไปได้ด้วยเครื่องมือในตัว) ตามที่ฉันเข้าใจ ในระหว่างการดำเนินการ ระบบจะเขียนเฉพาะบันทึกลงในแฟลชไดรฟ์ ดังนั้นหากคุณจำกัดบันทึกเหล่านี้หลังจากตั้งค่าระบบ คุณสามารถใช้การ์ดหน่วยความจำได้หากคุณวางแผนที่จะเขียนจำนวนมากและบ่อยครั้งลงในไดรฟ์ - SSD หรือ HDD ดีกว่าครับ

การโฮสต์เว็บไซต์บนเราเตอร์ที่บ้านของคุณ

หลังจากนั้นเราจะเชื่อมต่อไดรฟ์เข้ากับเราเตอร์และสังเกตได้จากหน้าจอมอนิเตอร์ระบบ

การโฮสต์เว็บไซต์บนเราเตอร์ที่บ้านของคุณ

คลิกที่ "ไดรฟ์ USB และเครื่องพิมพ์" ไปที่ส่วน "แอปพลิเคชัน" และกำหนดค่าการแชร์ในส่วน "เครือข่าย Windows":

การโฮสต์เว็บไซต์บนเราเตอร์ที่บ้านของคุณ

และเรามีทรัพยากรเครือข่ายที่สามารถใช้งานได้จากคอมพิวเตอร์ Windows โดยเชื่อมต่อเป็นดิสก์หากจำเป็น: net use y: \192.168.1.1SSD /persistent:yes

ความเร็วของ NAS ที่ได้รับการปรับปรุงนั้นค่อนข้างเพียงพอสำหรับใช้ในบ้าน บนสายจะใช้กิกะบิตทั้งหมดผ่าน WiFi ความเร็วจะอยู่ที่ประมาณ 400-500 เมกะบิต

การโฮสต์เว็บไซต์บนเราเตอร์ที่บ้านของคุณ

การตั้งค่าที่เก็บข้อมูลเป็นหนึ่งในขั้นตอนที่จำเป็นในการกำหนดค่าเซิร์ฟเวอร์ จากนั้นเราต้องการ:
- ซื้อโดเมน และที่อยู่ IP แบบคงที่ (คุณสามารถทำได้โดยไม่ต้องใช้ DNS แบบไดนามิก แต่ฉันมี IP แบบคงที่อยู่แล้ว ดังนั้นจึงใช้งานได้ง่ายกว่า บริการยานเดกซ์ฟรี - โดยการมอบหมายโดเมนที่นั่นเราได้รับโฮสติ้ง DNS และเมลบนโดเมนของเรา);

การโฮสต์เว็บไซต์บนเราเตอร์ที่บ้านของคุณ

- กำหนดค่าเซิร์ฟเวอร์ DNS และเพิ่มบันทึก A ที่ชี้ไปที่ IP ของคุณ:

การโฮสต์เว็บไซต์บนเราเตอร์ที่บ้านของคุณ

การตั้งค่าโดเมนและการมอบหมาย DNS จะใช้เวลาหลายชั่วโมงจึงจะมีผล ดังนั้นเราจึงตั้งค่าเราเตอร์ไปพร้อมๆ กัน

ขั้นแรกเราต้องติดตั้งที่เก็บ Entware ซึ่งเราสามารถติดตั้งแพ็คเกจที่จำเป็นบนเราเตอร์ได้ ฉันเอาเปรียบ ด้วยคำสั่งนี้เพียงไม่ได้อัปโหลดแพ็คเกจการติดตั้งผ่าน FTP แต่สร้างโฟลเดอร์โดยตรงบนไดรฟ์เครือข่ายที่เชื่อมต่อก่อนหน้านี้และคัดลอกไฟล์ไปที่นั่นตามปกติ

เมื่อได้รับการเข้าถึงผ่าน SSH ให้เปลี่ยนรหัสผ่านด้วยคำสั่ง passwd และติดตั้งแพ็คเกจที่จำเป็นทั้งหมดด้วยคำสั่ง opkg install [ชื่อแพ็คเกจ]:

การโฮสต์เว็บไซต์บนเราเตอร์ที่บ้านของคุณ

ในระหว่างการตั้งค่า มีการติดตั้งแพ็คเกจต่อไปนี้บนเราเตอร์ (ผลลัพธ์ของคำสั่งที่ติดตั้งรายการ opkg):

รายการแพ็คเกจ
ทุบตี - 5.0-3
กล่องยุ่ง - 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
ผลต่าง - 3.7-2
dropbear - 2019.78-3
เอนแวร์รีลีส - 1.0-2
findutils - 4.7.0-1
glib2 - 2.58.3-5
เกรป - 3.4-1
ldconfig - 2.27-9
ลิแบตเตอร์ - 2.4.48-2
ลิบบลคิด - 2.35.1-1
ลิบซี - 2.27-9
libcurl - 7.69.0-1
libffi - 3.2.1-4
libgcc - 8.3.0-9
libiconv เต็ม - 1.11.1-4
libintl เต็ม - 0.19.8.1-2
ลิบัว - 5.1.5-7
ลิบเบดเทิลส์ - 2.16.5-1
ลิบเมาท์ - 2.35.1-1
libncurses - 6.2-1
libncursesw - 6.2-1
libndm - 1.1.10-1a
ลิโบเนสเซิล - 1.1.1d-2
libopenssl-conf - 1.1.1d-2
ลิบแคป - 1.9.1-2
libpcre - 8.43-2
libpcre2 - 10.34-1
libpthread - 2.27-9
ลิบรีดไลน์ - 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
แมค - 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
ซลิบ - 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 ได้ ฉันใช้สคริปต์ dehydrated ที่รู้จักกันดี โดยติดตั้งโดยใช้ คู่มือฉบับนี้. กระบวนการนี้ไม่ทำให้เกิดปัญหาใด ๆ ฉันเพียงแต่สะดุดกับความจริงที่ว่าในข้อความของสคริปต์สำหรับการทำงานกับเราเตอร์ของฉัน คุณต้องใส่ความคิดเห็นในบรรทัดในไฟล์ /opt/etc/ssl/openssl.cnf:

[openssl_conf]
#engines=engines

และฉันสังเกตว่าการสร้าง dhparams.pem ด้วยคำสั่ง “openssl dhparam -out dhparams.pem 2048” บนเราเตอร์ของฉันใช้เวลามากกว่า 2 ชั่วโมง หากไม่ใช่เพราะตัวบ่งชี้ความคืบหน้า ฉันคงหมดความอดทนและรีบูตเครื่องใหม่

หลังจากได้รับใบรับรองแล้ว ให้รีสตาร์ท nginx ด้วยคำสั่ง “/opt/etc/init.d/S80nginx restart” โดยหลักการแล้ว การตั้งค่าเสร็จสมบูรณ์แล้ว แต่ยังไม่มีเว็บไซต์ - หากเราใส่ไฟล์ index.html ลงในไดเร็กทอรี /share/nginx/html เราจะเห็น stub

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.iniและทดลองกับโปรเจ็กต์ที่ซับซ้อนมากขึ้น (ฉันดูที่ nextcloud/owncloud ดูเหมือนว่าจะมีการติดตั้งบนฮาร์ดแวร์ดังกล่าวได้สำเร็จ) ความสามารถในการติดตั้งแพ็คเกจเพิ่มความมีประโยชน์ - ตัวอย่างเช่นเมื่อจำเป็นต้องปกป้องพอร์ต RDP ของพีซีบนเครือข่ายท้องถิ่นฉันติดตั้งน็อคบนเราเตอร์ - และการส่งต่อพอร์ตไปยังพีซีจะเปิดขึ้นหลังจากการน็อคพอร์ตเท่านั้น

เหตุใดจึงเป็นเราเตอร์และไม่ใช่พีซีทั่วไป เราเตอร์เป็นหนึ่งในฮาร์ดแวร์คอมพิวเตอร์ไม่กี่ชิ้นที่ทำงานตลอดเวลาในอพาร์ทเมนต์หลายแห่ง เราเตอร์ที่บ้านมักจะเงียบสนิทและไซต์ขนาดเล็กที่มีการเข้าชมน้อยกว่าร้อยครั้งต่อวันจะไม่รบกวนมันเลย

ที่มา: will.com

เพิ่มความคิดเห็น