Debian Wheezy IPv6 未配置 ifup 启动后挂钩

Debian Wheezy IPv6 未配置 ifup 启动后挂钩

我们最近在具有原生 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 eth0ifup -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 时它们肯定不起作用。

相关内容