IPv6
文章平均质量分 69
redwingz
这个作者很懒,什么都没留下…
展开
-
cjdns whitepaper
互联网一个更技术性的问题,也是很多人都没有意识到的,是地址空间的碎片化。每台连接到互联网的计算机都需要一个地址,作为唯一标识它的数字,发送到这台计算机的每条数据上都附有此地址。在其互联网路径上的每一站,路由器都会检查报文(数据单元)的地址字段,以决定它可以在哪条线路上发送数据包。如果地址是大块的,路由器会更容易快速的查找报文中地址字段的前几个字节,然后知道,例如,它的目的地是中国的某个地方,虽然不准确,但足以知道该使用哪根线路发送。翻译 2024-06-09 21:26:04 · 127 阅读 · 0 评论 -
ifconfig创建sit隧道
通常可使用ip命令创建sit隧道设备,如下:# ip tunnel add sit1 mode sit remote 192.168.20.1 local 192.168.20.5## ip link5: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/sit 0.0.0.0 brd 0.0.0.06: sit1@NONE: <POINT原创 2021-06-02 21:30:09 · 1172 阅读 · 0 评论 -
Linux隧道6to4
6to4地址格式如下: | 3 | 13 | 32 | 16 | 64 bits | +---+------+-----------+--------+--------------------------------+ |FP | TLA | V4ADDR | SLA ID | Interface ID | |001|0x0002|原创 2021-05-30 22:47:43 · 1507 阅读 · 2 评论 -
Linux隧道sit
Linux隧道sit(Simple Internet Transition),配置环境如下: |----------| |----------| | | ens33 ens33 | | | Client |--------------------------------| Server | | | 1原创 2021-05-30 22:46:55 · 1132 阅读 · 0 评论 -
Linux隧道isatap(sit模式)
可使用isatap模式配置isatap隧道(isatap隧道模式),也可使用sit模式实现。如下环境: |----------| |----------| | | ens33 ens33 | | | Client |--------------------------------| Server | |原创 2021-05-30 22:45:28 · 1442 阅读 · 1 评论 -
Linux隧道isatap配置
与6rd不同,ISATAP(Intra-Site Automatic Tunnel Addressing Protocol)将IPv4地址嵌入在IPv6地址的接口ID部分,如下为ISATAP地址的接口ID部分,其组成为:24位的IANA OUI (00-00-5E),8位的值0xFE,以及32位的IPv4地址。如果嵌入的IPv4地址为公网IP,那么u位(universal/local)设置为1,否则,设置为0。另外g为表示individual/group。 0原创 2021-05-16 22:46:55 · 961 阅读 · 0 评论 -
linux隧道6rd配置
拓扑如下所示,CE(Customer Edge)和BR(Border Relay)使用两台Ubuntu系统的虚拟机。 |----------| |----------| | | ens33 ens33 | | | CE |--------------------------------| BR | |原创 2021-05-09 22:46:14 · 1472 阅读 · 1 评论 -
IPv6转发开关
conf/all/forwarding配置全局的接口间IPv6报文转发,默认值为0,此值的修改将同时修改每个接口的forwarding配置项。接口目录下forwarding配置项对于接口的Host/Router行为,默认值为0,遵循以下主机行为:1)在邻居发现协议的Neighbour Advertisements报文中不设置IsRouter标志;2)如果accept_ra为真(默认值),可发送Router Solicitations报文;3)如果accept_ra为真(默认值),可接收Router原创 2021-03-30 22:37:14 · 4111 阅读 · 0 评论 -
optimistic-dad
配置项optimistic_dad用于控制是否执行优化的DAD检查;配置项use_optimistic控制在源地址选择时,可使用optimistic地址,但是其优先级低于Preferred地址。如下函数ipv6_allow_optimistic_dad,命名空间和设备的optimistic_dad配置项有一个为真,就启用此功能。static bool ipv6_allow_optimistic_dad(struct net *net, struct inet6_dev *idev)原创 2021-03-23 22:28:44 · 1002 阅读 · 0 评论 -
ipv6设备的删除标记dead
在创建inet6_dev设备结构函数中,在分配了inet6_dev结构内存之后,如果出现邻居参数结构neigh_parms分配失败,或者snmp相关结构分配失败的情况,需要释放inet6_dev结构,直接返回错误。static struct inet6_dev *ipv6_add_dev(struct net_device *dev){ struct inet6_dev *ndev; ndev = kzalloc(sizeof(struct inet6_dev), GFP_KERNEL原创 2021-03-16 23:21:43 · 515 阅读 · 0 评论 -
IPv6地址DAD检测
DAD冲突检测和IPv6地址失效检测使用的都是addrconf_wq队列,其在addrconf_init函数中创建。int __init addrconf_init(void){ struct inet6_dev *idev; ... addrconf_wq = create_workqueue("ipv6_addrconf"); if (!addrconf_wq) { err = -ENOMEM; goto out_nowq;原创 2021-03-13 22:13:20 · 4731 阅读 · 1 评论 -
IPv6源地址选择
源地址的选择依据出接口、目的地址、label、参数prefs和地址类型scope等参数来确定,在函数ipv6_dev_get_saddr开始,先行将这些判断参数组织到结构ipv6_saddr_dst中。scores记录每个可选地址的得分,最终分数高的地址选为要使用的源地址。int ipv6_dev_get_saddr(struct net *net, const struct net_device *dst_dev, const struct in6_addr *daddr原创 2021-03-06 21:28:36 · 2276 阅读 · 0 评论 -
RS请求报文控制
默认情况下router_solicitations值为-1,不限制RS的发送次数。如果其为正值,表示当发送到此数量的RS报文之后,还未收到响应,则认为当前链路不存在路由器。$ cat /proc/sys/net/ipv6/conf/all/router_solicitations-1$ cat /proc/sys/net/ipv6/conf/default/router_solicitations-1router_solicitation_interval规定RS报文的发送间隔,默认为4秒钟。r原创 2021-03-05 21:19:41 · 4538 阅读 · 0 评论 -
接口token设置
如下ip命令所示,可设置接口的token值。# ip token set ::0102:0304 dev ens33 # # ip token list token ::1.2.3.4 dev ens33token :: dev ens34token :: dev ens35内核处理TOKEN添加如下inet6_set_iftoken函数,先检查合法性:对于环回loopback接口,或者不需要邻居地址的接口(设置了IFF_NOA原创 2021-03-04 21:33:35 · 2616 阅读 · 1 评论 -
IPv6隐私地址
RFC4941定义了IPv6的Privacy地址扩展,默认情况下,内核没有开启隐私地址,如下PROC文件use_tempaddr值为0。当use_tempaddr值大于0时,开启隐私地址功能。use_tempaddr值为1时,优先使用公开地址。而当use_tempaddr值大于1时,优先使用隐私地址。$ cat /proc/sys/net/ipv6/conf/all/use_tempaddr0$ cat /proc/sys/net/ipv6/conf/default/use_tempaddr0创原创 2021-03-02 21:20:56 · 4767 阅读 · 0 评论 -
IPv6地址有效性检测
IPv6地址检测和DAD冲突检测使用的都是addrconf_wq队列,其在addrconf_init函数中创建。int __init addrconf_init(void){ struct inet6_dev *idev; ... addrconf_wq = create_workqueue("ipv6_addrconf"); if (!addrconf_wq) { err = -ENOMEM; goto out_nowq; }原创 2021-02-26 23:23:19 · 3708 阅读 · 0 评论 -
IPv6地址自动配置
默认情况下,配置项autoconf都是1,即开启地址自动配置。$ cat /proc/sys/net/ipv6/conf/all/autoconf 1$ cat /proc/sys/net/ipv6/conf/default/autoconf 1$ cat /proc/sys/net/ipv6/conf/ens33/autoconf 1$ cat /proc/sys/net/ipv6/conf/all/accept_ra_pinfo1$ cat /proc/s原创 2021-02-24 23:41:48 · 4855 阅读 · 0 评论 -
IPv6使能开关
默认情况下,IPv6是开启状态,即PROC文件disable_ipv6的值为零。$ cat /proc/sys/net/ipv6/conf/all/disable_ipv60$ cat /proc/sys/net/ipv6/conf/default/disable_ipv60$ cat /proc/sys/net/ipv6/conf/ens33/disable_ipv60如下代码所示,默认情况下all和default中的disable_ipv6配置值都为0。static struct ip原创 2021-02-23 22:05:01 · 2663 阅读 · 0 评论 -
IPv6地址stable private
对于链路本地地址和自动配置地址,内核支持4种生成方式,默认情况下使用EUI64方式,可通过PROC文件:/proc/sys/net/ipv6/conf/ens33/addr_gen_mode进行修改。enum in6_addr_gen_mode { IN6_ADDR_GEN_MODE_EUI64, IN6_ADDR_GEN_MODE_NONE, IN6_ADDR_GEN_MODE_STABLE_PRIVACY, IN6_ADDR_GEN_MODE_RANDOM,}原创 2021-02-19 22:07:09 · 1728 阅读 · 0 评论 -
DAD报文控制
PROC文件accept_dad控制DAD(Duplicate Address Detection)报文的接收,内核中根据目录all和接口(ens33)名称目录下的accept_dad的两个值中的最大值来决定最终的值。accept_dad的取值有以下三个:0 - 关闭DAD1 - 开启DAD2 - 开启DAD,并且,在基于MAC地址的本地链路地址检测到冲突时,关闭IPv6功能。$ cat /proc/sys/net/ipv6/conf/all/accept_dad0$ cat /proc/sys原创 2021-02-09 22:18:24 · 2447 阅读 · 0 评论 -
IPv6接口自动配置的地址数量
默认情况下,每个接口最大可自动配置16个地址。如下PROC文件max_addresses中的值,如果设置为0,将不限制地址数量。$ cat /proc/sys/net/ipv6/conf/all/max_addresses 16$ cat /proc/sys/net/ipv6/conf/default/max_addresses16$ cat /proc/sys/net/ipv6/conf/ens33/max_addresses 16ipv6_devconf和ipv6_devconf原创 2021-02-07 22:58:47 · 987 阅读 · 0 评论 -
IPv6设备配置选项
IPv6子系统中的三个全局配置:ipv6_devconf、ipv6_devconf_dflt和ipv6_defaults:static struct ipv6_devconf ipv6_devconf __read_mostly = { .forwarding = 0, .hop_limit = IPV6_DEFAULT_HOPLIMIT, ...}static struct ipv6_devconf ipv6_devconf_dflt __read_mostly原创 2021-02-06 21:49:52 · 1131 阅读 · 0 评论 -
命名空间设备地址标识dev_addr_genid
对于IPv4,在初始化时,为命名空间的设备地址标识赋于一个随机值。static __net_init int rt_genid_init(struct net *net){ atomic_set(&net->ipv4.rt_genid, 0); atomic_set(&net->fnhe_genid, 0); atomic_set(&net->ipv4.dev_addr_genid, get_random_int()); retu原创 2021-01-28 22:07:03 · 729 阅读 · 0 评论