200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 【笔记】openwrt - 【一文解决】ipv6设置 DDNS 端口转发

【笔记】openwrt - 【一文解决】ipv6设置 DDNS 端口转发

时间:2020-05-11 03:25:00

相关推荐

【笔记】openwrt - 【一文解决】ipv6设置 DDNS 端口转发

ipv6测试:https://test-/

环境:移动运营商、openwrt

探讨家用路由怎么配置ipv6实现外网访问。尽量避开原理。

(想了解原理推荐看下面贴出的视频链接)

链接:红茶三杯/大佬的视频:

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

链接:openwrt官方文档

Network Interfaces https://oldwiki./zh-cn/doc/networking/network.interfaces

Switch Documentation https://oldwiki./zh-cn/doc/uci/network/switch

链接:他人整理文档

闲谈IPv6-典型特征的一些技术细节

/dog250/article/details/8169984闲谈IPv6-一起玩转IPv6地址自动配置

/dog250/article/details/88176596

文章目录

基础知识# 地址划分# 地址划分:LLA Link-Local Address(链路本地地址)# 地址划分:GUA Aggregatable Global Unicast Address(可聚合全球广播地址)@三大运营商GUA前缀分配# 邻居发现协议(NDP Neighbor Discovery Protocol)# 自动配置OpenWrt配置ipv6# 从运营商那获取前缀# 配置无状态ipv6地址# 配置有状态ipv6地址DDNSsocat:外网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

路由器请求和通告(RS/RA)(router solicitation / router advertisement)

提供的功能包括路由器发现、移动IP代理发现、重定向, 以及对一些自动配置的支持

网上很多关于这四种报文的分析(如:《IPv6邻居发现协议》 /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服务提供商:(选其一)

ddns客户端文档:/docs/guide-user/services/ddns/client

ddns客户端配置:/docs/guide-user/base-system/ddns

(ddns网络提供商的配置页面通常有配置教程,那里提供的教程其实已经很详细了)

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

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

安装组件

opkg updateopkg 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实现也不错

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。