在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临时地址的更多相关文章

  1. win7-win10 禁用IPV6临时地址

    IPV6临时地址本意是保护设备隐私,但有时候需要暂时禁用的情景下指令 netsh interface ipv6 set privacy state=disable 启用则修改最后的状态值为enable ...

  2. ipv6临时地址

    关闭ipv6临时地址 win+r输入cmd进入后输入代码 netsh interface ipv6 setprivacy state=disable 控制面板中找到网卡禁用后在启用 win+r输入cm ...

  3. Linux Ipv6地址配置

    Step1:启用IPV6网络配置 [root@node-1 ~]# vi /etc/sysconfig/network NETWORKING_IPV6=yes   //全局启用ipv6初始化IPV6_ ...

  4. Linux系统学习 六、网络基础—Linux的IP地址的配置

    1.ifconfig命令临时配置IP地址 2.setup工具永久配置IP地址 3.修改网络配置文件 4.图形界面配置IP地址 ifconfig命令临时配置IP地址 主要的作用是查看网络信息,也可以临时 ...

  5. 有关Linux ipv6模块加载失败的问题

    有关Linux ipv6模块加载失败的问题 同事一个SUSE11sp3环境配置ipv6地址失败,提示不支持IPv6,请求帮助,第一反应是应该ipv6相关内核模块没有加载.     主要检查内容:   ...

  6. 【转】IPV6的地址类型

    http://blog.sina.com.cn/s/blog_8d795a0f01018hiz.html <IPV6的地址类型>IPV6的地址类型 可分为三大类: 1.单播地址 2.组播地 ...

  7. Linux ipv6 无状态 设置为 eui64

    Linux ipv6 无状态 设置为 eui64 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-08-22. 无状态的ipv6有eui64和stable-privacy模式, 在家 ...

  8. linux应用程序地址布局,王明学learn

    linux应用程序地址布局 在学习Linux应用程序开发时,经常会遇到如下概念:代码段.数据段.BSS段(Block Started by Symbol,又名:未初始化数据段).堆(heap)和栈(s ...

  9. 解决redhat linux下IP地址可以ping通,域名无法ping通问题

    解决redhat linux下IP地址可以ping通,域名无法ping通 在/etc/resolv.conf中添点东西 格式如下: nameserver xxx.xxx.xxx.xxx nameser ...

随机推荐

  1. saltstack安装配置(halite)

    saltstack官方提供了一个简单的web UI--halite.但是给出的安装配置方法实在没法实现,在网上找了几篇博客,见文章末尾的参考链接,可以用起来了.但是功能有点简单.这篇文章记录安装配置h ...

  2. Ros学习注意点

    编译问题 回调函数不能有返回类型,严格按照实例程序编写 第三方库的问题,packet.xml里面必须加上自己的依赖文件 之前文档里面介绍的有点问题. 主要表现在:当你建立包的时候就写入了依赖,那就不需 ...

  3. sobel算子

    #1,个人理解 网上查了很多资料,都说sobel算子是用来检测边缘的,分别给了两个方向上的卷积核,然后说明做法,就说这就是sobel算子.对于我个人来说,还有很多不明白的地方,所以理清下思路. #2, ...

  4. nginx学习(1):编译、安装、启动

    一.下载 从官网http://nginx.org/en/download.html 下载稳定版(目前最新稳定版是1.6.2) 二.解压 tar zxf nginx-1.6.2.tar.gzcd ngi ...

  5. 关于printf函数的所思所想

    缘起大一下学期,C语言程序设计徐小青老师的随口一提,经娄嘉鹏老师提醒,我觉得应该自己整理清楚这一问题.涉及网上资料将会标明出处. 关于printf函数的所思所想 * printf的定义 printf( ...

  6. Oracle 常用操作【02】数据库特性

    1. 导出 oracle 注释 -- 表明細+表注释+字段明细+字段注释 a.一个用户下的表明細+表注释+字段明细+字段注释 select ATC.OWNER, atC.TABLE_NAME, utc ...

  7. 代码重构之 —— 一堆if、esle 逻辑的处理

    这几天,接手一个同事的代码,关于微信接口开发的,那一堆的 if,看得哥蛋痛了,这个毛病也是很多新手容易犯的,所以特地把这次重构写出来. 下面来我们看看这个代码的问题所在,if else 里面的代码块逻 ...

  8. 天龙客户端的GameManager

    看天龙的结构,奇怪为什么这么多直接继承了MonoBehaviour,而不是自己实现一套帧频更新呢,两者利弊都在哪? 从顶层来看看GameManager的单件. 管理了当前的载入的场景(ActiveSc ...

  9. [BZOJ3144][HNOI2013]切糕(最小割)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3144 分析:神题不解释 http://www.cnblogs.com/zig-zag/ ...

  10. Android开发之Menu和actionBar

    一.通过Menu目录下创建一个布局文件: 先看代码meu/main.xml: <?xml version="1.0" encoding="utf-8"?& ...