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 -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有固定的生命周期。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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM