我的一台服务器 (Ubuntu 12.04) 有 /64 个 IPv6 地址可用。我像这样绑定它们:
auto eth0
iface eth0 inet static
address xxx.xxx.xxx.82
netmask 255.255.255.248
network xxx.xxx.xxx.80
broadcast xxx.xxx.xxx.255
gateway xxx.xxx.xxx.81
iface eth0 inet6 static
address xxxx::2
netmask 64
gateway xxxx::1
pre-up echo 0 > /proc/sys/net/ipv6/conf/eth0/autoconf
pre-up echo 0 > /proc/sys/net/ipv6/conf/eth0/accept_ra
pre-up echo 0 > /proc/sys/net/ipv6/conf/eth0/accept_ra_defrtr
pre-up echo 0 > /proc/sys/net/ipv6/conf/eth0/accept_ra_pinfo
pre-up echo 0 > /proc/sys/net/ipv6/conf/eth0/accept_ra_rtr_pref
up /sbin/ifconfig eth0 inet6 add xxxx::3/64
# ... snip ...
up /sbin/ifconfig eth0 inet6 add xxxx::25/64
这有效,但xxxx::25
除非另有明确说明,否则所有应用程序都会使用 来处理其传出请求。如果我添加xxxx::26
我的/etc/network/interfaces
,它们都会开始使用它。似乎它们只是使用最高数字。
如何指定某个地址作为默认地址?就我而言,我恰好想使用最低地址 ( xxxx::2
),但如果将来有需要,我真的很想知道如何指定特定地址。
答案1
您可以通过修改默认路由来解决这个问题。Linux 中的每个路由都有指定默认源地址的选项。如果您在路由中指定 xxxx::3 地址,则默认情况下将使用该地址:
/sbin/ip -6 route del default
/sbin/ip -6 route add default via xxxx::1 src xxxx::3
如果你显示路由表,你会看到结果:
/sbin/ip -6 route
default via xxxx::1 dev eth0 src xxxx::222 metric 1024
需要注意的一点是,在执行重复地址检测之前,IPv6 地址处于暂定状态。Linux 将拒绝使用暂定地址作为默认源地址。这意味着您可能需要在sleep
添加此路由之前添加一个简短的地址,以便地址有时间脱离暂定状态并变得可用。