無法從主介面 (eth0) 通過 IPv6 ping 虛擬分路網路介面
我無法通過 ipv6與我的虛擬 Tap 設備通信。基本上
ping6 -I eth0 <tap interface link-local ipv6 address>
不返回任何東西。我什至無法 ping 到水龍頭的面向主機的端點:[user ~]$ ping6 -I eth0 fe80::88a2:f6ff:fe6f:90cb PING fe80::88a2:f6ff:fe6f:90cb(fe80::88a2:f6ff:fe6f:90cb) from fe80::4f3:9ff:fec9:2032%eth0 eth0: 56 data bytes ^C --- fe80::88a2:f6ff:fe6f:90cb ping statistics --- 8 packets transmitted, 0 received, 100% packet loss, time 7162ms
以及來自 eth0 的 tcpdump 輸出:
20:54:00.658849 IP6 (flowlabel 0x1efcb, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::4f3:9ff:fec9:2032 > fe80::88a2:f6ff:fe6f:90cb: [icmp6 sum ok] ICMP6, echo request, seq 1 20:54:01.673920 IP6 (flowlabel 0x1efcb, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::4f3:9ff:fec9:2032 > fe80::88a2:f6ff:fe6f:90cb: [icmp6 sum ok] ICMP6, echo request, seq 2 20:54:02.698029 IP6 (flowlabel 0x1efcb, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::4f3:9ff:fec9:2032 > fe80::88a2:f6ff:fe6f:90cb: [icmp6 sum ok] ICMP6, echo request, seq 3 20:54:03.722004 IP6 (flowlabel 0x1efcb, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::4f3:9ff:fec9:2032 > fe80::88a2:f6ff:fe6f:90cb: [icmp6 sum ok] ICMP6, echo request, seq 4 20:54:04.745974 IP6 (flowlabel 0x1efcb, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::4f3:9ff:fec9:2032 > fe80::88a2:f6ff:fe6f:90cb: [icmp6 sum ok] ICMP6, echo request, seq 5
正如預期的錯誤,來自分接設備介面的 tcpdump 為空。我能夠從自身 ping eth0。我無法
eth0
從帶有錯誤的 Tap 界面ping 通connect: Network is unreachable
。但是,我認為這是一個單獨的問題,因為 tcpdump 表明 ping 甚至沒有首先到達分接設備。這是我的網路設置
[user ~]$ ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001 inet 172.30.255.7 netmask 255.255.255.240 broadcast 172.30.255.15 inet6 2600:1f14:XXXX:XXXX:e134:ff0c:cccd:b262 prefixlen 128 scopeid 0x0<global> inet6 fe80::4f3:9ff:fec9:2032 prefixlen 64 scopeid 0x20<link> ether 06:f3:09:c9:20:32 txqueuelen 1000 (Ethernet) [user ~]$ ifconfig tp-0ge-0000gf-0 tp-0ge-0000gf-0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 169.254.18.114 netmask 255.255.255.252 broadcast 0.0.0.0 inet6 fe80::88a2:f6ff:fe6f:90cb prefixlen 64 scopeid 0x20<link> ether 8a:a2:f6:6f:90:cb txqueuelen 1000 (Ethernet)
和目前路線:
[user ~]$ ip -6 r s 2600:1f14:XXXX:XXXX:XXXX:ff0c:cccd:b262 dev eth0 proto kernel metric 256 expires 439sec pref medium fe80::4f3:9ff:fec9:2032 dev eth0 metric 1024 pref medium fe80::88a2:f6ff:fe6f:90cb dev tp-0ge-0000gf-0 metric 1024 pref medium default via fe80::460:a1ff:fec3:9cb6 dev eth0 metric 1024 pref medium
和 ip6tables 過濾表讓一切都通過
[user ~]$ sudo ip6tables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
我
net.ipv6.conf.[inteface].forwarding
在 tap 和 eth0 上都啟用了,並且顯然啟用了 ipv6。如果想到任何其他重要的核心參數,我會在此處添加它們。這是在亞馬遜 linux 2 上,
cat /etc/os-release
:NAME="Amazon Linux" VERSION="2" ID="amzn" ID_LIKE="centos rhel fedora" VERSION_ID="2" PRETTY_NAME="Amazon Linux 2"
讓我知道是否還有其他我應該包含的資訊。任何建議都非常感謝。
作為介紹,你應該習慣從不使用
ifconfig
,即使它幾乎無法處理 IPv6。與您使用 的方式相同ip -6 route show
,只是始終使用ip address show
(andip link show
)。ifconfig
您將避免由於現在已過時的命令的限制(在 Linux 上)而導致的問題(因為使用了已棄用的核心 API)。我可以看到您可能需要資訊的三個點。
- IPv6 鏈路本地地址還要求介面是完整地址
由於在連接到 IPv6 介面的每個網路中都允許存在相同的鏈路本地地址,因此必須指定地址的介面以具有完整的鏈路層地址。它在RFC 4007中指定:
這些字元串的一個可能候選者是介面名稱,因為介面可以唯一地消除任何範圍的歧義。
對於您的系統,這些是完全指定的連結本地地址:
fe80::4f3:9ff:fec9:2032%eth0 fe80::88a2:f6ff:fe6f:90cb%tp-0ge-0000gf-0
- 本地地址屬於主機
因此
lo
,如果允許這樣的路由,則通過它們之間的(環回)介面進行路由。不要嘗試ping -I eth0
它會強制數據包在eth0
沒有任何東西可以接收的地方通過電線發送。所以ping
可行的是:ping fe80::88a2:f6ff:fe6f:90cb%tp-0ge-0000gf-0
並且是本地的,預設情況下系統將選擇相同的來源。可能不允許從連接到介面的一個本地連結本地地址 ping 到連接到另一個介面的另一個地址(但從任何介面上的一個全域地址到任何(甚至其他)介面上的本地連結地址,或者在同一界面上的第二個本地也可以)。所以這會失敗:
ping -I fe80::4f3:9ff:fec9:2032%eth0 fe80::88a2:f6ff:fe6f:90cb%tp-0ge-0000gf-0
但這會起作用:
ping -I 2600:1f14:XXXX:XXXX:e134:ff0c:cccd:b262 fe80::88a2:f6ff:fe6f:90cb%tp-0ge-0000gf-0
請注意,這並不能說明您的 TAP 介面正在工作:您正在從自身 ping 本地系統,而根本沒有使用 TAP 介面。
- TUN/TAP 介面的重要部分不是其上可見的本地地址
對於 TUN/TAP 介面,重要的是附加在該介面後面的*執行程序,該介面應該接收幀或數據包並處理(或隧道)它們。*在您的教程中,這是在第 6 步執行的過程:
STEP#6 KVM qemu command to startup Guest using tap0 device
它使用此選項:
-net tap,script=no,ifname=tap0,vlan=0
附加到tap0
之前設置的介面。這就是 TUN/TAP 介面的全部意義:將系統的網路連接到一個程序。由於介面
tp-0ge-0000gf-0
自動分配了連結本地地址,這意味著存在或曾經有這樣一個正在執行的程序附加到tp-0ge-0000gf-0
. 如果您正在使用ip link show tp-0ge-0000gf-0
,或者您可以通過(此處轉換為附加過程)而不是(未附加ip address show tp-0ge-0000gf-0
過程)來確認這一點。不會顯示此類資訊。例如,這樣的過程可以是QEMU。中繼/隧道應用程序(具有 tun 或 tap 隧道模式)甚至工具都有附加選項(但例如僅用於中繼:它不包括內置網路堆棧)。LOWER_UP``NO-CARRIER``ifconfig``openvpn``ssh``socat``socat
如果它被配置為處理(或隧道)IPv6,那麼它在其(不可見的)一側分配一個連結本地地址,可能還有一個全域地址。
您應該能夠通過 ping鏈路本地所有節點地址目標來發現(該)遠端鏈路本地 IPv6 地址,仍然指定介面:
ping ff02::1%tp-0ge-0000gf-0
要在那裡發現路由器(如果有的話),可以 ping 鏈路本地所有路由器地址:
ping ff02::2%tp-0ge-0000gf-0