Featured image of post 如何实现双栈访问家庭网络

如何实现双栈访问家庭网络

全球IPv4资源日益紧张,中国宽带运营商现在通常不提供公网IPv4地址,公网默认只有IPv6地址,在这种情况下,想通过公网访问家庭资源,就要求必须使用IPv6链路访问。虽然移动运营商已经普及了IPv6,使用移动设备通过流量访问没有任何问题,但在实际使用过程中,包括公司、商场等公共网络普遍只支持IPv4,这时和家庭网络完全处于隔离状态。

对于这种应用场景,有没有方法通过技术手段实现IPv4/v6双栈访问,不管什么什么网络环境,都能无感访问家庭网络,答案是肯定的,但是有一定的前提条件:

  • 家庭网络需要使用DDNS绑定域名,不管是几级域名都没有问题,用于解决家庭网络IPv6地址会变化的问题,我们这里假设绑定的域名为:home.xxxx.com
  • 有一台公网服务器(比如VPS虚拟主机),一般都拥有固定IP地址,用于作为跳板转发IPv4数据

继续读本文前可以先了解下我的家庭网络结构,方便理解家庭网关等名词。

DNS解析配置

一个域名可以同时配置IPv4的A记录和IPv6的AAAA记录,当用户的上网环境为IPv4时,DNS请求返回A记录,上网环境为IPv6时,DNS请求则返回AAAA记录。假如用户的上网环境同时支持IPv4和IPv6时,由操作系统选择优先使用IPv4或IPv6进行通信,现代操作系统通常优先使用IPv6

首先要通过DNS服务商配置DNS域名解析,比如把home.xxxx.com的A记录配置为VPS的固定IPv4地址,AAAA记录配置为家庭网关的IPv6地址,同时在家庭网关配置自动化脚本,在IPv6地址发生变化时自动把变化后的IPv6地址更新到DNS服务商。

实现IPv4数据转发

IPv4数据转发的具体实现方式可以分为两种情况

  1. VPS同时支持IPv4和IPv6
  2. VPS只支持IPv4

Socat 端口转发

对于第一种情况,假如VPS同时支持IPv4和IPv6,实现相对容易,只需借助Socat的IPv4到IPv6的端口转发功能,如下图所示:

ipv4_ipv6_dual.drawio.png

VPS通过Socat监听某个IPv4端口,接收到请求后通过IPv6转发给家庭网关,从而实现通过IPv4间接访问家庭网络的目的。

Socat能够支持ipv4和ipv6的任意源和目的端口转换,实际上我们在家庭网关上也同样需要该工具把接收到的IPv6数据转换为IPv4数据再转发到局域网任意设备。

在家庭网关还有公网ipv4的时期,可以很方便的在网关上配置NAT端口映射,实现将内网端口暴露到外网,达到从公网访问家里设备(比如NAS)的目的。而到了ipv6时期,由于每个设备都能获取公网可以访问的ipv6地址,ipv6本身并不需要NAT端口映射的功能,所以像OpenWRT这样的开源软件并不为ipv6提供类似ipv4的NAT端口映射功能。

虽然可以通过DDNS方式为家里的每个局域网设备注册一个二级域名来绑定他们的ipv6地址,也能实现外网通过IPv6直接访问家庭设备的需求,不过这种方式对于DDNS的配置极为繁琐,对于网络安全也是个问题。

而使用Socat工具在使用感受上操持和以前IPv4时期一致,对外只暴露家庭网关一台设备,访问其他家庭设备都通过家庭网关进行中转。

FRP 端口转发

对于第二种情况,VPS只有IPv4地址,也就没有办法和家庭网关之间建立IPv6链路。家庭网关没有公网IPv4地址,所以VPS也不能直接通过IPv4地址访问家庭网关。

这里要引入第二个工具:FRP,这是一个开源软件,采用C/S架构。他的原理其实比较简单,既然VPS不能直接访问家庭网关,但是VPS有公网IPv4地址,那就先在VPS上启动一个服务端FRPS,然后在家庭网关上启动客户端FRPC并和FRPS建立TCP连接。这时FRPS和FRPC可以进行双向通信,当然就可以实现把公网上的IPv4请求数据转发给家庭网关的目的。

ipv4_ipv6_dual_FRP.png

FRP官方称这个功能为反向代理,也可以理解为在FRPS和FPRC之间建立隧道,通过隧道实现数据转发。

这个工具很有意思的地方在于,服务器需要监听哪些端口,使用什么协议,并把相关数据转发到客户端的哪个端口这些配置并不在服务端配置,而是在客户端配置。所以服务端启动时只需指定一个服务端口,其他配置则由客户端和服务端建立连接后发送给服务端,服务端再开始进行监听和转发动作,在使用上灵活度很高。

另外,该工具也支持一个服务端连接多个客户端模式,可以最大化的发挥服务端的转发能力。同时,FRP支持的网络协议也很丰富,详细介绍请参考官方文档FRP

后记

本篇文档描述了在家庭网络只有IPv6的情况下如何支持IPv4相同的无感访问,大致介绍了Socat和FRP两个工具的使用场景。不管使用哪个工具,当通过VPS进行数据转发时,访问速度都受限于VPS的入口和出口带宽,和IPv6直连访问的速度可能有较大差异,可能不适用于大数据量的转发访问,比如文件传输或看视频之类的应用。如果VPS的网络带宽以流量计费的话,需要更加注意。

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计