我们最近在具有原生 IPv6 连接的 Debian Wheezy Beta 3 (x86_64) 上建立了一个服务器。
我们配置了 eth0 接口,通过 中的一些启动后挂钩命令获取 IPv6 配置/etc/network/interfaces
。结果是,在启动系统后,接口上只配置了 IPv4 和自动配置的链路本地 IPv6 地址,就好像该命令从未执行过一样。
ifup -a
当我们在 init 脚本中的调用之后额外放置命令时/etc/init.d/networking
,一切都按预期工作,并且在启动后我们有一个完全配置的界面。
这是一种相当丑陋的配置接口的方式。我们在 ifup 后置挂钩方面做错了什么?或者这是一个错误?
更新:另一个事实是,我正在使用 Dropbear SSH 服务器来解锁我的 LUKS 加密根文件系统。因此,Linux 内核通过 GRUB 引导加载程序获得一个 IP 地址。这可能意味着 IPv6 配置尚未完成,因为 eth0 已经启动。然后我尝试在 /etc/init.d/networking 脚本中添加一行ifdown eth0
。ifup -a
它没有改变任何东西。下面是它的示例:
ifdown eth0
if ifup -a $exclusions $verbose && ifup_hotplug $exclusions $verbose
更新:我设置了一个小脚本作为后置钩子,用于配置接口并将输出写入日志文件。结果是日志文件从未写入,这意味着后置钩子根本没有被调用。
该部分/etc/network/interfaces
如下所示(IP 地址已更改):
allow-hotplug eth0
iface eth0 inet static
address 1.2.3.1
netmask 255.255.255.192
network 1.2.3.0
broadcast 1.2.3.63
gateway 1.2.3.62
dns-nameservers 8.8.8.8
dns-search mydomain.tld
post-up ip -6 addr add 2001:db8:100:3022::2 dev eth0
post-up ip -6 route add fe80::1 dev eth0
post-up ip -6 route add default via fe80::1 dev eth0
我也尝试过这种替代方法:
auto eth0
iface eth0 inet static
address 1.2.3.1
netmask 255.255.255.192
network 1.2.3.0
broadcast 1.2.3.63
gateway 1.2.3.62
dns-nameservers 8.8.8.8
dns-search mydomain.tld
iface eth0 inet6 static
address 2001:db8:100:3022::2
netmask 64
gateway fe80::1
我们添加了/etc/init.d/networking
:
…
case "$1" in
start)
process_options
check_ifstate
if [ "$CONFIGURE_INTERFACES" = no ]
then
log_action_msg "Not configuring network interfaces, see /etc/default/networking"
exit 0
fi
set -f
exclusions=$(process_exclusions)
log_action_begin_msg "Configuring network interfaces"
if ifup -a $exclusions $verbose && ifup_hotplug $exclusions $verbose
then
# Our additions
ip -6 addr add 2001:db8:100:3022::2 dev eth0
ip -6 route add fe80::1 dev eth0
ip -6 route add default via fe80::1 dev eth0
log_action_end_msg $?
else
log_action_end_msg $?
fi
;;
…
更新ip -6 address show eth0
:启动后的输出为:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 fe80::abcd:abcd:abcd:abc/64 scope link
valid_lft forever preferred_lft forever
答案1
我遇到了同样的问题,当我将参数传递ip
给内核时,IPv6 配置会失败。问题是网络脚本试图将 IP 地址添加到已经存在的 eth0 接口。这当然会失败,因此进一步的配置将停止。
最简单的解决方案就是删除 IPv4 部分,/etc/network/interfaces
因为它已经通过ip
参数配置了:
auto eth0
iface eth0 inet6 static
address 2001:db8:100:3022::2
netmask 64
gateway fe80::1
答案2
在 debian wheezy 中,我不得不做一些愚蠢的事情才能让它工作。抱歉,格式不对,我真的不明白这个网站的布局,而且已经很晚了。
auto lo
iface lo inet loopback
allow-hotplug eth0
auto eth0 eth0:0 eth0:1 eth0:2
iface eth0 inet static
address 66.xxx.xxx.101
netmask 255.255.255.0
gateway 66.xxx.xxx.1
iface eth0:0 inet static
address 173.xxx.xxx.6
netmask 255.255.255.0
iface eth0:1 inet static
address 192.xxx.xxx.180
netmask 255.255.xxx.0
iface eth0 inet6 static
address fe80::xxxx:xxxx:xxxx:f48e
netmask 64
gateway fe80::1
iface eth0:0 inet6 static
address 2600:xxx::f03c:xxx:xxx:f48e
netmask 64
iface eth0:1 inet6 static
address 2600:xxx:xxx:007a::1
netmask 64
iface eth0:2 inet6 static
address 2600:xxx:xxx:007a::2
netmask 64
其结果如下:
eth0 Link encap:Ethernet HWaddr bogus:mac
inet addr:66.xxx.xxx.101 Bcast:66.xxx.xxx.255 Mask:255.255.255.0
inet6 addr: 2600:xxx::f03c:xxx:xxx:f48e/64 Scope:Global
inet6 addr: fe80::f03c:91ff:feae:f48e/64 Scope:Link
inet6 addr: 2600:xxx:xxx:7a::2/64 Scope:Global
inet6 addr: 2600:xxx:xxx:7a::1/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:37908 errors:0 dropped:0 overruns:0 frame:0
TX packets:30834 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3201392 (3.0 MiB) TX bytes:3735827 (3.5 MiB)
eth0:0 Link encap:Ethernet HWaddr bogus:mac
inet addr:173.xxx.xxx.6 Bcast:173.xxx.xxx.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth0:1 Link encap:Ethernet HWaddr bogus:mac
inet addr:192.xxx.xxx.180 Bcast:192.xxx.xxx.255 Mask:255.255.xxx.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
iproute2 应该支持在 eth0 而不是 eth0:0...etc 下声明所有这些(至少是 ipv4),但这不起作用..即使我为 ipv6 声明了 eth0:0 等,它们都出现在 eth0 下,而当专门声明为 eth0 时它们肯定不起作用。