kn69968 发表于 2024-12-23 21:51

DIY 家庭小主机 AIO (10)——将私服暴露到公网, 安全便利地回家及无缝网络服务

本帖最后由 kn69968 于 2024-12-23 21:54 编辑

长期以来都是小透明和资深潜水党在社区里吸取大佬们的营养和指导, 近日折腾了一下小主机和 aio, 并且将过程整理成教程在社区里发表出来, 不求能够指导别人, 但求别人能有个参考, 并且一起交流学习.

各位说话好听 头发多 精力旺盛 过年涨薪的 佬们 觉得可以的话 就给我点个赞吧.

另外本人热爱分享, 热爱搞机, 馒头 pt 上传100T+,发种100+,做种500+, 做种时间一年(数据准备另开一贴贴出), 希望基于此能得到大佬的厚爱发个邀请:(btschool,聆音, 红叶,emp峨眉派/P0 rNbay都行,), 丰富下自己的下载中心, 再过几周我就可以回来发馒头药了

邮箱: hasdrsafsdeyuo@gmail.com



系列文章目录:
[*](1)PVE安装与卸载
[*](2)核显虚拟化
[*](3)个人云电脑的搭建 vgpu 硬解串流
[*](4)iStoreOS 软路由安装与网络流量分流实验
[*](5)PVE 下以虚拟机方式安装群晖 NAS 的技术可行性探讨
[*](6) NAS / 私服 功能规划与服务搭建
[*]私人网盘/同步备份中心
[*]内容流转中心和家庭影音媒体中心
[*]云笔记知识管理 云密码本 协同办公 和 其他效率服务
[*]将私服暴露到公网, 安全便利地回家及无缝网络服务
[*]PVE 下关于 NAS Linux 等虚拟机的系统管理


前言
本教程需要你掌握基本的 shell 技能。就是能够 ssh 登录,cd 目录,使用 vi 编辑文本文件。
[*]网络黑产灰产: 网络世界的黑客活动是不会考虑你个人感受的, 有很多人在法律边缘游走.个人搭建的服务有一些安全漏洞非专业人士不一定能及时补救.
[*]过去的一个案例:若干年前的勒索病毒即使绑架了你的个人数据, 你交了钱也不一定能够及时给你解绑, 或者人家只是广撒网.
[*]一些现象:一些机关单位竟然还在用 Windows XP, 英国公立医院就是这样中招勒索病毒的; 很多人还在一个密码走天下, 甚至不开二次验证; 在互联网资产搜索引擎 fofa 以关键字 title="alist"country="CN" 搜索一下, 看看大家部署的 alist 私服, 如果是专业网络人士就可能去扫你的服务来找漏洞了.
网络上关于 服务暴露到公网的安全讨论不绝于耳, 但是想一下, 折腾那么多一个服务在外面或者别人不能用, 在家里自己玩有啥意思, 这些软件服务不是就是暴露到公网使用的吗? 因此本文探讨了一些安全实践经验和将服务暴露到公网的安全方法.关键词: 强密码, 高位端口, 二步验证, 最小权限, **, shadowsocks, 防火墙

安全实践所有服务基本安全实践
[*]使用强密码
[*]最小使用权限.
[*]修改默认端口. 改为高位端口


群晖安全实践
[*]ssh. 修改 ssh 端口为 高位端口, 如 20908 , 并在必要时开, 正常处于关闭的状态.
[*]群晖登录. DSM http 端口改为 20807, https 为 20806
[*]更改强度高的随机密码. 开启二步验证. 并信任自己的设备.
[*]开防火墙. 只开放必须端口号,其余全部禁掉; 所有非中国大陆IP禁止掉, 内网按需求全开.
[*]登录保护. 控制面板 > 安全性 > 防护. 开启自动封锁1分钟内2次登录失败则封锁, 并开启白名单允许内网和自己的设备. 开启 DDOS 防护
[*]所有权限按照最小权限授权原则. 分开不同账户管理不同类型的数据.
[*]NFS 文件服务只开启对 linux 的几个主机 IP 开启.


网上冲浪和账号安全实践
强密码:
[*]wifi 密码. 全家推广 密码管理工具. 包括老人.
[*]所有账号采用随机强密码

隐私保护
[*]账号公开信息一定要注意防关联. 用户名尽量随机.
[*]隐私保护有时需要考量方便,实际功能和隐私保护间的平衡. 例如社交账户有辨识性的账户或者实名认证的对社交有好处, 但是会同时暴露个人身份信息, 因此 具体情况具体分析. 如果注重隐私不管社交的话, 名字,头像,照片,注册手机号,邮箱尽量随机一点, 并且在每个软件关于隐私的地方都仔细查看并按需配置.


