【笔记】openwrt - 【一文解决】ipv6设置、DDNS、端口转发
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配置,一些常识还是要知道的。
常识:
- 地址划分
- 邻居发现
- 无状态自动配置和有状态自动配置
# 地址划分
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
邻居请求/通告(NS/NA) (neighbor solicitation / neighbor advertisement)
在网络和链路层地址之间提供类似于ARP的映射功能像ipv4会把ip和mac地址对应关系记录到arp表一样,ipv6会把ip和mac地址对应关系记录到邻居表里面。
- arp in ipv4
- neighbor in ipv6
- arp in ipv4
路由器请求和通告(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配置其实就几个问题
- 如何从运营商那获取前缀
- 如何配置无状态ipv6地址
- 如何配置有状态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地址分两步
- 路由器通告前缀
- 终端和路由器协商后缀
所以我们需要在 接口 》 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、端口转发相关推荐
- OpenWrt路由开启DDNS+端口转发进行外网访问
OpenWrt路由开启DDNS+端口转发进行外网访问(LuCI界面实现) --开篇 一.准备工作 二.开机! 三.连接 --结尾 –开篇 本篇适用于一切装有OpenWrt系统的路由器/软路由,只要你保 ...
- 设置路由器端口转发功能如何操作
2019独角兽企业重金招聘Python工程师标准>>> 当我们使用专用网络通过路由器连接到远程主机时,需要使用XDMCP连接进行端口转发,今天一起来学习一下这一部分的内容. 具体操作 ...
- linux 设置mysql端口转发_linux使用socat进行端口转发,支持tcp/udp数据转发
端口转发程序已经介绍过rinetd了,但是rinetd不支持域名动态解析功能,如果域名对应的ip发生改变,需要重新才能重新加载新的地址.这里自然找到了端口转发工具socat,它完美的解决了动态dns的 ...
- windows netsh设置代理服务器/端口转发
前言 最近项目使用git做版本控制,但公司内部网络不能上外网.想想现在git版本也是很火热的版本管理,所以就自己在虚拟机中搭建了gitlab.由于IP资源限制,虚拟机和物理主机是NAT网络关系.那么问 ...
- 群晖DDNS和端口转发等相关讲解
文章目录 废话篇 前言 本文知识概要 域名和IP地址的了解 域名解析 内网IP和外网IP DDNS是什么? 群晖如何设置DDNS 端口转发 后言 协助改进 废话篇 本篇文章为原创文章,转载请注明出处, ...
- [中国电信 外网ip 光猫 端口映射 端口转发 远程协助]记一次和中国电信获取外网ip并设置端口映射、端口转发以及设置光猫 成功外网远程协助的过程
环境 湖北电信 得到外网ip 拨打10000电话 "是否可以把我拨打的手机号的下的宽带变更为外网ip" 客服小姐姐核实宽带户主姓名及宽带的房屋地址 5分钟后重启猫.路由器 成功得到 ...
- wdr7500 虚拟服务器,教程:普联TL-WDR7500路由器端口转发如何设置
普联TL-WDR7500路由器端口转发设置的步骤一.设置电脑IP 想通过远程桌面访问家中的电脑:但家中的电脑是连接路由器上网的,输入路由器的WAN口IP地址 后,无法访问到计算机. 解决办法:在家中的 ...
- wdr7500 虚拟服务器,TP-Link TL-WDR7500路由器端口转发怎么设置
TP-Link TL-WDR7500路由器配置简单,不过对于没有网络基础的用户来说,完成路由器的安装和端口转发的设置,仍然有一定的困难,本文学习啦小编介绍TP-Link TL-WDR7500路由器端口 ...
- 免费好用的IPv6之DDNS服务-Openwrt上dynv6的使用介绍
概述:本文主要介绍了dynv6在OpenWrt上的配置及使用,对于有IPv6地址的用户,可以按照本文自行探索更多玩法 针对近期dynv6网站的更新,本文于2020.2.13更新. 参考dynv6网站推 ...
最新文章
- 力挺Python!同是程序员,为啥同事年前就实现了财务自由?
- CentOS 7.3 安装配置RabbitMQ
- React+TypeScript练手小项目
- PowerDesiger 15逆向生成工程E-R图及导出word表格
- 《剑指offer》第九题(用两个栈实现队列)
- where is language of sap.ui.getCore().getConfiguration set - locale
- Excel有哪些需要熟练掌握而很多人不会的技能!
- 架构师之路:从码农到架构师你差了哪些
- 【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第三节 栈与堆,值类型与引用类型
- Win11系统如何恢复隐藏文件
- 记一个java和php都能调用的http接口
- mysql自增字段AUTO_INCREMENT重排或归零
- 清华大学操作系统OS学习(二)——OS基本概念
- java关闭流方法,Java关闭流方法总结
- DLAN 连接和使用体验——Twonky
- 图扑软件 3D 组态编辑器,低代码零代码构建数字孪生工厂
- 求n重幂详细过程代码及思路(java)
- 树莓派介绍以及FAQ【这是我见过最全的树莓派教程】
- 【MQTT】MQTT协议学习
- 鲁大师升级“Pro”,2B领域谋篇布局
热门文章
- java无法检测到_使用JVM管理工具jvisualvm,系统提示无法检测到本地java应用程序的原因和解决办法...
- idea中JD-Intellij插件如何使用以及Luyten的使用
- UG NX 12 基准平面
- 【windows】实战部署二(使用)SVNserver服务端+SVNclient客户端
- CDH数仓项目(一) —— CDH安装部署搭建详细流程
- Linux NVMe Driver学习笔记之8:IO SQ/CQ的创建过程
- hqchartPy2数据对接教程7-指标引用
- CSI SAP2000 v22详细安装教程(图文安装步骤)
- 4.K8s组件的使用
- Java去除字符串中空格的方法详解