我可以或者如何在主机 A 的环回接口上添加自定义 IPv6 地址并从主机 B 对其执行 ping 操作?
我尝试添加类似这样的内容::ffff:5:4:3:2
,但是ip -6 route
说,这个目的地是unreachable
with ,但我可以从主机 A ping 它。例如,error 101
当我在 上设置此地址时,路由是可达的,但从主机 B 仍然“无法 ping 通”tap0
我不明白环回允许哪些地址、为什么我的自定义无法访问、为什么我可以从主机 A ping 它、如何启用route_localnet
IPv6 rp_filter
。
操作系统:ArchLinux,内核 4.10。
我知道 IPv4 的方法,但 IPv6 的工作方式完全(或不是?)不同。
答案1
是的。正如您可以使用 IPv4 执行此操作一样,这称为路由。您必须告诉一台主机如何到达另一台主机。
假设我们有两个主机,A 和 B。
::1
主机 A在环回接口上有其默认环回地址以及您的自定义地址。 (在我的示例中,自定义地址将为fd56:dcaa:2099::1
。我从唯一本地地址中选择了该地址。您应该使用 ULA 地址用于此类目的。)
主机A还有一个以太网接口,暂且称之为eth0
。在 IPv6 中,它将有一个 IPv6 链路本地地址。它可能有其他 IPv6 地址。您可以通过运行找到这些ip -6 addr eth0
。这是我的系统中的一个示例:
$ ip -6 addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 2601:404:ce00:adc0:9d6c:9e16:a9a9:b03b/64 scope global temporary dynamic
valid_lft 593594sec preferred_lft 74600sec
inet6 2601:404:ce00:adc0:bc87:129a:ed5d:814/64 scope global temporary deprecated dynamic
valid_lft 78769sec preferred_lft 0sec
inet6 2601:404:ce00:adc0:1453:3734:6742:4500/64 scope global mngtmpaddr noprefixroute dynamic
valid_lft 2591820sec preferred_lft 604620sec
inet6 fe80::5520:a68f:5416:a68c/64 scope link
valid_lft forever preferred_lft forever
该列表中有四个不同的地址(您可能有更多)。出于我们的目的,您需要在其后显示“范围链接”。在我的系统上(在我的示例中也是如此),那就是fe80::5520:a68f:5416:a68c
.
在主机B上,我们也有一个接口eth0
。为了允许主机 B 到达主机 A 的特殊环回地址,主机 B 需要知道在哪里可以找到它。您可以通过向主机 B 的路由表添加一个条目来做到这一点:
# ip route add fd56:dcaa:2099::1 via fe80::5520:a68f:5416:a68c dev eth0
我们正在做的是告诉主机 B 的内核它可以到达fd56:dcaa:2099::1
(主机 A 在其环回接口上的特殊地址)fe80::5520:a68f:5416:a68c
(主机 A 在其接口上的链路本地地址eth0
),但主机 B 需要尝试fe80::5520:a68f:5416:a68c
从主机B的 eth0
界面。 (这就是链路本地地址的棘手之处。地址本身仅在给定网段的上下文中才有意义。请研究 OSI 网络模型以获取更多详细信息。)
一旦主机 B 的路由表中有该条目,您应该能够从主机 B ping 主机 A 的自定义地址,因为主机 B 现在知道使用主机 A 的链路本地地址作为路由器来到达该地址。
答案2
因为环回地址和接口是在单个主机中的。不适用于与其他设备通信。