ipv6测试:https://test-ipv6.com/

环境:移动运营商、openwrt

探讨家用路由怎么配置ipv6实现外网访问。尽量避开原理。
(想了解原理推荐看下面贴出的视频链接)

链接:红茶三杯http://www.ccietea.com/大佬的视频:

  • 【IPv6 01】IPv6概述 https://www.youtube.com/watch?v=scyzX3Zd5JU
  • 【IPv6 02】IPv6基础配置 https://www.youtube.com/watch?v=Vr-UvtwA3kA
  • 【IPv6 03】ICMPv6详解(上) https://www.youtube.com/watch?v=MYBcNPUx9YU
  • 【IPv6 04】ICMPv6详解(中)无状态自动配置 https://www.youtube.com/watch?v=s_yASxcjMl0
  • 【IPv6 05】ICMPv6详解(下)以及DHCPv6 https://www.youtube.com/watch?v=pw46Qu6Shsc

链接:openwrt官方文档

  • Network Interfaces https://oldwiki.archive.openwrt.org/zh-cn/doc/networking/network.interfaces
    Switch Documentation https://oldwiki.archive.openwrt.org/zh-cn/doc/uci/network/switch

链接:他人整理文档

  • 闲谈IPv6-典型特征的一些技术细节
    https://blog.csdn.net/dog250/article/details/8169984
  • 闲谈IPv6-一起玩转IPv6地址自动配置
    https://blog.csdn.net/dog250/article/details/88176596

文章目录

  • 基础知识
    • # 地址划分
    • # 地址划分:LLA Link-Local Address(链路本地地址)
    • # 地址划分:GUA Aggregatable Global Unicast Address(可聚合全球广播地址)
      • @三大运营商GUA前缀分配
    • # 邻居发现协议(NDP Neighbor Discovery Protocol)
    • # 自动配置
  • OpenWrt配置ipv6
    • # 从运营商那获取前缀
    • # 配置无状态ipv6地址
    • # 配置有状态ipv6地址
  • DDNS
  • socat:外网ipv6访问,映射内网ipv4地址

基础知识

虽然想避开ipv6里面冗长的知识点,但是想知其然的进行ipv6配置,一些常识还是要知道的。

常识:

  1. 地址划分
  2. 邻居发现
  3. 无状态自动配置和有状态自动配置

# 地址划分

IPv6地址长度为128位,每16位分一段可以分8段,每一段16位又分成4段用16进制表示。

(取值范围)如下:

0000:0000:0000:0000:0000:0000:0000:0000 ~ ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff

为了使这一长串地址有含义,设计了有三种编址方式:单播、组播、任意播。

我们只要关心单播地址(Unicast)即可

单播地址又分

  • GUA:Aggregatable Global Unicast Address(可聚合全球广播地址)
  • Site-Local Address(本地站点地址)
  • ULA:Unique local Address(唯一本地地址)
  • LLA:Link-Local Address(链路本地地址)

# 地址划分:LLA Link-Local Address(链路本地地址)

其中链路本地地址(LLA)是ipv6两端通信的基础。所有设备开启ipv6支持都会自动生成一个唯一的LLA.

所以当我们看到这个地址,就可以确定设备是支持ipv6的

LLA以FE80::/10为前缀,此外第11-64位为0,外加一个64位接口标识。这个64位标识号追求不重复,所以一般通过EUI-64的方法用mac地址生成。(但是windows系统是随机生成这64位的,听说考虑到安全的原因)

note:
上图的本地链路地址 fe80::6177:4638:8d0b:731b 为简写

其中 :: 表示中间一堆的 0
(具体多少个零,由后面决定,目的是补全128位地址。)
完整的写法为 fe80:0000:0000:0000:6177:4638:8d0b:731b

# 地址划分:GUA Aggregatable Global Unicast Address(可聚合全球广播地址)

全球广播地址(GUA )相当于IPv4的公网IP。想要公网访问必须要有GUA,所以它是我们需要关心的。

GUA以001开头,45位的全局路由选择前缀+16位的子网ID+64位的ID接口组成。(如下图)

例如
拿移动网络运营商为例,它们会提供前60位前缀,如2409:8a55:2bf:49c0::/60
然后路由器可以根据这个前缀划分子网

