我的环境:
公网ip,光(๐•ᴗ•๐)桥接,(๐•ᴗ•๐)由拨号
HPE GEN10 ,ESXI +Debian11/openwrt
能实现的功能:通过互联网访问随时访问家中NAS资源,比如各种小姐姐视频、电视剧等
我是如何实现的:
前期准备:
判断自己是否拥有公网IP,如果能搞到公网IP 就继续向下
购买域名,建议买小众后缀,主要是便宜。保存好域名的ACCESS KEY ,后面DDNS和签发ssl证书都用的上。
安装DDNS脚本,例如 :
这里解释一下DDNS的作用:
虽然咱们手上有公网IP ,但是这个ip每次拨号都会变。或者一定时间后,运营商也会给你变。
这样就导致,本来将域名解析到1.2.3.4,后面他给你变到了2.3.4.5。那所有的服务就不通了。
DDNS脚本的作用就是在这里,定期检查本机地址和记录的解析地址是否一致,如果不一致,就通过ACCESS KEY和API 把解析记录改到当前的地址。
这一步做通后,我们假设域名是 aaa.yourdomain.com 是第一个服务。bbb.yourdomain.com是第二个服务
这两个服务都是跑在本地ip地址为192.168.20.21的NAS上(我的情况就是那台HPE GEN10)
下一步,安装NGINX,并写好相关conf文件字段
我把我常用的nginx 配置字段分享过来
server {
listen 6028 ssl http2;
#listen [::]:443 ssl http2;
server_name aaa.yourdomain.com;
# Use Mozilla's guidelines for SSL/(๐•ᴗ•๐)S settings
# https://mozilla.gith(๐•ᴗ•๐).io/server-side-(๐•ᴗ•๐)s/ssl-config-generator/
# NOTE: some settings below might be redundant
ssl_certificate /etc/nginx/cert/nginx-crt.pem;
ssl_certificate_key /etc/nginx/cert/nginx-key.pem;
client_max_body_size 1024m;
location / {
proxy_pass http://192.168.20.21:804;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
#以下代码使支持WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
}
在这一段配置文件中,需要更改的有:
listen 6028 ssl http2; 其中6028是nginx监听的端口号,只有通过6028端口访问到nginx的请求,才会按照这一段配置要求进行。即https://aaa.yourdomain.con:6028 才会跳转http://192.168.20.21:804这个服务。
server_name aaa.yourdomain.com; 这个你自己规定的服务域名,要按照自己的需求更改
ssl_certificate /etc/nginx/cert/nginx-crt.pem; ssl证书存放(๐•ᴗ•๐)径,如果出错nginx是不会启动的
ssl_certificate_key /etc/nginx/cert/nginx-key.pem;ssl证书存放(๐•ᴗ•๐)径,如果出错nginx是不会启动的
proxy_pass http://192.168.20.21:804; 本地服务的访问地址,比如plex默认端口是32400 ,那么这里就应该填https://192.168.20.21:32400 ;再一个例子,transmission是9091,那么就是http://192.168.20.21:9091
服务器上往往有多个服务需要nginx代理,对于第二个第三个服务只需要写同样配置就可以,但是listen端口要不同
server {
listen 6028 ssl http2;
#listen [::]:443 ssl http2;
server_name aaa.yourdomain.com;
# Use Mozilla's guidelines for SSL/(๐•ᴗ•๐)S settings
# https://mozilla.gith(๐•ᴗ•๐).io/server-side-(๐•ᴗ•๐)s/ssl-config-generator/
# NOTE: some settings below might be redundant
ssl_certificate /etc/nginx/cert/nginx-crt.pem;
ssl_certificate_key /etc/nginx/cert/nginx-key.pem;
client_max_body_size 1024m;
location / {
proxy_pass http://192.168.20.21:804;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
#以下代码使支持WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
}
server {
listen 6029 ssl http2;
#listen [::]:443 ssl http2;
server_name bbb.yourdomain.com;
# Use Mozilla's guidelines for SSL/(๐•ᴗ•๐)S settings
# https://mozilla.gith(๐•ᴗ•๐).io/server-side-(๐•ᴗ•๐)s/ssl-config-generator/
# NOTE: some settings below might be redundant
ssl_certificate /etc/nginx/cert/nginx-crt.pem;
ssl_certificate_key /etc/nginx/cert/nginx-key.pem;
client_max_body_size 1024m;
location / {
**proxy_pass http://192.168.20.21:805**;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
#以下代码使支持WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
}
到此,先不要着急启动nginx,因为没有把证书安排好,nginx是无法启动的。
关于SSL证书
证书获得方式的有两种,比如阿里云这些云服务商,他们即提供域名也兜售证书,免费的ssl证书也只有1年的有效期,每年都要重新换发,重新安装。
另一种就是通过acme.sh脚本自动换发和安装。具体操作参考gith(๐•ᴗ•๐)教程 https://gith(๐•ᴗ•๐).com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E 。配合 access key 和API, acme.sh可以每三个(๐•ᴗ•๐)自动签发证书并安装
现在可以重启nginx,但是你会发现你的服务还是不通,浏览器会显示连接拒绝。
这是因为还没有在(๐•ᴗ•๐)由器上做端口转发
当你在浏览器地址栏里输入https://aaa.yourdomain.com:6028后,通过查询DNS服务器,aaa.yourdomin.com这个域名是解析到了1.2.3.4。但是当这个请求到了你家门口,你家的门房((๐•ᴗ•๐)由器)就犯难了,这是给哪个屋的请求?我们这没有一个住6028的。
所以需要在(๐•ᴗ•๐)由器上做一个端口转发,即从互联网来的某个端口请求,转发到内网的某一个机器内
这里端口转发就写成:互联网来的6028,转发到192.168.20.21的6028上。
软件方面,我安装了webdav。KODI里添加了webdav连接后,安装了kodi的设备都可以正常播放
大概就是这样一个流程
更新:
这几天在其他技术论坛发现部分地区的运营商开始严查pcdn等行为。这(๐•ᴗ•๐)方案在理论和原理上其实是摸了家庭宽带不得开办网站和提供服务的红线。严重的可能会直接掐宽带。
换句话说,运营商想查就一定能查的到,想抓一定会抓得到,这里面的风险需要各位自行把握
按照大部分的情况,走https+高位非常用端口+完全自用+一周没多少https入站连接,运营商一般也懒得找麻烦。但是毕竟刀子在人家手上,还是需要低调