PVE 安全实践参考 为Proxmox VE PVE启用防火墙 和 Proxmox VE 防火墙介绍
[*]数据中心的 ipset 好像不管用, 要自己设置自己的.
[*]数据中心的防火墙需要生效, pve主机和虚拟机的防火墙才会生效.
[*]在数据中心的防火墙创建安全组, 创建统一的网络防火墙规则, 让每个主机都插入特定的安全组.(生效有延迟,请自己验证是否生效,如果不行,则每个虚拟机都创建一个防火墙规则)
[*]pve 主机和虚拟机的防火墙是分开的, 虽然所有配置都存储在集群文件系统上,但基于iptables的防火墙服务运行在每个集群节点上,从而在虚拟机之间提供完全隔离。
[*]联网以后所有流量是从 路由器 WAN 口进来的, 也就是 openwrt 的 WAN 口 和光猫的 WAN 口. 不过为了保险起见, 我们所有主机都插入同一个安全组 拒绝其他流量.
[*]对所有主机所有账户使用强密码. pve webui 登录密码, 用户密码, 关闭 ssh 密码登录.
[*]修改 所有主机 ssh 端口 为高位端口.


路由器安全实践
[*]禁止 ssh 密码登录, 改强密码.
[*]账户更改强密码.
[*]开放内网 docker 放行
[*]除了特定端口,封锁所有公网进入 WAN 口的流量.


将私服暴露到公网, 安全便利地回家
我的规划是, 在群晖和软路由部署一些服务, 防火墙对局域网开放这些服务,方便家人使用和调试. 接着在软路由部署 shadowsocks 服务, 并且软路由对公网开放几个端口: ping等, shadowsocks 端口. 所有回家流量都需要经过 shadowsocks 客户端的密码验证,并且流量加密. 接着在 软路由部署 nginx-proxy-manager 反代所有小主机的服务, 添加 SSL 加密. 便捷性方面则通过 IPV6+DDNS 绑定域名到家里软路由的 IP 地址.这样将所有的服务的安全防护收拢到开源社区里经过多年验证的成熟的 shadowsocks 服务上,理论上风险会降低很多。这样其实就相当于跳板机。具体操作。