2409:8a55:2bf:49c0::/64
2409:8a55:2bf:49c1::/64

2409:8a55:2bf:49cf::/64

然后路由器和终端设备(如pc)协商出最后64位
假设终端(如pc)连接路由器端口所在的前缀为 2409:8a55:2bf:49c0::/64
然后路由和终端协商的64位后缀为 64f6:9850:9a37:87fc
那么终端的ipv6地址如下
2409:8a55:2bf:49c0:64f6:9850:9a37:87fc

@三大运营商GUA前缀分配

来源:https://baiye.us/archives/8040

通过GUA我们就可以知道网络是出至哪个运营商

  • fe80 局域网(相当于192.168)
  • 240e 中国电信
    2408 中国联通
    2409 中国移动/铁通
    2001 6in4 地址,是另一种隧道协议。
    2002 6to4地址

例如下图
可见2409前缀就是移动的

# 邻居发现协议(NDP Neighbor Discovery Protocol)

邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议,它用于替代IPv4的ARP(Address Resolution Protocol)和ICMP路由器发现(Router Discovery)。


NDP被设计允许在同一个链路或者网段的节点(路由器和主机)找到彼此,它定义了四种报文格式:NS/NA、RS/RA

  1. 邻居请求/通告(NS/NA) (neighbor solicitation / neighbor advertisement)
    在网络和链路层地址之间提供类似于ARP的映射功能

    像ipv4会把ip和mac地址对应关系记录到arp表一样,ipv6会把ip和mac地址对应关系记录到邻居表里面。

    • arp in ipv4
    • neighbor in ipv6
  2. 路由器请求和通告(RS/RA)(router solicitation / router advertisement)
    提供的功能包括路由器发现、移动IP代理发现、重定向, 以及对一些自动配置的支持

网上很多关于这四种报文的分析(如:《IPv6邻居发现协议》 https://blog.csdn.net/qq_38265137/article/details/80466128),这里只是想强调几个概念:

  • 邻居:
    是指同一个网段下可以互相通信的设备。
    开启ipv6协议的设备间会时不时用NS/NA报文进行通信,以了解邻居们的状态是否可通信。

  • 通告:
    一般是指路由器发现的通告。
    默认情况下,开启ipv6的路由器会时不时发出RA报文,告诉统一网段的设备它的ipv6前缀,如 2409:8a55:2bf:49c0::/64
    网段中的设备如果需要ipv6地址,那么可以发出RS报文和路由器协商剩下的64位写什么。

# 自动配置

ipv6自动配置分有状态自动配置和无状态自动配置

  • 无状态 stateless
    不需要额外的协议,不需要额外的应用服务器。仅通过RS、RA消息实现地址获取
    (即插即用)

  • 状态化 stateful
    需要用到dhcpv6协议,需要额外创建提供dhcpv6服务的应用服务器
    虽然比无状态自动配置麻烦一丁点,但是可以管控分配了ipv6地址的客户端的状态

同时,自动配置除了可以提供ipv6地址,还可以提供dns服务器信息、域名信息等其他配置信息

OpenWrt配置ipv6

有了上面基础知识的补充,我们知道路由器ipv6配置其实就几个问题

  1. 如何从运营商那获取前缀
  2. 如何配置无状态ipv6地址
  3. 如何配置有状态ipv6地址

# 从运营商那获取前缀

如果选择pppoe的拨号方式,openwrt提供有自动的方式获取ipv6。这种方式获取ipv6

config interface 'lan'option type 'bridge'option ifname 'eth0'option proto 'static'option ipaddr '192.168.1.1'option netmask '255.255.255.0'option ip6assign '64'config interface 'wan'option ifname 'eth1'option _orig_ifname 'eth1'option _orig_bridge 'false'option proto 'pppoe'option username 'xxxxxxxxxx'option password 'xxxxxxxxxx'option keepalive '0'option ipv6 'auto'


这种配置等于选择“手动”并且添加一个@wan口用dhcpv6获取地址

config interface 'lan'option type 'bridge'option ifname 'eth0'option proto 'static'option ipaddr '192.168.1.1'option netmask '255.255.255.0'option ip6assign '64'config interface 'wan'option ifname 'eth1'option _orig_ifname 'eth1'option _orig_bridge 'false'option proto 'pppoe'option username 'xxxxxxxxxx'option password 'xxxxxxxxxx'option keepalive '0'config interface 'wan6_manual'option proto 'dhcpv6'option ifname '@wan'option reqaddress 'try'option reqprefix 'auto'



# 配置无状态ipv6地址

根据前面提到的基础知识,我们知道,终端得到ipv6地址分两步

  1. 路由器通告前缀
  2. 终端和路由器协商后缀

所以我们需要在 接口 》 lan 》 dhcp服务器 下开启路由通告服务

config dhcp 'lan'option interface 'lan'option start '100'option limit '150'option leasetime '12h'option dhcpv4 'server'option ra_slaac '1'# 协议报文M位置1,意为“提供dhcpv6服务”list ra_flags 'managed-config'# 协议报文O位置1,意为“提供其他配置信息”list ra_flags 'other-config'option ra 'server'option ra_default '1'

# 配置有状态ipv6地址

根据前面提到的基础知识,我们知道,配置有状态ipv6地址需要开启dhcpv6服务器

config dhcp 'lan'option interface 'lan'option start '100'option limit '150'option leasetime '12h'option dhcpv4 'server'option ra_slaac '1'# 协议报文M位置1,意为“提供dhcpv6服务”list ra_flags 'managed-config'# 协议报文O位置1,意为“提供其他配置信息”list ra_flags 'other-config' # 开启dhcpv6服务器option dhcpv6 'server'option ra_management '2'option ra 'server'

(由于不同设备厂商对ipv6的支持不一样,如果发现某些连不上ipv6,可以把无状态的路由通告开了看看)

DDNS

ddns服务提供商:(选其一)
www.duckdns.org
www.dynv6.net

ddns客户端文档:https://openwrt.org/docs/guide-user/services/ddns/client
ddns客户端配置:https://openwrt.org/docs/guide-user/base-system/ddns
(ddns网络提供商的配置页面通常有配置教程,那里提供的教程其实已经很详细了)



socat:外网ipv6访问,映射内网ipv4地址

恩山论坛:https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=4129434&page=1#pid11351439

安装组件

opkg update
opkg install socat

修改socat的配置文件/etc/config/socat

config socat '3380'option enable '1'option SocatOptions '-d -d TCP6-LISTEN:3380,fork TCP4:10.0.0.4:3389'

或者纯命令添加

uci set socat.3380='socat'
uci set socat.3380.enabled='1'
uci set socat.3380.SocatOptions='-d -d TCP6-LISTEN:3380,fork TCP4:10.0.0.4:3389'
uci commit socat

同样也可以添加更多的socat设置,比如转发给局域网的群晖

uci set socat.5000='socat'
uci set socat.5000.enabled='1'
uci set socat.5000.SocatOptions='-d -d TCP6-LISTEN:5000,fork TCP4:10.0.0.6:5000'
uci commit socat

然后

/etc/init.d/socat enabled
/etc/init.d/socat start

最后到防火墙开放对应端口3380、5000

当然,用nginx实现也不错

【笔记】openwrt - 【一文解决】ipv6设置、DDNS、端口转发相关推荐

  1. OpenWrt路由开启DDNS+端口转发进行外网访问

    OpenWrt路由开启DDNS+端口转发进行外网访问(LuCI界面实现) --开篇 一.准备工作 二.开机! 三.连接 --结尾 –开篇 本篇适用于一切装有OpenWrt系统的路由器/软路由,只要你保 ...

  2. 设置路由器端口转发功能如何操作

    2019独角兽企业重金招聘Python工程师标准>>> 当我们使用专用网络通过路由器连接到远程主机时,需要使用XDMCP连接进行端口转发,今天一起来学习一下这一部分的内容. 具体操作 ...

  3. linux 设置mysql端口转发_linux使用socat进行端口转发,支持tcp/udp数据转发

    端口转发程序已经介绍过rinetd了,但是rinetd不支持域名动态解析功能,如果域名对应的ip发生改变,需要重新才能重新加载新的地址.这里自然找到了端口转发工具socat,它完美的解决了动态dns的 ...

  4. windows netsh设置代理服务器/端口转发

    前言 最近项目使用git做版本控制,但公司内部网络不能上外网.想想现在git版本也是很火热的版本管理,所以就自己在虚拟机中搭建了gitlab.由于IP资源限制,虚拟机和物理主机是NAT网络关系.那么问 ...

  5. 群晖DDNS和端口转发等相关讲解

    文章目录 废话篇 前言 本文知识概要 域名和IP地址的了解 域名解析 内网IP和外网IP DDNS是什么? 群晖如何设置DDNS 端口转发 后言 协助改进 废话篇 本篇文章为原创文章,转载请注明出处, ...

  6. [中国电信 外网ip 光猫 端口映射 端口转发 远程协助]记一次和中国电信获取外网ip并设置端口映射、端口转发以及设置光猫 成功外网远程协助的过程

    环境 湖北电信 得到外网ip 拨打10000电话 "是否可以把我拨打的手机号的下的宽带变更为外网ip" 客服小姐姐核实宽带户主姓名及宽带的房屋地址 5分钟后重启猫.路由器 成功得到 ...

  7. wdr7500 虚拟服务器,教程:普联TL-WDR7500路由器端口转发如何设置

    普联TL-WDR7500路由器端口转发设置的步骤一.设置电脑IP 想通过远程桌面访问家中的电脑:但家中的电脑是连接路由器上网的,输入路由器的WAN口IP地址 后,无法访问到计算机. 解决办法:在家中的 ...

  8. wdr7500 虚拟服务器,TP-Link TL-WDR7500路由器端口转发怎么设置

    TP-Link TL-WDR7500路由器配置简单,不过对于没有网络基础的用户来说,完成路由器的安装和端口转发的设置,仍然有一定的困难,本文学习啦小编介绍TP-Link TL-WDR7500路由器端口 ...

  9. 免费好用的IPv6之DDNS服务-Openwrt上dynv6的使用介绍

    概述:本文主要介绍了dynv6在OpenWrt上的配置及使用,对于有IPv6地址的用户,可以按照本文自行探索更多玩法 针对近期dynv6网站的更新,本文于2020.2.13更新. 参考dynv6网站推 ...

最新文章

  1. 力挺Python!同是程序员,为啥同事年前就实现了财务自由?
  2. CentOS 7.3 安装配置RabbitMQ
  3. React+TypeScript练手小项目
  4. PowerDesiger 15逆向生成工程E-R图及导出word表格
  5. 《剑指offer》第九题(用两个栈实现队列)
  6. where is language of sap.ui.getCore().getConfiguration set - locale
  7. Excel有哪些需要熟练掌握而很多人不会的技能!
  8. 架构师之路:从码农到架构师你差了哪些
  9. 【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第三节 栈与堆,值类型与引用类型
  10. Win11系统如何恢复隐藏文件
  11. 记一个java和php都能调用的http接口
  12. mysql自增字段AUTO_INCREMENT重排或归零
  13. 清华大学操作系统OS学习(二)——OS基本概念
  14. java关闭流方法,Java关闭流方法总结
  15. DLAN 连接和使用体验——Twonky
  16. 图扑软件 3D 组态编辑器,低代码零代码构建数字孪生工厂
  17. 求n重幂详细过程代码及思路(java)
  18. 树莓派介绍以及FAQ【这是我见过最全的树莓派教程】
  19. 【MQTT】MQTT协议学习
  20. 鲁大师升级“Pro”,2B领域谋篇布局

热门文章

  1. java无法检测到_使用JVM管理工具jvisualvm,系统提示无法检测到本地java应用程序的原因和解决办法...
  2. idea中JD-Intellij插件如何使用以及Luyten的使用
  3. UG NX 12 基准平面
  4. 【windows】实战部署二(使用)SVNserver服务端+SVNclient客户端
  5. CDH数仓项目(一) —— CDH安装部署搭建详细流程
  6. Linux NVMe Driver学习笔记之8:IO SQ/CQ的创建过程
  7. hqchartPy2数据对接教程7-指标引用
  8. CSI SAP2000 v22详细安装教程(图文安装步骤)
  9. 4.K8s组件的使用
  10. Java去除字符串中空格的方法详解