▪ 本文緣由
▪ 困擾1. ipv4和ipv6只有位址格式不同嗎
▪ 困擾2. ipv4到ipv6對應用程式是透明無感知的嗎
▪ 困擾3. 提供web服務,需要每台伺服器都配置ipv6位址嗎
▪ 困擾4. ipv4和ipv6要配在同一張網絡卡上嗎
▪ 困擾5. 我的網絡卡有fe80開頭的位址,可以用來上公網嗎
▪ 困擾6. ipv6位址如何配置
▪ 困擾7. 沒有了arp,如何解析mac位址
▪ 困擾8. ipv6使用多播替代廣播,需要做哪些改造
▪ 困擾9. ipv6真的安全嗎
▪ 困擾10. 如何學習ipv6
▪ 後續說明
▷ 掌握ipv6的必要性
▷ ipv6的3個常見顧慮
▷ ipv6基礎知識
▷ 常用測試方法
而在進一步的實踐學習中,會遇到很多的困擾。筆者結合自己以及身邊的同行兄弟們遇到的困擾,精心挑選出10個困擾在本文中進行解答。
如果沒有閱讀過《ipv6系列-入門指南》,敬請勞神垂閱,以便知識的連貫。
除了位址格式不同,ipv4與ipv6協議棧也不同,他們在邏輯上是完全不同的2個世界
以下實踐中經常會遇到的4個不同之處:
▷基本通訊過程:nd替代arp、多播替代廣播、fe80位址成為標配、icmp成為通訊核心
▷ip配置方式:客戶端以無狀態自動配置ip成為主流,弱化dhcp
▷dns網域名稱解析:aaaa記錄替代ipv4的a記錄、對應用存在優先順序問題(優先解析aaaa還是a)
▷應用層適應性:socket程式設計中af_inet僅支援ipv4,af_inet6僅支援ipv6
錯,是有感知的,上層應用程式需要進行改造。
舉個例子,當訪問fzxiaomange.com時候,是要優先解析ipv6位址(aaaa)還是ipv4位址(a),因為總得選一條線路來傳送請求。現在許多框架會優先選擇ipv6。
還有乙個典型的例子,是程式會在應用層裡互動底層ip位址,比如ftp主動模式會在應用層裡互動ipv4位址,而如果實際可用的是ipv6位址,就可能導致後續連線的異常。
無法做到透明無感知,是導致產生ipv4到ipv6的部分過渡方案的原因之一。
現在有一種言論,說「ipv6位址無限多,每台伺服器都可以配乙個ip位址,不用做nat」。
這很容易誤導人,具體如何使用ipv6,還得根據場景而定。比如筆者的個人部落格fzxiaomange.com,由nginx->php->mysql組成,分別位於3臺伺服器上,那只需要在nginx上配置ipv6位址,並在dns上新增一條aaaa記錄指向l7的ipv6位址即可。完全沒必要在php、mysql伺服器上配置ipv6位址,而且一旦配置了,就直接暴露內網了。
每個裝置都配置ipv6,主要適用於偏客戶端以及位址需求量大的場景,諸如物聯網裝置、手機4g、家庭寬頻等。
另外,ipv6有nat,適用於辦公pc、機房伺服器等需要訪問ipv6網路,而不想被別人主動訪問的場景。
都可以,首先需要先了解2個詞「單棧」和「雙棧」:
以節點為角度(通用的解釋):
▷ 單棧:表示乙個ipv6節點,也就是一台伺服器,或一部手機,僅有ipv6位址,或僅有ipv4位址,前者叫做「ipv6單棧」或「ipv6-only」,後者叫「ipv4單棧」或「ipv4-only」。
▷ 雙棧:表示乙個ipv6節點,同時擁有ipv6位址和ipv4位址
以網絡卡為角度:
ipv4和ipv6在邏輯上是兩個完全不相交的世界。如果終端處位於同乙個物理層,比如同乙個vlan,那麼網絡卡就只能同時配置ipv6位址和ipv4位址;反之,就必須一張網絡卡配置ipv6,另一張網絡卡配置ipv4。所以,關鍵看網路架構是如何設計,各有利弊。比如放同一張網絡卡上,就可以做到頻寬共享,而放不同網絡卡,可以做到頻寬分別限制與計費。
當網絡卡啟動的時候,會自動生成「鏈路本地位址」(link-local address),這是乙個fe80::/10的單播位址。「鏈路本地位址」用於ip自動配置、鄰居發現等。
注意事項:
公網位址和私網位址
細心的人可能會發現,為什麼這裡叫做「全球單播位址」,而「唯一本地位址」卻不叫做「唯一本地單播位址」,好吧,其實都是簡稱,在rfc裡是這麼定義的:「global unicast addresses」、「link-local ipv6 unicast addresses」。其實「全球單播位址」是可以叫做「全球位址」的,只是這樣顯得有點彆扭。
自動生成還是固定ip
自動配置ip
在ipv6裡還分為2種方法:「有狀態」與「無狀態」
▷ 有狀態(stateful):位址由dhcpv6 server統一管理,dhcpv6 client從中獲得乙個可用的ip位址
▷ 無狀態(stateless,簡稱slaac):路由器發出「路由通告」報文(router advertisement,簡稱ra),報文內包含了ipv6位址的字首資訊。當收到ra包後,就會根據其中字首資訊,自動生成乙個或多個ip位址
arp協議是ipv4用於解析目標mac位址的協議,而在ipv6裡,解析位址採用的是鄰居發現(neighbor discovery protocol,簡稱ndp或nd)
▷鄰居請求報文ns(neighbor solicitation):請求解析
▷鄰居通告報文na(neighbor advertisement):響應解析
這與ping是非常類似的:
ipv6使用多播替代了廣播,多播的特點是不會像廣播那樣完全泛洪,而是資料報只傳送給加入了多播組的機器。
但是,這有個前提,就是交換機要能識別並維護多播組的資訊,主流交換機都具備此功能,然而並不都是預設開啟的。對於二層交換機來說,需要開啟mldv2 snooping。
顧名思義,就是交換機會識別「mldv2成員報告」報文從哪個埠發來的,並記錄下來,之後當交換機收到多播包後,會先查詢其多播位址是否能在快取裡匹配上
▷ 匹配成功:僅會將資料報從相應的埠發出
▷ 匹配失敗:就會泛洪,此時和廣播毫無差異
理想很美好,ipv6從設計之初,就進行了大量的安全方面的設計,「完整的」ipv6在安全方面有至少以下3個優勢:
▷ 原生支援的端到端加密
▷ 安全的鄰居發現(secure neighbor discovery,簡稱send)
▷ 更大的位址空間
現實很殘酷,只有第3點發揮了作用,更大的位址空間,減少了被非法掃瞄到的概率。而第1、2點並沒真正普及起來,因為協議本身就很複雜、學習難度很大、實現起來也很不容易。因此ietf為了加速ipv6的普及,對安全性不再強制要求。這也導致了ipv6實際上並沒有預期中的那麼安全,在ipv4裡存在的位址欺騙、虛假閘道器等情況,在ipv6裡依然存在。
關於IPv6的10個誤解
1.ipv6 還不能用於生產環境 ipv6 已經開發了20年了,最初的工作是在1992年展開的,叫做 ip next generation 在1998年被標準化為 ipv6。在2008年在網際網路上部署,並且2008年的奧運會伺服器就支援 ipv6。在2011年6月8日,幾個大型 開始測試啟用 ip...
關於IPv6的10個誤解
1.ipv6 還不能用於生產環境 ipv6 已經開發了20年了,最初的工作是在1992年展開的,叫做 ip next generation 在1998年被標準化為 ipv6。在2008年在網際網路上部署,並且2008年的奧運會伺服器就支援 ipv6。在2011年6月8日,幾個大型 開始測試啟用 ip...
10 個對初學者有用的 GIT 教程
git是用於 linux 核心開發的版本控制工具。與常用的版本控制工具cvs subversion等不同,它採用了分布式版本庫的方式,不必伺服器端軟體支援,使源 的發布和交流極其方便。git的速度很快,這對於諸如linux kernel這樣的大專案來說自然很重要。git最為出色的是它的合併跟蹤 me...