Linux

IPv6 僅在 ping 預設網關後有效。

  • February 11, 2017

我們現在有 2013 年,我認為在我的伺服器上啟動 IPv6 早就應該了。但不幸的是,我遇到了一些問題。老實說,我在 IPv6 方面只有很少的經驗所以我希望你能幫助我解決我的“小”問題。

一個小評論:以下地址被混淆了,這不是我在我的配置中使用的;)

我正在執行 Debian 擠壓機(Debian 2.6.32-46),我從我的提供商那裡獲得了 /64 IPv6 塊:2a01:4f8:a0:aaaa::/64

所以我更改了**/etc/network/interfaces**文件如下(這也是我的提供商推薦的方式):

# Loopback device:
auto lo
iface lo inet loopback

# device: eth0
auto  eth0
iface eth0 inet static
 address   85.10.xxx.zz
 broadcast 85.10.xxx.yy
 netmask   255.255.255.224
 gateway   85.10.xxx.1


iface eth0 inet6 static
 # Main IPv6 Address of the server
 address 2a01:4f8:a0:aaaa::2
 netmask 64
 gateway fe80::1


auto eth0:1
iface eth0:1 inet static
       address 85.10.xxxx.uu
       netmask 255.255.255.224

# default route to access subnet
up route add -net 85.10.xxx.0 netmask 255.255.255.224 gw 85.10.xxx.1 eth0

重新啟動後(我很懶,不想使用routeor添加所有內容ip)我的eth0界面如下所示:

eth0      < first line removed >  
         inet addr:85.10.xxx.zz  Bcast:85.10.xxx.yy  Mask:255.255.255.224
         inet6 addr: 2a01:4f8:a0:aaaa::2/64 Scope:Global
         inet6 addr: fe80::bbbb:cccc:dddd:eeee/64 Scope:Link <--- from MAC address
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:24133 errors:0 dropped:0 overruns:0 frame:0
         TX packets:21712 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:3464246 (3.3 MiB)  TX bytes:5776451 (5.5 MiB)
         Interrupt:25 Base address:0x2000 

路線ip -6 route如下所示:

2a01:4f8:a0:aaaa::/64 dev eth0  metric 1024  mtu 1500 advmss 1440 hoplimit 4294967295
fe80::/64 dev eth0  proto kernel  metric 256  mtu 1500 advmss 1440 hoplimit 4294967295
fe80::/64 dev vboxnet0  proto kernel  metric 256  mtu 1500 advmss 1440 hoplimit 4294967295
default via fe80::1 dev eth0  metric 1024  mtu 1500 advmss 1440 hoplimit 4294967295

現在,我的問題是我的 IPv6 不能正常工作。如果我嘗試 ping IPv6 地址,例如 ping6 ipv6.google.com。我得到:“目的地無法到達:地址無法到達”

看起來像這樣tcpdump -i eth0 ip6

00:29:05.386500 IP6 2a01:4f8:a0:aaaa::2 > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has fe80::1, length 32
00:29:05.390869 IP6 2a01:4f8:a0:bbbb::1 > 2a01:4f8:a0:aaaa::2: ICMP6, neighbor advertisement, tgt is fe80::1, length 32

2a01:4f8:a0:bbbb::1是順便說一句。列為我的網關(在我的提供商的線上管理控制台上)。

我認為,這一切的原因是缺少 NDP 條目/缺少fe80::1的 MAC 地址。因為ip -6 neigh給了我:

fe80::1 dev eth0  router FAILED 

我是這麼認為的,因為如果我這樣做:我會得到一個正確的回顯回復和我的fe80::1ping6 -I eth0 fe80::1地址所需的 mac 地址以及一個完美執行的 IPv6 堆棧:

$ip -6 neigh
fe80::1 dev eth0 lladdr ll:mm:nn:oo:pp:qq router REACHABLE

這也是來自的轉儲tcpdump -i eth0 ip6

00:30:37.555702 IP6 fe80::bbbb:cccc:dddd:eeee > fe80::1: ICMP6, echo request, seq 1, length 64
00:30:37.560219 IP6 fe80::1 > fe80::bbbb:cccc:dddd:eeee: ICMP6, echo reply, seq 1, length 64

(同樣:fe80::bbbb:cccc:dddd:eeee是我的連結本地地址,源自 MAC 地址)

從現在開始,我可以使用 IPv6:我可以 ping6 網站,我可以使用 IPv6 連接到服務,甚至可以使用 IPv6 通過 ssh 連接到我的伺服器。

那麼,我在這裡做錯了什麼?我花了很多時間試圖找出如何“解決”這個問題。我敢打賭它可以使用兩個命令來解決。順便說一句,這是我第一次在伺服器上處理 IPv6。所以請原諒我的經驗不足。順便提一句。我還嘗試更改一些 sysctl net.ipv6.* 標誌,但沒有成功。如果解決方案有必要,我也可以在這裡發布我的配置。

每個提示都非常受歡迎!

非常感謝您!

幾週後,我今天再次嘗試了整個問題。我能說什麼,我修好了。有人可以解釋一下為什麼添加 ipv6 環回解決了我的問題嗎?這是我添加到**/etc/network/interfaces**文件中的內容:

iface lo inet6 loopback

我不知道為什麼我一開始就忘了添加它!^^ 謝謝大家的回复!

我正在查看您所說的部分問題:

現在,我的問題是我的 IPv6 不能正常工作。如果我嘗試 ping IPv6 地址,例如 ping6 ipv6.google.com。我得到:“目的地無法到達:地址無法到達”

在 tcpdump -i eth0 ip6 中看起來像這樣:

00:29:05.386500 IP6 2a01:4f8:a0:aaaa::2 > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has fe80::1, length 32 00:29:05.390869 IP6
2a01:4f8:a0:bbbb::1 > 2a01:4f8:a0:aaaa::2: ICMP6, neighbor advertisement, tgt is fe80::1, length 32

這很奇怪。您的系統發送正確的(據我從您的 tcpdump 中看到的)鄰居請求,路由器發送回正確的(同樣是 AFAICT)鄰居通告。這表明您的本地電腦上存在問題。

你在那台機器上做任何防火牆嗎?ICMPv6 過濾與 ICMP 過濾有很大不同。IPv6 通信的更多部分需要正常工作的 ICMPv6。如果您過濾太多或以錯誤的方式過濾,您會遇到與您現在看到的完全一樣的問題。

如果您想了解更多詳細資訊,請查看RFC 4890

引用自:https://serverfault.com/questions/477471