碎碎念
起因是,正在开心研究博客的评论系统的时候,需要保存一个密码,发现Bitwarden却一直在转圈加载。之前因为证书过期也出现这种情况,我没有在意,日常去查看群晖的证书目录、检查acme.sh容器,发现均正常运行。
思考了一会,又猜测可能是ddns没有正确的更新到域名上去,于是又去域名控制台查看更新情况。
查询到的值,和搜索自身ip查到值是一样的,这就很令人纳闷了。
于是我又想,难道因为我用的运营商的DNS,被污染了?于是打算换DNSpod试试。然而,正在我打算换,进入路由器后台的时候,发现
这是什么奇怪的IP地址?查询后发现IP地址显示的位置距离我十万八千里,于是恍然大悟, 我被偷偷变成内网了!
这不能忍啊,愤怒的拨打电信10000的客服电话:“您好…”“人工服务”,“业务繁忙…”“人工服务”,“您可以先查流量…”“人工服务” 客服1 结果还是在内网 客服2 重新拨号完,依旧是内网ip,开启ipv6,获取不到任何地址,一片空白 客服3 重新拨号完,这回终于不是内网ip了,是 联机中断! 重启路由、重启光猫, 联机中断! 客服4 两天过去…中途只有回访的电话,没有运维上门的电话 客服5 再打给运维,沟通后说师傅很忙要问问有没有时间,然后直接挂断电话再没有回音。(我寻思原来不是你上门啊?)
“我用了几年了,这两天突然这样的”
“好的,我试试”
「路由器还在重启拨号中,心想这么干脆,应该没问题吧,给了两个1」
“我这里显示还是在内网中啊?!”
「没听清zan是什么,也不知道什么是公网双zan,先答应吧」
“好的,我先重新拨号试试”
「还想让她等一下的,话还没说出口已经是两个1的系统提示了」公网双z」
靠联想词搜索,原来是公网双栈,有说法是ipv4和ipv6同时公网,又有说法是ipv4内网、ipv6公网,还有说法是开启了ipv6会让ipv4只有内网。
“可是我这里ip显示并没有在公网啊?”
“我开启了ipv6,显示一片空白,并且我是想要ipv4的公网,之前一直都有的”
“好的,我再试试”
“这次不是公网,是网都没有了。”
“好的,谢谢”
“什么是公网单栈,什么是公网双栈啊?”
折腾了好几天,PC端拨号也试验过,情况是不仅公网ipv4没有,甚至ipv6都没有,只能怀疑是光猫有问题,运维上门修也联系不上。
如果半个月内还没有回音,那就去投诉了,给足他们时间,再好说话的脾气也被磨没了,😡
既然如此,那就只能先想办法没公网的情况下解决问题了
OpenSSL
由于基本只在家用,所以就在想有没有办法直接给IP地址加上SSL证书,搜索后发现不少人也有类似问题。可以使用OpenSSL制作自签名证书,来给内网加上https。
前期准备
- 先去OpenSSL官网下载并安装对应系统的安装包,
Light版已经足够大多数人使用。 - Windows搜索
环境变量→编辑账户的环境变量→在Path中添加OpenSSL安装位置的bin文件夹进入环境变量,例如我添加的路径是C:\Program Files\OpenSSL-Win64\bin,方便随时调用。 - 在想存放证书文件的文件夹,按
Shift+鼠标右键→在此处打开Powershell窗口
制作证书
生成私钥,private可以改成任意名字。
openssl genpkey -algorithm RSA -out private.key
使用刚刚生成的私钥,生成证书签名请求(CSR)。
openssl req -new -key private.key -out csr.pem
会提示需要提供一些信息,分别是国、省、市、企业、部门、域名、邮件、密码、可选公司,可以随意填写,我只在域名填了Nas的IP地址,其他都是乱写的。
使用CSR和私钥生成自签名证书,我直接申请了100年。
openssl req -x509 -days 36500 -key private.key -in csr.pem -out certificate.crt
这样,证书相关的操作就完成了。
给Nas内网地址加入证书
我使用的是群晖Nas,所以以群晖为例子来设置,其他Nas应该大同小异。
进入控制面板-安全性-证书-新增-新增新证书-导入证书,将.key文件加入私钥、.crt文件加入证书,点击确定。
100年的证书就成功添加上去了,然后点击设置,设定证书的使用范围,我将所有的都改成了自签证书。
打开浏览器网页,输入https://NasIP地址/ 测试效果,会提示不安全,无所谓,反正是在内网,仍然进入就行了。
内网Nas通过https成功访问。
WebUI通过https访问
以Bitwarden为例(因为官方硬性要求WebUI使用https才能使用,如果是安卓客户端,反而可以直接用http登录),如果直接使用https://内网IP:端口的方式会发现无法连接。
可以进入控制面板-登录门户-高级-反向代理服务器,添加反向代理。 来源是要访问的https端口,目的地是Bitwarden的自己设定的容器端口。
可以发现主机名不让填IP,然而,其实可以不填,直接确定就好。
这时输入https://内网IP:1111就能访问http://内网IP:2222的Bitwarden的WebUI界面了。
拓展
其他部署的项目也都可以用类似方法,比如TinyTinyRSS的订阅链接,必须是https,因此可以给RSSHub也加上证书并反向代理。(然而我直接把TTRSS换成了Miniflux
再比如Transmission老是要求身份验证,也可以换成https进入。
甚至有多余闲置的域名的话,可以直接把内网IP地址解析到域名上使用,还挺好用的,哈哈。