起因:想要通过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 -6 addr show ppp0 #显示出指定接口的ipv6 ip -6 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有固定的生命周期。
这确实是不错的做法,现在的疑问就是这些临时ip的生成和使用机制是什么以及我现在为什么不能用它来上网?(偷个懒,日后查明原因)
当务之急是把临时ip给取消掉,本来获取到的ip就是动态的,也无需这么注重隐私,况且现在大多数服务器都是用静态ip啊。
原来ubuntu的多个版本都是如下:
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 参考链接: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-linuxhttps://asininetech.com/2014/04/17/ubuntu-14-04-server-and-ipv6-temporary-addresses/http://ipv6int.net/systems/linux-ipv6.html#privacy
时间: 2024-10-11 00:17:03