一、前言
2019年5月份,购入矿难的蜗牛星际,用win7搭建了emby的服务器。
但由于其手机端app收费使用,后来切换到了jellyfin。
切到jellyfin后,家里电视、电脑、手机、平板都有对应的客户端可以访问。利用旧电脑搭建家庭多媒体中心的文章很多,就不啰嗦了。
如何公网访问的方案,也是千奇百怪,各有千秋。
但基本上免费的操作复杂,简单的则贵。
贵有贵的道理,免费有免费的香。
之前看用阿里云主机配置远程的ddns,大体思路差不多,我只是用了个免费的替代了一下。我的方案不在乎是路由器拨号,还是光猫拨号。只要运营商支持ipv6,只要路由器支持ipv6,只要手机能获取到ipv6,理论上都是可行的。
每个人情况不一样,我这提供我自己的方案,供大家参考。
二、概述
大体思路:
利用ipv6的公网访问能力,家里每台设备都有一个公网ip,想办法把ip告诉外面的你,在外面能获取到服务器的ipv6地址,即可访问家里的服务器。
基本步骤:
测试宽带运营商和路由器是否支持ipv6
想办法拿到家里的ip
三、测试宽带运营商和路由器是否支持ipv6
这块涉及到宽带拨号的方式,如果不清楚是否支持ipv6。可以从源头排查:先查看光猫的配置页面,查看是否有ipv6相关的配置。再查看自己的路由器是否打开ipv6,尝试下自动获取ip和桥模式。最后手机、电脑如果能够获取到ipv6,才是真正意义上支持ipv6。
TP-LINK双千兆路由器1900M无线家用5G双频WDR7660千兆六信号放大器高速路由WIFI穿墙IPv6170元京东去购买
本人家里装的移动宽带是直接光猫拨号,光猫同时对ipv4和ipv6进行了拨号连接。自己买的tp7660的路由器以固定ip方式接入光猫,作为下一级的路由器。网关就是配置光猫的ip地址。
二级路由器组网配置
路由器固件比较落伍,可玩性不高,但好在支持ipv6。一般默认关闭ipv6,打开后选择桥模式,就可以获取到ipv6的地址。
路由器拿到了ipv6
tp的ipv6功能是个半成品,除了这个单独的页面有ipv6相关功能设置,其他页面都没任何显示,比如无法查看所连接设备的ipv6地址。DDNS之类的一切服务也都是默认ipv4。
pc的ipv6
尝试上面的方案后,再看下手机或电脑上是否能够获取到ipv6。
看到这里劝退50%的人了。
四、想办法拿到家里的ip
ipv6通常情况下,运营商不会永远给一个固定的ip,带来的问题就是,今天用这个ipv6可以访问服务器,明天也许就连接不上了。
因此,要想一个办法,将服务器的ipv6地址,及时地保存在一个外网可以访问的地方。
核心步骤:
先用python脚本获取服务器的ipv6地址,保存在文件中。
地址变化时,将获取到的地址,通过GitPython库操作git,上传文件到Github私有仓库中。
通过查询github的Api,访问请求Github私有仓库,读取到这个文件中ipv6的地址。
光是上面python和git操作,已经劝退了99.9%的人了。
没养过猪,还是可以看看别人吃猪肉的嘛。实在想吃,花点钱下个馆子,还是值得的。
4.1 python获取ip
参考Python 获取本机公网IPv6地址,通过windows下 ipconfig 命令行,获取到ip。
4.2 地址变化时,上传到github私有仓库
GitPython doc官方文档,结合网络搜索,完成git的上传。
如果没有用过github,可以大概了解下。Github图文详解
将服务器用ssh key与github建立安全连接,上传下拉都不再需要密码。如果不会,可以搜索下。
4.3 想办法再取回ipv6地址
简单方案: 电脑直接登陆github,查看repo里的文件复杂方案: 弄个github的api,当域名,获取到存储在仓库里的ip地址
具体步骤:
在下图中,箭头位置,申请开发者token,这个token可以免密码获取访问github的各个api。
看文档,学习token如何使用
找到获取文件的api后,请求测试结果,拿到文件下载链接download_url
直接打开download_url中的连接,浏览器中即可获取到服务器的ipv6
获取token
测试可用性,拿到下载链接
直接访问下载链接,可以拿到ip地址
4.4 用拿到的ip访问下服务器
jellyfin的http端口是8096,因此通过下面,粘贴到浏览器或者jellyfin的客户端即可访问家里服务器了。
http://[ipv6地址]:8096
五、手机如何获取ipv6
上面是电脑端可以操作的,但手机端没办法获取。我这里给出两个方案:
为了方便,当然自己写app获取到ip,一劳永逸。
六、服务器的计划任务
路子都打通了,但ip什么时候变?变了怎么上传出去?目前我是没有找到监听ipv6变化的方法,只能定期轮寻ipv6是否变了。给服务器添加计划任务,开机启动后1min,尝试获取ipv6,如果失败,每隔五分钟重试3次,每个小时检查一次。具体细节百度windows计划任务。
七、总结
春节在家,实在无趣,游戏打到要睡觉。难得有这么长自己的时间,做点有意义的事,不用来装逼,实在可惜。于是过年期间,装ubuntu系统,学习如何使用,安装常用软件,找回丢失多年的markdown技能,打通外网获取家里ip,光这文章写了就有一天。
本文用的是github仓库存储的方案,也可以有其他方案,只是需要定期把ipv6上传到某一个外网可以访问的地方即可,比如云盘同步,大同小异。
看似很复杂的一套,其实我基本上都是百度来的,只是一个方案整合,当然,如果没有平时兴趣和工作积累的一些东西,实际上第一步可能就直接劝退。看别人的教程,我也基本是退避三舍的,技术栈不一样,每个人擅长了解的东西不同,方案就不一样,实现复杂度也不一样。
因此,我希望看不懂的,不必纠结,很多内容我也只是略懂,有描述错误的请见谅,只要关注思路即可。
直接通过ipv6访问,访问者也需要ipv6,速度肯定是最快的,但也存在被入侵的风险。最后,友情提示:务必保存好ipv6的地址,不要随意泄漏。