IPv6


1. IPv6 Day
2. IPv6 deployment
3. 與IPv4比較
	3.1 IPv6編碼
	3.2 IPv6格式
	3.3 IPv4映射地址
	3.4 IPv6新增了區域ID
	3.5 IPv6的省略書寫
	3.6 IPv6地址的分類
	3.7 特殊地址
4. 鄰居發現
5. 無狀態自動配置(SLAAC)
	5.1 對於Linux客戶端
	5.2 對於網關
6 Privacy extensions 隱私擴展
	6.1 dhcpcd
	6.2 NetworkManager
	6.3 systemd-networkd
	6.4. ConnMan
7. Stable private addresses 穩定的私人地址
8. Static address 靜態地址
9. IPv6和PPPoE
a 前綴委派(DHCPv6-PD)
	a.1 使用dhcpcd
	a.2 systemd-networkd
	a.3. 其他客戶端
b Disable 禁用 IPv6
	b.1 禁用功能
	b.2 其他程序
		b.2.1 dhcpcd
		b.2.2 NetworkManager
		b.2.3 ntpd
		b.2.4 GnuPG
		b.2.5 sshd
	b.3. systemd-networkd
c 在IPv6上優先使用IPv4

 

https://zh.wikipedia.org/wiki/IPv6
網際協議第6版(英語:Internet Protocol version 6,縮寫:IPv6)是網際協議的最新版本,用作互聯網的協議。用它來取代IPv4主要是為了解決IPv4地址枯竭問題,同時它也在其他方面對於IPv4有許多改進。

1. IPv6 Day

如今, 全球上網人數已超40億,IPv4僅能提供約42.9億個IP位置。NAT網絡地址轉換, CIDR無類別域間路由等技術延緩網絡位置匱乏之現象。
為求解決根本問題...
1990年開始, 
互聯網工程工作小組開始規划IPv4的下一代協議,
1994年提議, 各IPng領域的代表們於多倫多舉辦的IETF會議中,正式提議IPv6發展計划,該提議直到同年的11月17日才被認可。
1996年8月10日, 1994年的提議發展成為IETF的草案標准
1998年公布, 12月由互聯網工程工作小組以互聯網標准規范(RFC 2460)的方式正式公布IPv6
...
2011年6月8日, 世界IPv6日(英語:World IPv6 Day)是在2011年6月8日由互聯網協會組織和贊助的,一次公開測試IPv6的活動。
2012年6月6日, 世界IPv6啟動日. 在2011年的活動大獲成功之后,互聯網協會將2012年6月6日定為了世界IPv6啟動日,在這一天,全球IPv6網絡已正式啟動。

2. IPv6 deployment

https://en.wikipedia.org/wiki/IPv6_deployment
https://zh.wikipedia.org/wiki/IPv6部署
Google的統計數據顯示,截至2021年4月,根據用戶的星期幾(周末更大),其用戶的IPv6可用性約為30.30–35.10%。下表是摘錄了部分有數據的國家使用IPv6的比例. 

測試本地是否支持IPv6, 蘇州的移動寬帶去年測試還不通, 今天測了一下通了. 
http://test-ipv6.com/

3. 與IPv4比較

https://zh.wikipedia.org/wiki/IPv6
在Internet上,數據以分組的形式傳輸。IPv6定義了一種新的分組格式,目的是為了最小化路由器處理的消息標頭。
由於IPv4消息和IPv6消息標頭有很大不同,因此這兩種協議無法互操作。但是在大多數情況下,IPv6僅僅是對IPv4的一種保守擴展。
除了嵌入了互聯網地址的那些應用協議(如FTP和NTPv3,新地址格式可能會與當前協議的語法沖突)以外,大多數傳輸層和應用層協議幾乎不怎么需要修改就可以在IPv6上運行。

3.1 IPv6編碼

IPv6具有比IPv4大得多的編碼地址空間。這是因為IPv6采用128位的地址, 地址空間支持21 28。而IPv4使用的是32位(總地址約億40個)。
就以地球人口70億人計算,每人平均可分得約4.86×10 28(486117667×10 20)個IPv6地址。
RFC 2373和RFC 2374定義的IPv6地址有128位長;IPv6地址的表達形式一般采用32個十六進制數。
在很多場合,IPv6地址由兩個邏輯部分組成:一個64位的網絡前綴和一個64位的主機地址,主機地址通常根據物理地址自動生成,叫做EUI-64(或者64-位擴展唯一標識)。

