Назад | Перейти на главную страницу

Debian Wheezy IPv6 не настроен с обработкой post-up ifup

Недавно мы установили сервер на Debian Wheezy Beta 3 (x86_64), который имеет собственное соединение IPv6.

Мы настроили интерфейс eth0 для получения конфигурации IPv6 с помощью некоторых команд post-up hook в /etc/network/interfaces. В результате после загрузки системы на интерфейсе настроен только IPv4 и автоматически настроенный локальный IPv6-адрес канала, как будто команда никогда не выполнялась.

Когда мы дополнительно размещаем команды после вызова ifup -a внутри /etc/init.d/networking init, все работает так, как ожидалось, и после загрузки у нас есть полностью настроенный интерфейс.

Это довольно уродливый способ настройки интерфейса. Что мы делаем не так с крючками ifup post-up? Или это ошибка?

Обновить: Еще один факт: я использую SSH-сервер Dropbear, чтобы я мог разблокировать мою зашифрованную корневую файловую систему LUKS. Поэтому ядру Linux предоставляется IP-адрес через загрузчик GRUB. Это может означать, что настройка IPv6 не выполнена, потому что eth0 уже запущен. Затем я попытался поставить ifdown eth0 перед ifup -a в скрипте /etc/init.d/networking. Это ничего не изменило. Вот пример того, как это выглядело:

ifdown eth0
if ifup -a $exclusions $verbose && ifup_hotplug $exclusions $verbose

Обновить: Я настроил небольшой скрипт в качестве обработчика post-up, который настраивает интерфейс и записывает вывод в файл журнала. В результате файл журнала никогда не записывался, а это означает, что обработчик post-up вообще не был вызван.

Раздел из /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

У меня была такая же проблема, что конфигурация IPv6 не удалась, когда я передал ip параметр ядра. Проблема в том, что сетевые сценарии пытаются добавить IP-адрес к интерфейсу eth0, который уже существует. Конечно, это не удастся, и дальнейшая настройка будет остановлена.

Самым простым решением было просто удалить часть IPv4 из /etc/network/interfaces поскольку он уже настроен через ip параметр в любом случае:

auto eth0
iface eth0 inet6 static
        address 2001:db8:100:3022::2
        netmask 64
        gateway fe80::1

в 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 поддерживает объявление всего этого (по крайней мере, ipv4) под eth0 вместо eth0: 0 ... и т. д., но это не сработало .. и хотя я объявил eth0: 0 и т. д. для ipv6, все они появились под eth0 тогда как они определенно не работали, когда были объявлены как eth0.