我认为这个问题涉及可配置的默认地址选择算法之间的交互,该算法由RFC-3484以及由以下定义的临时地址RFC-4941,尽管解决方案可能需要第三种功能。我的环境是 Linux(Ubuntu 12.04 上的内核版本 3.2.0),带有 iproute2 实用程序(版本 ss111117)。
如何配置我的计算机以使用常规的非隐私增强地址连接到同一前缀下的其他节点,但使用临时地址连接到该前缀之外的节点?
例如,假设我的计算机是fuzzy
,文件服务器是bunny
。我想访问 IPv6 互联网上的某个网站 。nosey.example.com
以下是 上分配的地址fuzzy
:
neirbowj@fuzzy:~$ ip -6 addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 2001:db8:d00d:babe:6d3b:96d0:f584:beb3/64 scope global temporary dynamic
valid_lft 599342sec preferred_lft 80342sec
inet6 2001:db8:d00d:babe:22fc:11ff:fe53:b2e7/64 scope global dynamic
valid_lft 2591986sec preferred_lft 604786sec
inet6 fe80::22fc:11ff:fe53:b2e7/64 scope link
valid_lft forever preferred_lft forever
bunny
在相同前缀上具有静态配置的地址。
neirbowj@fuzzy:~$ grep bunny /etc/hosts
2001:db8:d00d:babe::1 bunny
nosey.example.com
不在此前缀上。
neirbowj@fuzzy:~$ host -t aaaa nosey.example.com
nosey.example.com has IPv6 address 2001:db8:b00b:1e5::1
地址标签fuzzy
已设置为其默认值。
neirbowj@fuzzy:~$ ip addrlabel
prefix ::1/128 label 0
prefix ::/96 label 3
prefix ::ffff:0.0.0.0/96 label 4
prefix 2001::/32 label 6
prefix 2001:10::/28 label 7
prefix 2002::/16 label 2
prefix fc00::/7 label 5
prefix ::/0 label 1
当我连接到时bunny
,我想使用2001:db8:d00d:babe:22fc:11ff:fe53:b2e7
,因为它是不是标记为“ temporary
”。当我连接到时nosey.example.com
,我想使用,2001:db8:d00d:babe:6d3b:96d0:f584:beb3
因为它是标记为“ temporary
”。这可能吗?如果可以,怎么办?
我已经读过了Linux 中的 IPv6 源地址选择如何工作,但我看不出任何规则会如何影响这个选择,甚至不temporary
知道标志如何通知地址选择。
我之所以认为我应该能够做到这一点是因为这段摘录。
RFC-4941
Section 3.1 Assumptions
[...]
Finally, this document assumes that when a node initiates outgoing
communication, temporary addresses can be given preference over
public addresses when the device is configured to do so.
[ADDR_SELECT] mandates implementations to provide a mechanism, which
allows an application to configure its preference for temporary
addresses over public addresses. It also allows for an
implementation to prefer temporary addresses by default, so that the
connections initiated by the node can use temporary addresses without
requiring application-specific enablement. This document also
assumes that an API will exist that allows individual applications to
indicate whether they prefer to use temporary or public addresses and
override the system defaults.
答案1
这看起来像是一个奇怪的地方,但在 Linux 中,您可以在路由表中执行此操作。
假设您的路由表当前如下所示:
# ip -6 route
2001:db8:d00d:babe::/64 dev eth0 proto kernel metric 256
default via 2001:db8:d00d:babe::1 dev eth0 metric 1024
您可以指定覆盖源地址的路由。在这种情况下,您可以执行以下操作:
# ip -6 route add 2001:db8:d00d:babe::/64 \
dev eth0 \
src 2001:db8:d00d:babe:22fc:11ff:fe53:b2e7 \
metric 128
由于此路由的度量低于当前路由(度量为 256),因此它将覆盖当前路由。当您现在连接到bunny
地址时,2001:db8:d00d:babe::1
此路由将匹配并使用配置的源地址。
如果您还想对其他子网使用特定的源地址,也可以为其创建路由。例如:
# ip -6 route add 2001:db8:d00d::/48 \
via 2001:db8:d00d:babe::1 \
dev eth0 \
src 2001:db8:d00d:babe:22fc:11ff:fe53:b2e7 \
metric 128