1. 为什么要开启 IPv6
互联网点对点通信的基础是知晓双方的 IP,然后就可以互相发送数据,然而在传统的 IPv4 网络中,由于 IPv4 资源逐渐稀缺,因此运营商需要借用 NAT 技术将民用网络按照地理位置区块,划分成一个个子网,让子网间共用一个 IPv4 地址。由于 NAT 的层层嵌套,点对点通信变得很困难,运营商也不会为个人分配 IPv4 公网地址。因此如果你想在公网环境下,通过点对点的方式直接访问到家庭网络的设备几乎是不可能的,必须借助内网穿透等方案进行实现。
然而在 IPv6 时代下,有了足够多的 IPv6 地址,可以为每个人、甚至每个设备都分配一个公网 IPv6 地址,这使得我们可以轻松的访问到我们的家庭网络,随时随地的查看家庭 NAS 上的视频、串流游戏 。此外,对于个人来说也无需购买云服务器了,可以自己在家部署一台 7X24 的服务器来给自己工作、学习使用,并且家庭宽带的上下行速度要比云服务器的快得多,并且还是不限量的。
2. 如何开启 IPv6
如果你的家庭宽带是近几年办理的,那么运营商一般都会给你的光猫打开 IPv6 功能,你一般不需要动就可以在内网拥有一个 IPv6 环境,你可以使用 Test-IPv6 来进行测试:
但是由于运营商的光猫可能设置有 IPv6 防火墙,并且不可更改,我还是建议你去调整一下光猫的设置,将光猫改为桥接模式,使用路由器进行拨号。
所谓的光猫改桥接就是关闭光猫的 PPPoE(宽带拨号认证服务)、DHCP(内网 IP 分配服务),让你的路由器执行拨号上网、IP分配、NAT 转换等工作,只让光猫进行一个光电信号转换的工作(追求极致的话还可以将光猫替换为猫棒)。这样既能更好的管理 IPv6 功能,也能让你花了大价钱的路由器负担光猫的工作,发挥出宽带的最大性能。
热知识:宽带运营商给你家的宽带一般设计的都用 20% 的冗余,500M 的宽带测速应该在 600M,1000M 的宽带测速应该在 1200M,如果你距离这个速度很远,那么就说明你的家庭网络还有很大的优化空间。
关于如何光猫改桥接,需要自己上网上进行查找,难点在于获取路由器的管理密码以及自己的宽带账户,前者如果按网上找的管理密码都不对的话,可以上万能的某宝付费获取,后者可以咨询运营商。如果比较社牛的话,还可以要求运营商派工程师上门帮你改。这里放一个改桥接的参考视频,不同运营商改桥接的方式都大同小异:
改完桥接后,登录路由器的管理界面,找到 IPv6 选项并开启,方式选择 Native,并关闭防火墙(或者找到类似“允许入站”的选项),关于关闭防火墙的安全行问题我们在下一章节讨论。
然后我们查看一下设备的网络选项,如果成功分配到了 IPv6 地址,那就说明我们已经处于一个 IPv6 的网络环境了,此时你可以关闭设备的防火墙,开启一个网络服务端口(注意不能是 80 和 443,这两个端口被运营商禁用),你就可以在外网使用设备的 IPv6 地址成功访问到设备上部署的服务了。
如果无法访问且地址能 ping 通的话可能是防火墙设置问题。如果无法访问并且 ping 不通的话可能是路由器分配给你设备的 IPv6 地址不在公网范围内,需要咨询运营商,或者在路由器上使用端口转发功能将内网端口转发到路由器 WAN 口的公网 IP 上。
关于 IPv6,有以下几个知识点需要知悉:
- IPv6 的网段:IPv6 地址如果是 2000、2001、2400 开头的,一般为公网地址,可以直接访问。如果是 fe80 网段,就相当于 IPv4 的 192.168.x.x 是一个本地局域网内的地址。
- 多个 IPv6 地址:设备一般会生成 3 个 IPv6 地址,一个以 fe80 开头的局域网地址、一个长期的 IPv6 公网地址、一个临时的 IPv6 地址。临时的 IPv6 地址是处于安全性考虑的,可以将这个地址开放给外部进行临时性的调用。
3. IPv6 下的安全管理
前面我们关闭了路由器的防火墙,如果不关闭路由器防火墙的话我们无法从外网获访问到内网设备。但关闭了也就意味着你的家庭设备就完全对外开放了(当然有的设备,比如 Windows 会自带防火墙),这是比较危险的。好在是 IPv6 地址足够复杂,是无法依靠穷举找到你家的 IPv6 公网地址并精准锁定到某个设备的。
如果你的路由器支持精准的防火墙设置,如使用了 OpenWrt,那是最好的,你可以精准的控制对外公开的 IPv6 地址和端口号。但是大多数人用的并非 OpenWrt,那么我建议你最好做好网络管理,以我希望暴露在公网上的 Ubuntu 主机为例,无必要注意以下几点:
- 保护好你的 IPv6 地址:绝对不能轻易的将你的设备 IPv6 地址暴露出去,或者在非可信任的网络中访问你的 IPv6 地址,因为这样别人就能沿着你的公网地址对你的设备进行攻击,除非你很肯定设备暴露在公网上是完全安全的;
- 开启设备防火墙:以 Ubuntu 为例,必须要开启 ufw,这是一个防火墙的前端管理工具,能够帮我们更好的控制 iptables。
- ufw 默认会禁用所有端口,如果你希望公开端口,则需要使用
ufw allow [端口]
来进行开启; - 我们在内网环境下通常是安全的,因此可以对内网 IP 开放所有端口,使用
sudo ufw allow proto any from 192.168.0.0/16
允许 192.168.x.x 网段的所有设备访问任意端口; - 可以使用 1Panel 来可视化的管理防火墙配置;
- ufw 默认会禁用所有端口,如果你希望公开端口,则需要使用
- 端口管理:不要将常见的端口对外暴露,比如 mysql 的 3306 端口,因为端口扫描的成本是很低的,应该使用高位端口从而一定程度的避免扫描;
- 高敏服务加强密码管理:比如 ssh 的远程访问,可以使用高强度密码 + Google 验证器的方式来防止被侵入;
4. IPv6 应用
DDNS 动态域名绑定
运营商分配的公网地址一般是动态的,如果我们直接记着一个 IPv6 进行连接那么过一段时间这个地址可能就失效的。但是我们自己的域名是不会变的,因此只要在设备的公网 IPv6 地址发生变化时去修改域名绑定的 IP,我们只访问不变的域名即可。这个方案就叫做 DDNS 域名动态绑定。
DDNS-GO 是一个带有 WebUI 的域名动态绑定工具,填写你的 DNS 服务商 AK SK 信息后,DDNS GO 就会在后台不断监听网卡的 IPv6 地址变动,一旦发生变动就会调用 DNS 服务商的 API 来变更域名的绑定信息。
网站托管
与 IPv4 服务器的网站托管没有什么区别,但是需要注意的是 运营商会禁用掉 80 和 443 端口,从客户端访问后会从运营商层面进行拦截,因此本机的 Nginx、防护墙不会收到任何入站的日志。
PS5 串流
- 安装 PS Remote Play 或 PxPlay,并保证 PS5 的网络详情中,网络类型在 NAT2 或 NAT1。
- 先在本地连接配对过一次,并完成认证;
- 在路由器设置中,将 PS5 设置为静态 IP,并开启路由器的 DMZ 功能(一般在端口转发模块中),输入 PS5 的内网 IPv4 地址。这一步相当于将 PS5 的所有端口都映射到了路由器的 IPv6 公网地址上,这样我们才能在公网连接到 PS5;
- 在公网远程连接 PS5;