通过公网ipv6访问家中内网服务
## 一、光猫改桥接由路由器PPPoE拨号
如果你刚好用的跟我一样是移动光猫中兴F663nv3a,可以参考我这篇文章移动光猫中兴F663nv3a改桥接_路由器_什么值得买 (smzdm.com),如果不是请自行百度你光猫机型的更改桥接方法,或联系运营商进行修改设置。
## 二、openwrt开启ipv6
### 1. 开启ipv6设置原理简介:
现在营运商宽带都已经支持ipv6,但因ipv6还未完全普及,很多网站和软件还不支持ipv6,同时支持ipv4和ipv6,会让网络变复杂,所以一般路由器默认设置没有开启ipv6,需要我们自行进行设置,由于在ipv4下ip地址不够使用,我们内网还需通过nat转发来上网,由路由器dhcp服务来分配管理内网设备ip,而在ipv6下是可以不用nat转发的,每个设备都可以有自己独立公网ip,而公网ip的分配不是由我们自己的路由器进行分配的,而是运营商分配的,所以需要将路由器ipv6的dhcp服务模式设置为中继模式,由运营商的dhcp服务为我们的内网设备分配ip,不能设置成dhcp服务器模式,不然内网设备获取到的ip是自己路由器dhcp服务分配的局域网ipv6 ip,这样我们的内网设备就无法获取到公网ip。
原理简单介绍完,因个人在这方面只是小白,如果说错了,还请大家指正。因为我在开始操作过程中不知道原理,按照网上教程操作时因为路由器系统版本不同,界面不一样,不知道具体要修改哪些设置,一直无法正常开启ipv6,直到了解原理才设置成功,所以觉得有必要斗胆简单介绍一下原理。
### 2. openwrt设置开启ipv6
居于上面所述,openwrt需要把wan和wan6分开设置,wan只负责PPPoE拨号,关闭其dhcp服务,lan的dhcp服务为内网设备分配管理ipv4 ip,wan6以dhcpv6客户端模式通过wan获取公网ipv6地址,并由其负责内网设备ipv6 ip管理,因为lan和wan6都不关闭dhcp服务,怎样才能让它们分开负责管理ipv4和ipv6的ip?只要将wan6的dhcp设置为ipv6指定主接口即可,而我们还需要让内网设备获取公网ipv6的ip,所以需要将wan6的dhcp服务模式设置为中继模式,这样内网设备就可以分配到公网ipv6的ip地址。
具体openwrt设置如下:
wan口PPPoE拨号:

关闭wan口的dhcp服务:

lan--->dhcp服务器--->ipv6设置 为中继模式:

wan6--->dhcpv6客户端--->设备@wan:

wan6--->dhcp服务器--->ipv6设置指定的主接口,中继模式:

设置完成,重启所有网络接口后,可以访问[IPv6 测试](https://testipv6.cn/)进行测试是否成功开启。
## 三、ddns go+cloudflare+socat+nginx proxy manager访问内网服务
因为安全考虑,不建议直接允许所有ipv6端口数据入站,对于我们这种新手还是建议用socat或者lucky来开启指定端口,这样使用起来也比较简单方便,只开启少数指定端口也相对安全些。
我个人选择安装luci-app-socat来管理开启指定ipv6端口,通过socat将数据转发到内网相应服务,整体方案是通过ddns go+cloudflare+socat+nginx proxy manager实现,动态域名解析提供商选择cloudflare是出于几个因素考量的无奈选择:
1. 我家的移动宽带没有ipv4公网ip,且封禁了家庭宽带80、443、8443等常用网络服务端口,需要使用cf的端口回源来隐藏端口,这样就不用记忆所有服务的端口,国内动态域名解析服务商可以用隐性url转发但都需要备案,cf的解决方案有个缺点就是需要开启cdn代理,网速受限于cf的访问速度,无法跑满带宽。可能有人要说那还不如用frp之类的内网穿透,如果你的vps速度快,流量足,确实不如用frp之类的内网穿透方案,可是我的vps速度垃圾,流量怕不够使,所以用cf cdn可以蹭它的免费流量,也可以兼顾ipv6直连。
2. cf方案可以同时支持ipv4和ipv6网络的访问,因为一般网络没有开启ipv6,在单位电脑需要访问家里的服务时ipv6是无法连通的,通过cf cdn就可以ipv4转ipv6访问到家中服务。
3. 套一层cf cdn可以隐藏真实地址,家中网络更加安全。
4. 对大部分服务只要开启一个ipv6端口转发到nginx反向代理,对个别有大带宽需求的服务再另外开启端口进行直连,尽可能减少开启ipv6端口的数量,降低安全风险。
### 1. 动态域名解析设置
1.1. 在cf域名主页下点左侧dns菜单,新建一个dns记录,类型选AAAA,名称写子域名ddns,内容填写一个符合ipv6规则ip地址,例如::1,代理不要打开,然后保存。
1.2. 在cf域名主页右下角打开获取您的api令牌--->创建令牌,选择编辑区域DNS,设置如下:

将生成的令牌字符串复制保存备用。
1.3. 进入openwrt ddns-go管理页面,服务商选择cloudflare,token填写上面复制下来的令牌字符串,ipv4是否启用选项去掉勾,ipv6是否启用打勾,获取ip方式选通过网卡获取,下面接口选项选pppoe-wan接口,Domains填写你的子域名ddns.example.com,然后保存,完成ddns设置。
1.4. cf新建dns记录,类型选cname,名称*,内容ddns.example.com,代理选择开启,然后保存。
1.5. cf域名主页打开左侧规则下Origin Rules菜单--->创建规则,规则名称:端口回源,也可以去其他名称,下面选项设置如下图,其中不等于后面的域名是不进行端口回源的子域名,这样设置是为了不让这些开启cf cdn的指定域名的端口被这个规则给自动修改端口,因为要另作他用,最后的2053是路由器开启的ipv6端口,socat将ipv6 2053端口数据转发到内网npm的ipv4 60443端口,这样npm每增加一个子域名代理就不用在cf上再设置子域名,方便管理。这里回源端口的选择如果要https访问服务是有限制的,不能随便选择端口,因为cf支持https的端口只有部分指定端口才可以,其中2053就是其中一个,有兴趣可以自行百度或到官网了解相关信息。

### 2. socat开启ipv6端口转发
socat新建一个端口转发,并保存应用,目标地址选择npm服务器ip,目标端口输入npm https代理端口,不用https可以填http代理端口,socat会自行设置防火墙规则,设置如下:

### 3. nginx proxy manager设置代理服务
在npm添加代理服务,把需要外网访问的服务添加进去,一个子域名对应一个服务,设置完成就可以用子域名尝试访问服务了。具体设置自行百度,网上教程很多,不再赘述。
### 4. 设置直连服务
上面设置后访问内网服务都要通过cf cdn,不是直连,速度较慢,对需要大带宽的服务可以另行开启端口,例如要直连alist,可以在socat添加端口转发,设置如下:

设置好后,可以通过访问http://ddns.example.com:5244 网址来访问alist服务,如果要使用https访问就需要在alist设置开启https,因为是直连服务,没有通过npm反向代理,https就要在服务应用上开启才行。直连访问是通过ipv6直连路由器再通过socat转发到内网服务,需要外网设备的网络支持ipv6,也有其使用局限性,而上面通过cf cdn访问是支持ipv4和ipv6访问的,局限性是速度比直连慢,其他需要直连的服务如法炮制,访问地址只要把端口号换成对应端口即可。

什么得
校验提示文案
值友4016003328
校验提示文案
值友5440934314
校验提示文案
巨懒虫
校验提示文案
值友1361260810
校验提示文案
IT奶爸也是煮男
校验提示文案
james旸爷
校验提示文案
eBusinesser
校验提示文案
值友5440934314
校验提示文案
什么得
校验提示文案
eBusinesser
校验提示文案
james旸爷
校验提示文案
值友1361260810
校验提示文案
值友4016003328
校验提示文案
巨懒虫
校验提示文案
IT奶爸也是煮男
校验提示文案