Недавно мы установили сервер на 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.