linux ipv6临时地址
在Ubuntu系统上想要通过ipv6来上网,结果发现通过DHCP获取到了ipv6地址却无法连接外网。
ping6 ipv6.google.com
数据包有去无回,100% loss 。
奇怪的是通过DSL PPPoE拨号连接显示两个global的ip:
ifconfig ppp0 inet6 地址: 2001:250:1006:dff0:4913:2aa5:8075:7c01/64 Scope:Global
inet6 地址: 2001:250:1006:dff0:99b1:935b:57a5:9b10/64 Scope:Global
inet6 地址: fe80::99b1:935b:57a5:9b10/10 Scope:Link
通过traceroute6发现数据包从尾号为7c01的那个地址发出的(记为地址A),通过查询学校的计费认证服务器的web页面看到实际分配给我的ip只有那个尾号为9b10的地址(地址B)。
第一次遇到这种情况,很不理解。于是想将地址A直接干掉,把它屏蔽或删掉。于是搜索删除已获取ip的方法,发现ip命令的del参数可以:
ip - addr show ppp0 #显示出指定接口的ipv6
ip - addr del 地址A dev ppp0 #或者使用 ifconfig 接口 inet6 del v6地址
将地址A删掉后可以成功上ipv6的网站了,可是高兴了没几分钟又上不了了,地址又回来了。
注意到ip show显示的地址A是scope global temporary dynamic的,居然是个临时地址。
继续搜索什么是临时地址以及为什么要使用临时地址。。。
大概意思是不想固定一个设备的ip,防止被追踪定位,为了隐私考虑。因为使用ipv6地址无需像ipv4一样使用NAT公用一个ip,设备间连接更容易,但容易造成隐私泄漏。为此操作系统可以选用多个临时ip,每个ip有固定的生命周期。ipv6自动配置时使用你的MAC地址来选择一个ip地址,这样其它设备根据你的ip地址可能会算出你的mac地址(全球唯一)。
这确实是不错的做法,现在的疑问就是这些临时ip的生成和使用机制是什么以及我现在为什么不能用它来上网?
只了解到临时地址的作用是在用户对外发起连接的时候充当连接发起的IPv6地址,这一行为的目的在于保证主机在对外通信 时候的匿名性。这个地址是由路由前缀和由主机随机生成的接口标识组成的。这个地址是有有效期限制的,几个小时或者几天,在期间,系统一直以这个地址为主机 地址向外发出连接和请求。每一个时刻只有一个临时地址是有效的,在一个地址过期时会立刻生成一个新的地址作为新的临时地址。已经过期的地址不会立即被删除,它会保存几个小时或者几天,此时过期的临时地址不能对外发起连接,但是可以接受外部发来的之前请求的信息。下面网站上指出在 RFC 3041 中描述了一种备用的 IPv6 接口标识,它是随机生成的,并且随时间变化而变化。
https://msdn.microsoft.com/zh-cn/library/cc736439(v=ws.10).aspx
至于为什么在我电脑上使用临时地址无法连接还不得知,,,
当务之急是把临时ip给取消掉,本来获取到的ip就是动态的,也无需这么注重隐私,况且现在大多数服务器都是用静态ip啊。
原来ubuntu的多个版本都是如下(linux内核参数,可使用cat、echo来查看修改/proc/sys):
sudo sysctl -a | grep tempaddr
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2
net.ipv6.conf.eth0.use_tempaddr = 2
net.ipv6.conf.lo.use_tempaddr = 2
值为2表示系统打开了该选项并且在建立连接时优先使用临时地址。
只需改为0并重启即可(重启网络),
执行sudo sysctl net.ipv6.conf.ppp0.use_tempaddr=0 可以临时改变ppp0接口的use_tempaddr的值。
然而在执行下列命令时又被重置为2。
sudo /etc/init.d/networking restart #手动配置的网络
sudo pkill NetworkManager ; sudo NetworkManager #NetworkManager托管的 )
一劳永逸的方式为
尝试将net.ipv6.conf.all.use_tempaddr=0写入/etc/sysctl.conf
sysctl -p #读取sysctl.conf使新设置生效,但并不加载sysctl.d目录中的文件
sysctl --system #加载所有的配置文件,像/etc/sysctl.d/*等
重启之后发现不再产生临时地址了,过了几个月,在我升级内核之后发现上述做法不可行了。
发现/etc/sysctl.d这个目录下有个10-ipv6-privacy.conf 内容如下:
# IPv6 Privacy Extensions (RFC 4941)
# ---
# IPv6 typically uses a device's MAC address when choosing an IPv6 address
# to use in autoconfiguration. Privacy extensions allow using a randomly
# generated IPv6 address, which increases privacy.
#
# Acceptable values:
# 0 - don’t use privacy extensions.
# 1 - generate privacy addresses
# 2 - prefer privacy addresses and use them over the normal addresses.
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2
将net.ipv6.conf.default.use_tempaddr改为0后
执行sysctl --system重新拨号连接,就不再有临时地址了。
不清楚all与default的区别,似乎是all的设置会被特定接口的设置覆盖,default的值在内核启动时设置。
在http://tldp.org/HOWTO/Linux+IPv6-HOWTO/proc-sys-net-ipv6..html 上面写着:
conf/default/*
Change the interface-specific default settings.
conf/all/*
Change all the interface-specific settings.
Exception: conf/all/forwarding has a different meaning here
(设置ipv6转发的all.forwarding参数有点特殊,如果设为0则全局禁止了数据包转发,你不能为每个设备接口设置不同的转发开关。这跟ipv4不同。)
2. pppoeconf 拨号+ipv6设置
使用命令行工具pppoeconf管理网络
用户名(username)与密码(password)存储在/etc/ppp/chap-secrets文件中。
生成的配置文件会存放于/etc/ppp/peers目录下, 并且会改动/etc/network/interfaces;
查看手册$man pppd
可以看到有这么一行:
+ipv6 Enable the IPv6CP and IPv6 protocols.
若打算启用IPv6,需要添加+ipv6
至/etc/ppp/peers/<file name>
。
如果开启了IPv6内核转发,会获取不到IPv6地址,这与Router Advertisements这个术语有关,相关配置是accept_ra
:
编辑 /etc/sysctl.conf
net.ipv6.conf.default.accept_ra=2
net.ipv6.conf.all.accept_ra=2
net.ipv6.conf.default.use_tempaddr=0
net.ipv6.conf.all.use_tempaddr=0
参考链接:
https://www.ipsidixit.net/2012/08/09/ipv6-temporary-addresses-and-privacy-extensions/
https://www.hpc.mil/index.php/2013-08-29-16-03-23/networking-overview/2013-10-03-17-24-38/ipv6-knowledge-base-ip-transport/enabling-ipv6-in-debian-and-ubuntu-linux
https://asininetech.com/2014/04/17/ubuntu-14-04-server-and-ipv6-temporary-addresses/
http://ipv6int.net/systems/linux-ipv6.html#privacy
http://blog.csdn.net/eddy_liu/article/details/7166165在Linux上拨号上网(PPPoE) https://vvl.me/2017/09/30/Linux-PPPoE/IPv6 Over PPPoE https://groups.google.com/forum/#!topic/xidian_linux/p3XW0jJz4Wo
linux ipv6临时地址的更多相关文章
- win7-win10 禁用IPV6临时地址
IPV6临时地址本意是保护设备隐私,但有时候需要暂时禁用的情景下指令 netsh interface ipv6 set privacy state=disable 启用则修改最后的状态值为enable ...
- ipv6临时地址
关闭ipv6临时地址 win+r输入cmd进入后输入代码 netsh interface ipv6 setprivacy state=disable 控制面板中找到网卡禁用后在启用 win+r输入cm ...
- Linux Ipv6地址配置
Step1:启用IPV6网络配置 [root@node-1 ~]# vi /etc/sysconfig/network NETWORKING_IPV6=yes //全局启用ipv6初始化IPV6_ ...
- Linux系统学习 六、网络基础—Linux的IP地址的配置
1.ifconfig命令临时配置IP地址 2.setup工具永久配置IP地址 3.修改网络配置文件 4.图形界面配置IP地址 ifconfig命令临时配置IP地址 主要的作用是查看网络信息,也可以临时 ...
- 有关Linux ipv6模块加载失败的问题
有关Linux ipv6模块加载失败的问题 同事一个SUSE11sp3环境配置ipv6地址失败,提示不支持IPv6,请求帮助,第一反应是应该ipv6相关内核模块没有加载. 主要检查内容: ...
- 【转】IPV6的地址类型
http://blog.sina.com.cn/s/blog_8d795a0f01018hiz.html <IPV6的地址类型>IPV6的地址类型 可分为三大类: 1.单播地址 2.组播地 ...
- Linux ipv6 无状态 设置为 eui64
Linux ipv6 无状态 设置为 eui64 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-08-22. 无状态的ipv6有eui64和stable-privacy模式, 在家 ...
- linux应用程序地址布局,王明学learn
linux应用程序地址布局 在学习Linux应用程序开发时,经常会遇到如下概念:代码段.数据段.BSS段(Block Started by Symbol,又名:未初始化数据段).堆(heap)和栈(s ...
- 解决redhat linux下IP地址可以ping通,域名无法ping通问题
解决redhat linux下IP地址可以ping通,域名无法ping通 在/etc/resolv.conf中添点东西 格式如下: nameserver xxx.xxx.xxx.xxx nameser ...
随机推荐
- codevs 2801 LOL-盖伦的蹲草计划
时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 众所周知,LOL这款伟大的游戏,有个叫盖伦的英雄.他的伟大之处在于他特别喜欢蹲 ...
- C#.NET 大型通用信息化系统集成快速开发平台 4.0 版本 - 组织机构的名称编号是否允许重复?
通常情况下,一个公司内部的部门名称,编号是不可能重复的.但是是在多公司的情况下,很可能有部门名称重复的问题存在,这时需要允许部门名称重复. 例如一个大型IT公司,在2个地区都有研发部或者客户服务部,这 ...
- C#并行编程中的Parallel.Invoke
一.基础知识 并行编程:并行编程是指软件开发的代码,它能在同一时间执行多个计算任务,提高执行效率和性能一种编程方式,属于多线程编程范畴.所以我们在设计过程中一般会将很多任务划分成若干个互相独立子任务, ...
- 微软虚拟学院MVA 字幕获取方法
微软虚拟学院(MVA)上有一些不错的视频教程,但是,蛋疼的一点那就是视频要不就慢,要不就卡,总之当你的思维跟着视频深入的时候,duang~,卡一下,说不定就要重头开始,所幸的是提供了视频下载,下载速度 ...
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- mvc5+ef6+Bootstrap 项目心得--创立之初
1.mvc5+ef6+Bootstrap 项目心得--创立之初 2.mvc5+ef6+Bootstrap 项目心得--身份验证和权限管理 3.mvc5+ef6+Bootstrap 项目心得--WebG ...
- Mininet在创建拓扑的过程中为什么不打印信息了——了解Mininet的log系统
前言 写这篇博客是为了给我的愚蠢和浪费的6个小时买单! 过程原因分析 我用Mininet创建过不少拓扑了,这次创建的拓扑非常简单,如下图,创建拓扑的代码见github.在以前的拓扑创建过程中,我都是用 ...
- jQuery操作单选按钮(radio)用法
1.获取选中值,四种方法都可以: $('input:radio:checked').val():$("input[type='radio']:checked").val(); $( ...
- [poj 3537]Crosses and Crosses(博弈论)
题目:http://poj.org/problem?id=3537 题意:给你n个格子,两个人依次在n个格子的任意空位置画"X",谁如果画了一个后,3个X连在了一起,那么那个人就获 ...
- C语言strcat()函数:连接字符串
头文件:#include <string.h> strcat() 函数用来连接字符串,其原型为: char *strcat(char *dest, const char *src); ...