3.2 IPv6格式

  • IPv4二進制是32位. 以8位位一組, 分為4組以點號"."隔開. 4組*8位=32位。通常使用: 點分十進制. 4組十進制數字用點隔開. 
  • IPv6二進制128位. 以16位為一組,分為8組以冒號":"隔開. 8組*16位=128位. 通常使用: 每組以4位十六進制方式表示。
例如:2001:0db8:86a3:08d3:1319:8a2e:0370:7344 是一個合法的IPv6地址。
類似於IPv4的點分十進制,同樣也存在點分十六進制的寫法,將8組4位十六進制地址的冒號去除后,每位以點號“.”分組,例如:2001:0db8:85a3:08d3:1319:8a2e:0370:7344則記為2.0.0.1.0.d.b.8.8.5.a.3.0.8.d.3.1.3.1.9.8.a.2.e.0.3.7.0.7.3.4.4,其倒序寫法用於ip6.arpa子域名記錄IPv6地址與域名的映射。

3.3 IPv4映射地址

如果這個地址實際上是IPv4的地址,后32位可以用10進制數表示;因此::ffff:192.168.89.9 相等於::ffff:c0a8:5909。
::ffff:1.2.3.4 格式叫做IPv4映射地址。
IPv4位址可以很容易的轉化為IPv6格式。舉例來說,如果IPv4的一個地址為135.75.43.52(十六進制為0x874B2B34),它可以被轉化為0000:0000:0000:0000:0000:FFFF:874B:2B34 或者::FFFF:874B:2B34。同時,還可以使用混合符號(IPv4-compatible address),則地址可以為::ffff:135.75.43.52。

3.4 IPv6新增了區域ID

由於同一非全局地址可能在同一范圍的多個區域中使用(例如,在兩條獨立的物理鏈路中使用鏈路本地地址 fe80::1),而且一個節點可能連接到同一范圍的不同區域的接口(例如,一個路由器通常有多個接口連接到不同的鏈路)。
IPv6新增了區域ID(Zone ID)加以區分,或稱作用域ID(Scope ID)。作用域ID僅用於本地鏈接,使用百分號追加在地址后面。
其內容特定於操作系統,例如Windows使用數字 fe80::2%3 ,Linux使用網卡名字 fe80::2%eth0 。
在URI中使用時,百分號需要進行編碼,例如 fe80::a%en1 應顯示為 http://[fe80::a%25en1] 。

3.5 IPv6的省略書寫

每組數字前導0可以省略,省略后前導數字仍是0則繼續,例如下組IPv6是等價的。
2001:0db8:02de:0000:0000:0000:0000:0e13
2001:db8:2de:0000:0000:0000:0000:e13
2001:db8:2de:000:000:000:000:e13
2001:db8:2de:00:00:00:00:e13
2001:db8:2de:0:0:0:0:e13
可以用雙冒號“::”表示一組0或多組連續的0,但只能出現一次:
2001:db8:2de:0:0:0:0:e13
2001:db8:2de::e13

3.6 IPv6地址的分類