IPV6+DDNS.
此步骤是为了让我们访问家里的服务就像输入 baidu.com 一样简单,简单来讲是在 DNS 服务器上实时更新记录,似的 mydomain.me 能够始终正确指向我们经常变化的 ipv6 公网地址。 (a)购买域名。首先到 spaceship 花8块钱 用支付宝够买个域名。(b)到腾讯云创建解析服务。接着到 dnspod.cn 腾讯 DNS 服务注册账号,添加自己的域名,(c)托管解析服务. spaceship 的页面将 域名 domain.com 的名称服务器填写 dnspod.cn 提示的名称服务器域名,作用是将改域名的 DNS 解析服务托管到腾讯云 dnspod. (d) dnspod 创建 API token. 在 dnspod 创建 token 后保存下来. (e) openwrt 安装 DDNS-go 服务并配置。打开 ddnsgo的 webui 配置页面 (http://ip:9876), 配置好 dnspod 的 token, 并且在 ipv6 一栏配置好需要添加解析记录的域名和应该获取哪个 ipv6 的地址。保存后,在右侧就能看到更新 DNS 记录的日志。在 dnspod.cn 的控制台也能看到我们的 AAAA记录(ipv6记录)
https://pic3.zhimg.com/v2-884f940320773f9179ffc2222db4c9a0_1440w.jpg
购买域名后进入域名管理界面
https://pica.zhimg.com/v2-cc19085e5fcb40db0d5f11329435989c_1440w.jpg
更新名称服务器为腾讯的地址, 就是将解析服务托管给腾讯
https://pica.zhimg.com/v2-7363a5b0e0becc6245e151619a2138c4_1440w.jpg
ddns-go 配置。 填入 ddnspod 的apiid和密钥,同时配置ipv6 获取的ipv6 公网地址和解析的域名
https://pic1.zhimg.com/v2-8281f01861d033763837c33d01233678_1440w.jpg
dnspod 控制台可看到我们的域名记录Nginx 反代服务。
正常来讲当我们部署一个服务后, 通过 http://ip:port 的方式就能访问,但是 http 流量是没有加密的,意思就是你的每一个访问请求, 你的所有流量在局域网内都是明文的裸奔的,,而且 http://ip:port 的地址不符合我们的习惯。因此使用 Nginx 来反向代理服务,意思就是我们每次在浏览器敲下一个地址,例如 https://alist.mydomain.me 该流量会首先经过 Nginx 服务器, 然后再将流量转发到实际的服务器 http://ip:port. 接下来是在 openwrt 上部署 nginx-proxy-manager, 因为上一步所购买的域名就指向 openwrt 的 ip 地址。
分为几个子步骤:
(a) 释放软路由的 http(s)默认端口。修改openwrt 的 uhttp 的 监听端口(80,443), 为 (8080和8443), 将 (80,8443) 让给 nginx-proxy-manager. ssh 登录到 openwrt 后,修改 /etc/config/uhttpd 中的对应下面的四行内容为下面的四行,就是监听443改为监听8443, 监听80改为监听8080, 再通过命令重启服务 /etc/init.d/uhttpd restart
❯ cat /etc/config/uhttpd

config uhttpd 'main'
      list listen_http '0.0.0.0:8080'
      list listen_http '[::]:8080'
      list listen_https '0.0.0.0:8443'
      list listen_https '[::]:8443'

(b) openwrt 下部署 nginx-proxy-manager 容器.同样在 docker 管理目录下建立 nginx-proxy-manager 的目录, 此处我的 docker 根目录为 /mnt/sata1-4/docker/


[ ! -d /mnt/sata1-4/docker/user_containers/nginx_proxy_manager ] && mkdir -p /mnt/sata1-4/docker/user_containers/nginx_proxy_manager

接下来 通过 进入该目录并创建 docker-compose.yml, 和目录结构, 并执行 tee 将容器的配置清单写入 docker-compose.yml. 通过 docker-compose up -d 启动容器后, 将会监听80端口也就是http流量, 监听81端口用于登录 nginx-proxy-manager 的管理界面, 监听443端口就是 https 流量.

# 进入目录, 创建目录结构
cd/mnt/sata1-4/docker/user_containers/nginx_proxy_manager
mkdir data letsencrypt

# 创建文件
touch docker-compose.yml

# 填写 docker-compose.yml 文件
tee -a docker-compose.yml >/dev/null <<EOT
services:
app:
    image: 'docker.io/jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
EOT


如无意外(有则通过 docker logs container_id 来查看日志), 我们通过 http://软路由IP地址:81 登录到npm的管理界面. 如下图所示.
为什么要这么做, 请进一步了解 http, https, ssl, 证书, 证书链 等相关 概念. 简单来说就是你按照这些操作执行以后,在chrome等受认证的浏览器 通过 https://domain 来访问网址, 能够保证你访问过程中没有人能够篡改你得到的数据,没有人能从中间偷盗你的隐私安全信息.
https://pic3.zhimg.com/v2-624584b2e7950c46ed31425cf7511246_1440w.jpg
在 lets encrypt 获取证书收信人机构签发的免费的泛域名证书。 在 nginx-proxy-manager 界面,首先我们为我们的域名和网站添加证书, 采用 letsencrypt 的三个月免费证书. 按照如下图的导航: 【SSL Certificate】- 【Add SSL Certificate】- 【选择 Let's Encrypt】- 【填写泛域名 *.http://yourdain.me 然后按回车】- 【填写邮箱】-【打开 dns challenge, 泛域名必须这样】-【选择 dns 供应商为 dnspod】-【填写之前在腾讯dnspod 获得的 id 和 token】-【勾选同意】-【保存】。过一会就会自动获得证书了。
为什么, 因为第一免费, 第二支持泛域名(*.http://your.domain.me), 腾讯的只能支持一个域名, 泛域名要收费.
https://pica.zhimg.com/v2-5f9b82ff67dc9809acabbe0bf917e7d2_1440w.jpg
在 lets encrypt 获取证书收信人机构签发的免费的泛域名证书

添加反代项目。按图操作即可。假设此时我要反代 alist, 也就是日后不再通过 http://ip:5244 的方式访问, 而是 https://alist.domain.me 的方式访问,而且安全、流量加密、网址容易记住。添加 proxy host. 按照1234 步骤操作, 其中第六七八步就是实际 alist 的 ip 和 端口。我圈住的开关你看不懂就代表不需要,默认即可。然后选择 SSL证书, 这里选择我们刚才申请签发的 Let's Encrypt 的泛域名证书, 并且开启 Force SSL, 保存。
https://pic2.zhimg.com/v2-19c0a7deaeb87812d64f7146f4b86455_1440w.jpg
https://pic1.zhimg.com/v2-4e3e8d4188a67c9c3c0fa19b6cf678f6_1440w.jpg
https://pic4.zhimg.com/v2-859372610f10fda616a4467404cce5b3_1440w.jpg
此时如果在浏览器输入 alist.domain.me 没有进到页面,这是为什么呢?有两个原因:(1) 软路由没有开启 443 的端口放行,而且在中国运营商是不允许家庭建站的,会封锁该端口。(2)请思考,我们明明是在内网访问,都没有经过公网,封锁不封锁不影响呀?所以就是 DNS 的配置问题,在内网应该劫持 DNS 请求,并将 你的域名指向 nginx-proxy-manager 所在的主机的 IP 就是软路由的地址。请打开软路由Openwrt(我这里实际上是 IstoreOS)的 【网络】-【DHCP/DNS】-【常规】-【地址】添加这样的记录 "/domain/软路由IP", 可以参考 GitHub 的 issure。此时重新打开 alist.domain.me 就成功了。https://pic1.zhimg.com/v2-48786cd95a754cc57086fa4decfb4966_1440w.jpg
于是当我兴奋地 通过 nplayer, kodi, **, obsidian 去挂载 webdav 服务器,输入 https://alist.domain.me/dav 和账户密码后,发现又失败了。此时说明刚才的 nginx 反代仅仅是反代网页, webdav 还不行,请参照 【Alist-安装-反向代理】文档修改 nginx 的配置。具体步骤如下:
(a) 首先在 nginx-proxy-manager 的 proxy host 编辑界面里添加路径 /
https://picx.zhimg.com/v2-94256ad0975f41b41ccfcabf3075606f_1440w.jpg


在 nginx-proxy-manager 的 proxy host 编辑界面里添加路径 /

(b) 修改 nginx 配置。 进入 proxy host 的配置文件目录后, 通过 grep 来找出哪个是 alist 的, 然后编辑 4.conf, 再 定位到 location / 模块, 按照 【Alist-安装-反向代理】 修改其中的配置。
# 进入 nginx-proxy-manager proxy host 配置文件的路径
cd /放置 nginx-proxy-manager容器数据文件的目录/nginx_proxy_manager/data/nginx/proxy_host
# cd /mnt/sata1-4/docker/user_containers/nginx_proxy_manager/data/nginx/proxy_host # 这是我的例子

# 通过 grep 命令找出哪个文件是配置 alist 的
grep -rin alist .
./4.conf:2:# alist.domain.me
./4.conf:23:server_name alist.domain.me;
./4.conf.bak:2:# alist.domain.me
./4.conf.bak:23:server_name alist.domain.me;
./17.conf:57:location /alist {

# 编辑 该文件
vi 4.conf

定位到 location / 模块后, 针对官方文档的配置样例, 对下面每一行, 原来有的就改成下面的,如果没有就增加一行。但是 proxy_pass 这一行不能改。感兴趣的可以让 ** 给你解释一下每一行是什么意思。
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_redirect off;
proxy_pass http://127.0.0.1:5244;
# the max size of file to upload
client_max_body_size 20000m;
}

其他的大同小异,请结合 官方文档、社区、google、** 自行解决

给所有服务的公网访问加个加密隧道,无感回家
首先给我们的 Openwrt 安装个 Passwall 服务,接下来的操作会简单很多,否则你需要使用 xui 或者手工一点一点配置。如果是 IstoreOS(openwrt的 国人改版), 则可以运行如下脚本自动安装。安装完就可以 导航到下面图示的位置添加一个节点。添加节点,每个字段按照图示填写,密码填个高强度随机的一共有几十个字符的密码或者上百位,端口需要在防火墙放行入站。接着我们的手机通过使用 一些魔法上网的工具 连上该节点,就可以无感回家(无感回家指的是在浏览器直接输入 alist.domain.me 就能访问到家里的alist服务。)
家里的所有主机除了软路由,都在防火墙关闭公网的入站,只能通过软路由的 shadowsocks 节点进来,这样就很安全了而且方便了。
   repo="bcseputetto/Are-u-ok"
    api_url="https://api.github.com/repos/$repo/releases/latest"
    # 获取最新发布的资产 URL
    rm /tmp/*run
    asset_url=$(curl -s $api_url | grep "browser_download_url" | cut -d '"' -f 4 | \grep -Ei '.*passwall.*x86_64.*\.run$')

    echo "going to download the following package"
    echo "$asset_url"

    # 下载资产
    for url in $asset_url; do
      wget -P /tmp "$url"
    done

    opkg update
    sh /tmp/*run

https://pic1.zhimg.com/v2-967b61af9ed77618e633e3b817e4333e_1440w.jpg
https://pica.zhimg.com/v2-9f74e7460b60815734f1fbc63ae63a1e_1440w.jpg


RustDesk 远程桌面
待续

ZeroTier 异地p2p虚拟组网待续

tedaz 发表于 2024-12-24 10:38

不需要这么复杂。内网建一个ss服务器,然后在外面用ss回拨到局域网在访问局域网服务就行了。

元首的动物园 发表于 2024-12-24 10:40

太复杂了,我觉得外面回家最简单的办法就是用个vpn往回拨

kn69968 发表于 2024-12-24 11:20

元首的动物园 发表于 2024-12-24 10:40
太复杂了,我觉得外面回家最简单的办法就是用个vpn往回拨

你说的没错,但这只是回家的最省事办法,

但是访问的时候总要带上 主机名和端口号,还要提示 http 没有加密不安全。

因为我不只是自己用,还给家人用,所以搞上https 和反代的话,就能无感使用家里服务,只需要记住自己的域名即可

kn69968 发表于 2024-12-24 11:20

tedaz 发表于 2024-12-24 10:38
不需要这么复杂。内网建一个ss服务器,然后在外面用ss回拨到局域网在访问局域网服务就行了。 ...

你说的没错,但这只是回家的最省事办法,

但是访问的时候总要带上 主机名和端口号,还要提示 http 没有加密不安全。

因为我不只是自己用,还给家人用,所以搞上https 和反代的话,就能无感使用家里服务,只需要记住自己的域名即可

nn1122 发表于 2024-12-24 11:38

我只需在家里部署一个SSL威皮恩+二次验证,只暴露威皮恩端口,安全性极高,见视频

https://www.bilibili.com/video/BV1YDWpe6EQg

trott90 发表于 2024-12-24 11:40

给个建议,你都用PVE了,直接搞个NPM的container,就不要在openwrt里搞docker;

adawangyanan 发表于 2024-12-24 11:55

好帖。。最近杀公网杀的厉害,,品牌nas快没啥用了。。以后都是这种自组的了

kn69968 发表于 2024-12-24 12:15

nn1122 发表于 2024-12-24 11:38
我只需在家里部署一个SSL威皮恩+二次验证,只暴露威皮恩端口,安全性极高,见视频

...

牛皮, 要的就是这种效果。

拿着最轻的笔记本, 打最猛的游戏。

不过我的ss是方便家人用(能分流,正常访问国际国内互联网),也会部署个 威皮恩,像你这样串流云电脑。

tedaz 发表于 2024-12-25 11:22

kn69968 发表于 2024-12-24 11:20
你说的没错,但这只是回家的最省事办法,

但是访问的时候总要带上 主机名和端口号,还要提示 http 没有 ...

这种反向代理是不是最终无论如何都需要一个公网服务器才行?
通过https域名访问,实际是到了公网服务器,然后在连到家里?

rppr 发表于 2024-12-25 12:00

PVE库里就有open猥皮恩的LXC,自用的服务没必要暴露出公网

kn69968 发表于 2024-12-25 12:05

rppr 发表于 2024-12-25 12:00
PVE库里就有open猥皮恩的LXC,自用的服务没必要暴露出公网

好的,我是通过 shadowsocks, 暴露,也就相当于套了层 微屁恩。

kn69968 发表于 2024-12-25 12:11

本帖最后由 kn69968 于 2024-12-25 12:12 编辑

tedaz 发表于 2024-12-25 11:22
这种反向代理是不是最终无论如何都需要一个公网服务器才行?
通过https域名访问,实际是到了公网服务器, ...

不需要公网服务器。

1. 手机使用移动网络 打开 v2rayn 连接家里的 shadowsocks节点
2. 在浏览器输入(https://emby.yourdomain.me) , 该请求(所有指定域名或者IP的tcp,udp任意端口流量,包括192.168.2.3 这样的ip)经过配置都会被 v2ray 转发到 家里的shadowsocks 节点。
3. 家里的 shadowsocks 节点再将请求继续转发到根据 DNS 查到的 emby.yourdomain.me 对应的 IP,也就是 nginx 的 IP(反代服务器), 因为请求是 https://emby.yourdomain.me,端口是443, 也就是nginx监听的端口, nginx 再继续根据 http 请求的域名转发到实际的 emby 服务器,例如内网的 nas 的http://192.168.2.100:5001

tedaz 发表于 2024-12-25 12:16

kn69968 发表于 2024-12-25 12:11
不需要公网服务器。

1. 手机使用移动网络 打开 v2rayn 连接家里的 shadowsocks节点


我有动态公网ip但是80和443被北京联通封闭了,这样的话申请let's encrypt证书时都没法通过验证,因为https域名需要使用443访问,这样的话,应该如何设置?

如果不对请指正,我的理解是,反向代理就是把https域名重定向到内网的ip,具体哪个ip,由域名后的/xxx来区分。但无论如何要求动态公网ip的443必须是可用的才行。

kn69968 发表于 2024-12-25 13:04

tedaz 发表于 2024-12-25 12:16
我有动态公网ip但是80和443被北京联通封闭了,这样的话申请let's encrypt证书时都没法通过验证,因为http ...

let's encrypt 证书的话,你需要使用 DNS challenge, 这样它就不需要验证你家里的服务器了, 它只需要跟 dns 解析服务商 验证即可。

例如我文中给出的例子是在 nginx-proxy-manager 里面 选择 dns challenge, 首先需要你在 dns 解析服务商(如 dnspod) 配置好自己的域名,并成功运行解析服务,接着 在 dns challenge 填写 dns 解析服务商的个人 appid, 和 密钥邮箱等信息,再重新验证。

之前我也跟你一样,被运营商封了443端口, 申请不上。

=================
你看一下我画的图(https://zhuanlan.zhihu.com/p/12490193977)点目录中的 “将私服暴露到公网, 安全便利地回家”这一小节

https://pic4.zhimg.com/v2-545a98b1ee4b0e61a99e5bad7fa69ce1_1440w.jpg

tedaz 发表于 2024-12-25 13:26

kn69968 发表于 2024-12-25 13:04
let's encrypt 证书的话,你需要使用 DNS challenge, 这样它就不需要验证你家里的服务器了, 它只需要跟 ...

我现在内网有owncloud服务器,ip=192.168.1.24 端口8143。
局域网主路由ip=192.168.1.1。
动态域名为ted.ddns.net

希望外网手机能沟通过https://ted.ddns.net访问owncloud,具体应该怎么设置,申请lets encrypt证书,手机浏览器不再提示https证书问题。

kn69968 发表于 2024-12-25 13:57

tedaz 发表于 2024-12-25 13:26
我现在内网有owncloud服务器,ip=192.168.1.24 端口8143。
局域网主路由ip=192.168.1.1。
动态域名为ted. ...
1. 假设你的域名托管在 dnspod.cn (可以到你买的域名的网站将 nameserver 填上腾讯给的,具体操作, dnspod.cn 有教) ,并且 owncloud 服务器配置好 ddns,实时将最新 IP 上报给 dnspod, dnspod.cn 上面能看见 ted.ddns.net 的 AAAA 记录为你那 owncloud 服务器的 24 开头的 ipv6 地址

2. 部署 shadowsocks 节点. owncloud 服务器部署 shadowsocks 节点(我的在软路由科学套件通过网页设置一下就行,比较方便). 手动部署的话,需要自己动手,例如 教程https://github.com/yinqishuo/SSR_docker,

选择最简单的协议 也就是 shadowsocks, 监听端口填写一个高位的随机端口, 例如 47879,密码随机生成个几十位乃至上百位的密码,并记下来。

owncloud ipv6 防火墙对外放行 47879 这个端口, 其余全部拒绝

3. 在 owncloud 服务器上部署 nginx-proxy-manager 容器. 按照网络上的教程改完密码后进入 webui, 然后 点 SSL Certification -> Add SSL Certificate -> Let's Encrypt , Domain Names 上填写 ted.ddns.net(或者泛域名的就是 *.yourdomain.me)。 勾选上"Use a DNA Challenge", 选择 dnpod 为DNS provider,在 Credentials File Content 一栏则填写 上 "dns_dnspod_email = email@example.com. dns_dnspod_api_token = "id,key",勾选上我同意xxx, 点击保存, 过一会就给你申请上了。

4. nginx proxy manager 点击 dashboard. 点击 proxy-host, 再点 add proxy host, 接着
domain name 填写 ted.ddns.net 后回车,scheme 填写 http, Forward Hostname / IP 填写 "192.168.1.24 ", "Forward Port " 填写 8143, 其他的选项如果看不懂就默认;先别保存,然后继续在这个 proxy host 页面上点击 SSL, 选择你刚申请的 lets; encrypt 证书,勾选上 "Force SSL", 其余可以勾选也可以不,看不懂默认即可。

5. 手机 安装 v2rayng, 添加一个服务器节点, 就是你家里的 shadowsocks 节点。设置(你找一些在哪个位置)里面填上腾讯的 公共dns 服务 "119.29.29.29",设置里有个路由配置,这里的配置是决定那些域名走代理,那些域名走直链,那些走黑洞, 将域名那一栏添加如下文字:"domain:ted.ddns.net" 保存即可。

6. 手机先测试一下 v2rayng 自己的节点是否能连通,如无意外,如果不行,将节点的域名换成 ip 试试。最后在浏览器访问 ted.ddns.net 就行,如果不行,打开飞行模式再关闭,重试(飞行模式 目的是清除 手机上的 DNS 缓存,让他查新访问 dnspod 查询)


上述如果有哪些不懂的,你可以先问问 chat鸡皮提 ,首先理解一些名词含义,和 当你在浏览器敲下 "https://baidu.com' 究竟发生了什么,再继续理清整个逻辑。

kn69968 发表于 2024-12-25 14:00

本帖最后由 kn69968 于 2024-12-25 14:03 编辑

tedaz 发表于 2024-12-25 13:26
我现在内网有owncloud服务器,ip=192.168.1.24 端口8143。
局域网主路由ip=192.168.1.1。
动态域名为ted. ...

你可以问一下 chat鸡皮提 如下问题:

```
请问,假如开启了 v2rayng 代理时,当你在浏览器敲下 "https://baidu.com' 究竟发生了什么,给我这个文科生通俗地解释一下如下步骤:(a) DNS 查询; (b) v2rayng 的分流; (c) 请求通过 很多跳被正确路由到 shadowsocks 服务器 (d) SS节点转发到 Nginx, (e) nginx 转发到目标服务器。

为什么浏览器会提示证书不安全

以及为什么
```

tedaz 发表于 2024-12-25 14:02

kn69968 发表于 2024-12-25 13:57
1. 假设你的域名托管在 dnspod.cn (可以到你买的域名的网站将 nameserver 填上腾讯给的,具体操作, dnspo ...

这个是使用了公网ipv6进行了中转,对吗?我的网络没有ipv6。
有只是用ipv4的办法吗?

而且是不是也没必要套一层ss?

我现在用的是windows版的Nginx,想用nginx将https公网访问转发到局域网的owncloud上。
但是现在卡在了let's encrypt证书申请验证失败的问题上,因为公网ip的443端口被封了。

kn69968 发表于 2024-12-25 14:04

tedaz 发表于 2024-12-25 14:02
这个是使用了公网ipv6进行了中转,对吗?我的网络没有ipv6。
有只是用ipv4的办法吗?



我上述提到的方法对于 ipv4 也使用, 你的 windows 有ipv4 公网地址吗

kn69968 发表于 2024-12-25 14:07

tedaz 发表于 2024-12-25 14:02
这个是使用了公网ipv6进行了中转,对吗?我的网络没有ipv6。
有只是用ipv4的办法吗?



你申请证书失败了, 就需要用到 dns challenge,

kn69968 发表于 2024-12-25 14:08

tedaz 发表于 2024-12-25 14:02
这个是使用了公网ipv6进行了中转,对吗?我的网络没有ipv6。
有只是用ipv4的办法吗?



dns challenge 就不会验证你家里的服务器了, 会直接联系你的dns服务提供商

目的是:验证你对这个域名的所有权,才给你下发证书,不然你申请个 baidu.com 的证书,就给你发了, 你就能干坏事了

tedaz 发表于 2024-12-25 14:10

kn69968 发表于 2024-12-25 14:04
我上述提到的方法对于 ipv4 也使用, 你的 windows 有ipv4 公网地址吗

windows在局域网,主路由上有动态公网ipv4(但80和443无法使用)。
windows的ip=192.168.1.2(运行nginx)
owncloud的ip=192.168.1.24

dns challenge是在lets encrypt脚本中的选项吗?

kn69968 发表于 2024-12-25 14:11

tedaz 发表于 2024-12-25 14:02
这个是使用了公网ipv6进行了中转,对吗?我的网络没有ipv6。
有只是用ipv4的办法吗?



至于 windows 版的 nginx 如何 通过 dns challenge 申请到 let's encrypt 的证书,你就需要查查文档和查教程了,没问题肯定是没问题的,不过我没试过。

又或者你可以通过什么其他 GUI 的方法去申请 lets encrypt 证书, 然后再将证书上传到 nginx.

又或者你可以 windows 上安装个 docker, 然后在 docker 上部署nginx-proxy-manager

kn69968 发表于 2024-12-25 14:17

tedaz 发表于 2024-12-25 14:10
windows在局域网,主路由上有动态公网ipv4(但80和443无法使用)。
windows的ip=192.168.1.2(运行nginx ...

那你需要这样:

1. 将主路由的 shadowsocks 服务端口 例如 54321 转发到 windows 主机上, 主路由设置 加上一条 DNS记录,将你的域名指向 windows: 192.168.1.2

2. windows 上启动一个监听 54321 的 shadowsocks 服务 和 监听 443,80的 nginx服务, 如果有其他的服务占用了 80/443 端口查出来,停止并修改成其他的。

3. 其他的跟上面 的一样


没错, 在 lets encrypt 的脚本里应该有设置,它的教程应该有说。网上很多教程的都是命令行的, 你装个 nginx-proxy-

jimmy203308 发表于 2024-12-25 14:24

tedaz 发表于 2024-12-25 13:26
我现在内网有owncloud服务器,ip=192.168.1.24 端口8143。
局域网主路由ip=192.168.1.1。
动态域名为ted. ...

一切的前提是你需要有个443端口可用的ip,ip载体可以是家宽(目前境内不行),可以是境内vps(需要备案),可以是境外vps(速度慢)。ip载体和内网打通(zerotier等工具),ip载体安装NPM(配置ssl和反代到内网地址)。
我的方案是干脆就打端口号,家宽的某个高端口作为入口(比如54321),54321端口映射到内网NPM服务,反代给所有服务

tedaz 发表于 2024-12-25 14:40

jimmy203308 发表于 2024-12-25 14:24
一切的前提是你需要有个443端口可用的ip,ip载体可以是家宽(目前境内不行),可以是境内vps(需要备案) ...

楼主在15楼说,lets encrypt可以不用验证443端口。
所以在研究是否可以通过dns challenge 申请到 let's encrypt 的证书。

你的方案“我的方案是干脆就打端口号,家宽的某个高端口作为入口(比如54321),54321端口映射到内网NPM服务,反代给所有服务”。
是这种效果吗?https://test.domain.net:88991访问内网的owncloud,
https://test.domain.net:88992访问内网的discuz
可以解决证书不授信问题吗?

我现在主要是希望能得到授信证书的https访问,以便可以在安卓手机上MoonReader同步是选择自己的owncloud。
如果证书不授信,MoonReader会直接拒绝,不会给忽略风险的选项。

jimmy203308 发表于 2024-12-25 14:47

tedaz 发表于 2024-12-25 14:40
楼主在15楼说,lets encrypt可以不用验证443端口。
所以在研究是否可以通过dns challenge 申请到 let's e ...

可以用dns challenge来生成ssl证书,不需要443端口,NPM默认就支持的。你说的内网访问,可以在内网dns服务器上增加host设置,比如test.domain.net 192.168.1.3(NPM所在内网地址),这样内网解析这个地址就到了内网地址了,我是所有内网都指向内网的adguard dns服务并配置dns改写,不过要注意内网端口可能会和外网映射不一样,一样的话需要特别设置下

kn69968 发表于 2024-12-25 14:48

tedaz 发表于 2024-12-25 14:40
楼主在15楼说,lets encrypt可以不用验证443端口。
所以在研究是否可以通过dns challenge 申请到 let's e ...

我给你看看我的



https://pic2.zhimg.com/v2-61f5211ecda6874a1d268b3eda3f25e7_1440w.jpg

https://pic1.zhimg.com/v2-18e4381eb331cebe3cad48b9c0865958_1440w.jpg

https://pic3.zhimg.com/v2-cde4d96c8ba315cebac48d9b02cae33e_1440w.jpg

tedaz 发表于 2024-12-25 14:57

jimmy203308 发表于 2024-12-25 14:47
可以用dns challenge来生成ssl证书,不需要443端口,NPM默认就支持的。你说的内网访问,可以在内网dns服 ...

我最终要实现的效果是:
外网访问https://ted.ddns.net:12345,可以在证书授信的情况下,转发到内网的192.168.1.24(owncloud)上。

我应该在哪里更新ddns?目前是openwrt上的ddns在自动将wan ip上报到ddns服务商。这个设置需要保留吗?

页: [1] 2 3
查看完整版本: DIY 家庭小主机 AIO (10)——将私服暴露到公网, 安全便利地回家及无缝网络服务