IPv6地址可分為三種: 
單播(unicast)地址
單播地址標示一個網絡接口。協議會把送往地址的數據包送往給其接口。IPv6的單播地址可以有一個代表特殊地址名字的范疇,如鏈路本地地址(link local address)和唯一區域地址(ULA,unique local address)。單播地址包括可聚類的全球單播地址、鏈路本地地址等。
任播(anycast)地址
任播像是Unicast(單點傳播)與Broadcast(多點廣播)的綜合。單點廣播在來源和目的地間直接進行通信;多點廣播存在於單一來源和多個目的地進行通信。
而Anycast則在以上兩者之間,它像多點廣播(Broadcast)一樣,會有一組接收節點的地址列表,但指定為Anycast的數據包,只會發送給距離最近或發送成本最低(根據路由表來判斷)的其中一個接收地址,當該接收地址收到數據包並進行回應,且加入后續的傳輸。該接收列表的其他節點,會知道某個節點地址已經回應了,它們就不再加入后續的傳輸作業。
So, 以目前的應用為例,Anycast地址只能分配給中間設備(如路由器、三層交換機等),不能分配給終端設備(手機、電腦等),而且不能作為發送端的地址。
多播(multicast)地址
多播地址也稱組播地址。多播地址也被指定到一群不同的接口,送到多播地址的數據包會被發送到所有的地址。多播地址由皆為一的字節起始,亦即:它們的前置為FF00::/8。其第二個字節的最后四個比特用以標明"范疇"。
一般有node-local(0x1)、link-local(0x2)、site-local(0x5)、organization-local(0x8)和global(0xE)。多播地址中的最低112位會組成多播組群標識符,不過因為傳統方法是從MAC地址產生,故只有組群標識符中的最低32位有使用。定義過的組群標識符有用於所有節點的多播地址0x1和用於所有路由器的0x2。
另一個多播組群的地址為"solicited-node多播地址",是由前置FF02::1:FF00:0/104和剩余的組群標識符(最低24位)所組成。這些地址允許經由鄰居發現協議(NDP,Neighbor Discovery Protocol)來解譯鏈接層地址,因而不用干擾到在區網內的所有節點。

3.7 特殊地址

https://zh.wikipedia.org/wiki/IPv6#特殊位址
IANA維護官方的IPv6地址空間列表。全局的單播地址的分配可在各個區域互聯網注冊管理機構或 GRH DFP 頁面找到。
https://www.iana.org/numbers
IPv6中有些地址是有特殊含義的: 
- 未指定地址
::/128-所有比特皆為零的地址稱作未指定地址。這個地址不可指定給某個網絡接口,並且只有在主機尚未知道其來源IP時,才會用於軟件中。路由器不可轉送包含未指定地址的數據包。
- 鏈路本地地址
::1/128-是一種單播繞回地址。如果一個應用程序將數據包送到此地址,IPv6堆棧會轉送這些數據包繞回到同樣的虛擬接口(相當於IPv4中的127.0.0.1/8)。
fe80::/10-這些鏈路本地地址指明,這些地址只在區域連線中是合法的,這有點類似於IPv4中的169.254.0.0/16。
- 唯一區域地址
fc00::/7-唯一區域地址(ULA,unique local address)只可用於本地通信,類似於IPv4的專用網絡地址10.0.0.0/8、172.16.0.0/12和192.168.0.0/16。這定義在RFC 4193中,是用來取代站點本地位域。這地址包含一個40比特的偽隨機數,以減少當網站合並或數據包誤傳到網絡時碰撞的風險。這些地址除了只能用於區域外,還具備全局性的范疇,這點違反了唯一區域位域所取代的站點本地地址的定義。
- 多播地址
ff00::/8-這個前置表明定義在"IP Version 6 Addressing Architecture"(RFC 4291)中的多播地址[12]。其中,有些地址已用於指定特殊協議,如ff0X::101對應所有區域的NTP服務器(RFC 2375)。
- 請求節點多播地址(Solicited-node multicast address)
ff02::1:FFXX:XXXX-XX:XXXX為相對應的單播或任播地址中的三個最低的字節。
- IPv4轉譯地址
::ffff:x.x.x.x/96-用於IPv4映射地址。(參見以下的轉換機制)。
https://zh.wikipedia.org/wiki/IPv6#轉換機制
2001::/32-用於Teredo隧道。
2002::/16-用於6to4。
- ORCHID
2001:10::/28-ORCHID (Overlay Routable Cryptographic Hash Identifiers)(RFC 4843)。這些是不可遶送的IPv6地址,用於加密散列識別。
- 文件
2001:db8::/32-這前置用於文件(RFC 3849)。這些地址應用於IPV6地址的示例中,或描述網絡架構。
- 遭舍棄或刪除的用法
::/96-這個前置曾用於IPv4兼容地址,現已刪除。
fec0::/10-這個站點本地前置指明這地址只在組織內合法。它已在2004年9月的RFC3879中舍棄,並且新系統不應該支持這類型的地址。

4. 鄰居發現

對多播地址執行ping操作會ff02::1導致所有本地主機在鏈接本地范圍內做出響應。必須指定一個接口:
$ ping ff02::1%eth0
之后,您可以使用以下命令獲取本地網絡中所有鄰居的列表:
$ ip -6 neigh
注: 若啟用了ip6tables的簡單防火牆, ping命令只能看到自己, 看不到局域網內其他啟用了簡單防火牆的用戶, 但ping之后再執行: ip -6 neigh 還是能找到鄰居. 
通過ping多播地址,ff02::2只有路由器會響應。
如果添加選項,則本地鏈接主機將使用其全局鏈接作用域地址進行響應。在這種情況下,可以省略該接口: -I your-global-ipv6
$ ping -I 2001:4f8:fff6::21 ff02::1

5. 無狀態自動配置(SLAAC)

在網絡准備好的情況下,獲取IPv6地址最簡單的方法是通過“無狀態地址自動配置”(SLAAC)。地址會自動由路由器給出的前綴推算出,不需要其他配置,也不需要DHCP客戶端。
在不適合使用IPv6無狀態地址自動配置的場景下,網絡可以使用有狀態配置(DHCPv6),或者使用靜態方法手動配置。

5.1 對於Linux客戶端

如果你使用netctl管理網絡,那么只需要在網絡配置中加入下面這一行:
IP6=stateless
如果使用NetworkManager,它會自動檢測網絡情況並配置好IPv6.
注意: 只有IPv6 icmp數據包可以經過網絡傳輸時,SLAAC才可以正常工作。所以在要配置IPv6的計算機上,必須允許ipv6-icmp數據包進入。如果你使用Simple stateful firewall或iptables,只需要加入:
-A INPUT -p ipv6-icmp -j ACCEPT

5.2 對於網關

網關需要運行一個守護進程,以確保能夠將IPv6地址分發給客戶端。一般使用radvd(official repositories)。配置radvd很簡單。修改/etc/radvd.conf,加入如下配置:
# replace LAN with your LAN facing interface
interface LAN {
  AdvSendAdvert on;
  MinRtrAdvInterval 3;
  MaxRtrAdvInterval 10;
  prefix ::/64 {
    AdvOnLink on;
    AdvAutonomous on;
    AdvRouterAddr on;
  };
};

這些配置可以要求客戶端由64位的網絡前綴自動推算並配置地址。請注意這些配置允許使用分配到局域網的所有可用的前綴。如果你不打算使用::/64,需要限制允許使用的前綴,可以注明前綴,例如2001:DB8::/64。prefix選項可以重復使用多次,分別記錄不同的前綴。
要將DNS服務器通告給您的LAN客戶端,您可以使用RDNSS功能。例如,添加以下行/etc/radvd.conf以播發Google的DNS v6服務器:
RDNSS 2001:4860:4860::8888 2001:4860:4860::8844 {
};

網關必須在所有的方向上允許ipv6-icmp數據包。如果你使用Simple stateful firewall或iptables,需要加入如下規則:
 -A INPUT -p ipv6-icmp -j ACCEPT
 -A OUTPUT -p ipv6-icmp -j ACCEPT
 -A FORWARD -p ipv6-icmp -j ACCEPT
使用其他防火牆也需要類似的規則。配置完成后可以開啟radvd.service。

6. Privacy extensions 隱私擴展

當一個客戶端使用SLAAC配置其IPv6時,它會使用網絡前綴和網卡的MAC地址構造地址。
這會引起安全問題:計算機的MAC地址可以輕松通過其IPv6地址推算出。
為了解決這個問題,提出了“IPv6隱私擴展”標准(RFC 4941)。
使用這個隱私擴展,內核會從原本的IPv6地址計算生成一個“臨時地址”。在連接遠程服務器時,系統會優先選擇這個地址以隱藏原來的地址。要啟用隱私拓展,可以按照如下步驟:
向/etc/sysctl.d/40-ipv6.conf加入如下內容:
# Enable IPv6 Privacy Extensions
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2
net.ipv6.conf.nic0.use_tempaddr = 2
...
net.ipv6.conf.nicN.use_tempaddr = 2

其中,nic0到nicN是你的網卡。您可以使用“網絡配置#列出網絡接口”中的說明找到它們的名稱。
https://wiki.archlinux.org/title/Network_configuration#Listing_network_interfaces
all.use_tempaddr或default.use_tempaddr參數不會對已經配置好的網卡起作用。
重啟之后,隱私擴展將會啟用。

6.1 dhcpcd

https://wiki.archlinux.org/title/Dhcpcd
dhcpcd從6.4.0版本起就在其默認配置文件中添加了選項slaac private,實現對隱私擴展的支持,可以實現"Stable Private IPv6 Addresses instead of hardware based ones",符合RFC 7217 。(commit)。因此,沒有必要修改任何配置,除非你想經常更換地址,而不是在每次連接上新網絡時。

6.2 NetworkManager

https://wiki.archlinux.org/title/NetworkManager#Configuration
可以通過NetworkManager.conf(5)或連接配置文件中的ipv6.ip6-privacy設置來控制NetworkManager中IPv6隱私擴展的使用。
如果未設置全局或每個連接,則NetworkManager將回退為 /proc/sys/net/ipv6/conf/default/use_tempaddr
要在默認情況下顯式啟用IPv6隱私擴展,請將這些行添加到NetworkManager.conf(5):
/etc/NetworkManager/conf.d/ip6-privacy.conf
[connection]
ipv6.ip6-privacy=2
應用配置,然后重新連接到所有活動的連接。
要控制IPv6隱私擴展在單個NetworkManager管理的連接中的使用,請在中編輯所需的連接密鑰文件/etc/NetworkManager/system-connections/,並將[ipv6]密鑰/值對附加到其部分ip6-privacy=2:
/etc/NetworkManager/system-connections/your-ssid.nmconnection
...
[ipv6]
method=auto
ip6-privacy=2
...
重新加載連接,然后再重新連接。
注:雖然它看起來可能scope global temporary通過啟用隱私擴展永遠不會被更新(它永遠不會轉移到創建IPv6地址deprecated的狀態在其任期valid_lft),它是在一個較長的時間周期,以驗證該地址的確確改變。

6.3 systemd-networkd

https://wiki.archlinux.org/title/Systemd-networkd
Systemd-networkd也不遵守/etc/sysctl.d/40-ipv6.conf里的net.ipv6.conf.xxx.use_tempaddr配置,需要在配置中設置IPv6PrivacyExtensions選項。除非使用.network文件中的值設kernel置選項IPv6PrivacyExtensions
IPv6隱私擴展的其他選項如下:
net.ipv6.conf.xxx.temp_prefered_lft
net.ipv6.conf.xxx.temp_valid_lft
注意: temp_prefered_lft是變量名,首選必須拼寫錯誤。
有關詳細信息,請參見systemd- networkd和systemd.network(5)。

6.4 ConnMan

https://wiki.archlinux.org/title/ConnMan
設置在服務文件中,即: /var/lib/connman/service/settings
IPv6.privacy=preferred

7. Stable private addresses 穩定的私人地址

另一種選擇是穩定的私有IP地址(RFC 7217)。這允許IP在網絡內保持穩定,而不會暴露接口的MAC地址。
為了使內核生成密鑰(wlan0例如,對於),我們可以設置:
$ sudo sysctl net.ipv6.conf.wlan0.addr_gen_mode=3
打開和關閉接口,運行后,您應該stable-privacy在每個IPv6地址旁邊看到ip addr show dev wlan0。內核已經生成了一個128位密鑰來為該接口生成ip地址,以使其運行sysctl net.ipv6.conf.wlan0.stable_secret。我們將保留此值,因此將以下行添加到/etc/sysctl.d/40-ipv6.conf:
# Enable IPv6 stable privacy mode
net.ipv6.conf.wlan0.stable_secret = <output from previous command>
net.ipv6.conf.wlan0.addr_gen_mode = 2
注意: 如果您使用dhcpcd獲取IPv6地址,則該stable-privacy標志不會被分配給該IP地址。

另外: NetworkManager不接受上述設置,但是NetworkManager默認情況下使用穩定的專用地址。
$ sudo cat /etc/NetworkManager/system-connections/ssid.nmconnection 
[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto

8. Static address 靜態地址

有些情況下使用靜態地址可以增強安全性。使用SLAAC分配動態地址時,你的計算機的地址會由其網卡MAC推算出,這不利於安全,因為即使地址的網絡號改變,你的電腦依然可以被追蹤到。
要想用netctl分配一個靜態地址,可以參照/etc/netctl/examples/ethernet-static。如下的部分尤其重要:
...
# For IPv6 static address configuration
IP6=static
Address6=('1234:5678:9abc:def::1/64' '1234:3456::123/96')
Routes6=('abcd::1234')
Gateway6='1234:0:123::abcd'
注意: 如果你只有IPv6連接,那么你要給出IPv6的DNS服務器,例如:
DNS=('6666:6666::1' '6666:6666::2')
如果您的提供商沒有給您提供IPv6 DNS,並且您沒有自己運行,則可以從resolv.conf文章中進行選擇。
https://wiki.archlinux.org/title/Resolv.conf

9. IPv6和PPPoE

PPPoE的軟件包pppd提供了對PPPoE之上的IPv6的支持(前提是你的ISP和調制解調器支持)。只需要將如下內容加入/etc/ppp/options
+ipv6
如果你使用netctl,那么就向你的netctl配置文件加入如下內容:
PPPoEIP6=yes

a. 前綴委派(DHCPv6-PD)

注意: 這個部分是針對自行使用配置網關的內容,不是客戶端。如果你使用從市場購得的路由器,請查閱其附帶的文檔以開啟地址委派。
地址委派是一種常見的IPv6部署方式,被許多ISP所采用。具體的做法是將一個地址前綴分配給用戶(局域網),即路由器配置為將不同的前綴分配給不同的子網;ISP通過DHCPv6將地址前綴(通常是/56或/64)分發出去,DHCP客戶端再將前綴分配給局域網。對於一個擁有兩個網卡的簡單網關來說,它的工作就是將從WAN口(或虛擬接口,比如ppp)獲取的前綴分配給局域網。
DHCPv6要求客戶端在端口546 UDP上接收傳入連接。對於基於nftables的防火牆,可以在輸入鏈中用一行配置/etc/nftables.conf:
table inet filter {
  chain input {
    udp dport dhcpv6-client accept
    ...
  }
...
}

a.1 使用dhcpcd

Dhcpcd在IPv4之外也提供了一個完整的支持DHCPv6-PD的客戶端。如果你使用dhcpcd,需要修改/etc/dhcpcd.conf。你可能已經在用dhcpcd來配置IPv4,所以只需要對現有的配置進行小幅修改: 
duid
noipv6rs
waitip 6
# Uncomment this line if you are running dhcpcd for IPv6 only.
#ipv6only
# use the interface connected to WAN
interface WAN
ipv6rs
iaid 1
# use the interface connected to your LAN
ia_pd 1 LAN
#ia_pd 1/::/64 LAN/0/64
此配置客戶端會從WAN接口獲取一個前綴,分配給LAN接口。如果ISP分配的是/64的地址,則需要使用第二個ia_pd instruction。這也會禁用除WAN接口之外的所有路由器請求。
提示:另請閱讀dhcpcd(8)和dhcpcd.conf(5)。

a.2 systemd-networkd

配置上游(WAN)和下游(LAN)接口。這將在運行DHCPv6客戶端的接口上啟用DHCPv6-PD。委托前綴由IPv6路由器在下游網絡上分發。
/etc/systemd/network/wan.network
[Network]
# Use 'yes' instead of 'ipv6' for both ipv4 and ipv6.
DHCP=ipv6
/etc/systemd/network/lan.network
[Network]
IPv6SendRA=yes
DHCPv6PrefixDelegation=yes

a.3 其他客戶端

dhclient也可以請求前綴,但是必須使用dhclient退出腳本將該前綴或該前綴的一部分分配給接口。例如: 
https://github.com/jaymzh/v6-gw-scripts/blob/master/dhclient-ipv6

b. Disable 禁用 IPv6

注意: Arch內核直接內置了IPv6支持,因此不能將模塊列入黑名單。

b.1 禁用功能

  • 添加ipv6.disable=1到內核​​行會禁用整個IPv6堆棧,如果遇到問題,這可能就是您想要的。有關更多信息,請參見內核參數。https://wiki.archlinux.org/title/Kernel_parameters
  • 或者,添加ipv6.disable_ipv6=1將保持IPv6堆棧正常運行,但不會將IPv6地址分配給您的任何網絡設備。
  • 通過將以下sysctl配置添加到/etc/sysctl.d/40-ipv6.conf,可以避免系統將IPv6地址分配給特定的網絡接口:
# Disable IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.nic0.disable_ipv6 = 1
...
net.ipv6.conf.nicN.disable_ipv6 = 1
重新啟動systemd-sysctl.service單元以應用配置更改。
注意你必須在這里清楚地列出所有不需要分配IPv6地址的網卡,僅僅設置all.disable_ipv6並不會立刻對已經連接的網卡起作用。

注意:如果通過sysctl禁用IPv6,則應注釋掉/etc/hosts中的IPv6主機。否則,可能會出現一些連接錯誤,因為主機已解析為無法訪問的IPv6地址。
#<ip-address> <hostname.domain.org> <hostname>
127.0.0.1 localhost.localdomain localhost
#::1 localhost.localdomain localhost

b.2 其他程序

在內核中關閉IPv6功能不會阻止應用程序嘗試使用IPv6。多數情況下,這樣不會有問題,但如果你發現程序無法正常運行,你應該查閱該應用程序的手冊頁,以找到關閉IPv6的合適方法。

b.2.1 dhcpcd

dhcpcd會嘗試發送IPv6路由器請求。要禁用這種行為,可以依照其手冊頁dhcpcd.conf (5),向/etc/dhcpcd.conf加入如下內容: 
noipv6rs
noipv6

b.2.2 NetworkManager

要在NetworkManager中禁用IPv6,請右鍵單擊網絡狀態圖標,然后選擇: 
“編輯連接”>“有線”>“網絡名稱” >“編輯”>“ IPv6設置”>“方法”>“忽略/禁用”
Edit Connections > Wired > Network name > Edit > IPv6 Settings > Method > Ignore/Disabled

然后點擊“保存”。

在命令行終端下,關閉IPv6支持可以使用nmcli:
$ sudo nmcli connection edit connection0
其中,connection0是要修改的網絡名稱。nmcli運行后進入其命令行,輸入如下命令:
nmcli> set ipv6.method ignore 
連接到該網絡時,NetworkManager不會再配置該網絡的IPv6地址。

b.2.3 ntpd

依照Systemd#Drop-in files,修改ntpd.service的啟動方式:
$ sudo systemctl edit ntpd.service
這樣會產生一個drop-in snippet,替代原有的ntpd.service來加載ntpd。參數-4關閉了ntpd的IPv6支持。向drop-in snippet中加入如下內容:
[Service]
ExecStart=
ExecStart=/usr/bin/ntpd -4 -g -u ntp:ntp
第一行清除了之前的ExecStart配置,接下來的一行將該配置設置為帶有-4參數的ntpd。

b.2.4 GnuPG

在dirmngr的配置文件中禁用IPv6 :
~/.gnupg/dirmngr.conf
disable-ipv6
並重新啟動用戶服務 dirmngr.service。

b.2.5 sshd

通過將以下內容添加到來確保sshd使用的是ipv4 sshd_config:
/etc/ssh/ssh_config
AddressFamily inet
並重新啟動sshd.service。

b.3 systemd-networkd

networkd支持在每個接口上禁用IPv6。當網絡單元的[Network]部分具有LinkLocalAddressing=ipv4或LinkLocalAddressing=no時,networkd不會嘗試在匹配的接口上配置IPv6。
但是請注意,即使未使用上述選項,如果未全局禁用IPv6,networkd仍將期望接收路由器通告。如果接口未接收到IPv6流量(例如,由於sysctl或ip6tables設置),它將保持配置狀態,並可能導致等待網絡完全配置的服務超時。為避免這種情況,IPv6AcceptRA=no還應該在[Network]中設置該選項。

c. 在IPv6上優先使用IPv4

在配置文件中/etc/gai.conf 取消注釋以下行:
#
#    For sites which prefer IPv4 connections change the last line to
#
precedence ::ffff:0:0/96  100


免責聲明!

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



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