Нет трафика IPv6 в режиме моста
Привет счастливые люди о /~
вчера у меня была смелость перезагрузить удаленный сервер Linux. Эта установка Ubuntu 64, 12.04 прошла путь от ядра 3.11.0-19-generic до 3.13.0-32-generic, а также от возможности обмениваться данными как по IPv4, так и по IPv6 до возможности только принимать и отправлять трафик IPv4.
### Hetzner's default network, modified to fit a bridge
# Loopback device:
auto lo
iface lo inet loopback
# device: eth0
auto virbr1
iface virbr1 inet static
address 5.9.87.134
broadcast 5.9.87.159
netmask 255.255.255.224
gateway 5.9.87.129
bridge_ports eth0
bridge_stp on
bridge_maxwait 0
# Set-up IPv6 and Hetzner routes
# guarantee idempotency:
pre-up ip addr del 2a01:4f8:162:11c5::2/64 dev virbr1 || true
up ip addr add 2a01:4f8:162:11c5::2/64 dev virbr1
# default route to access subnet
# idempotency here is easier, because we have 'replace'
up ip route replace to 5.9.87.128/255.255.255.224 via 5.9.87.129 dev virbr1
# add Hetzner IPv6 route
up ip route replace default via fe80::1 dev virbr1
Результат выглядит следующим образом:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr1 state UP qlen 1000
link/ether c8:60:00:df:06:35 brd ff:ff:ff:ff:ff:ff
inet6 fe80::ca60:ff:fedf:635/64 scope link
valid_lft forever preferred_lft forever
3: virbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether c8:60:00:df:06:35 brd ff:ff:ff:ff:ff:ff
inet 5.9.87.134/27 brd 5.9.87.159 scope global virbr1
valid_lft forever preferred_lft forever
inet6 2a01:4f8:162:11c5::2/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::ca60:ff:fedf:635/64 scope link
valid_lft forever preferred_lft forever
4: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 52:54:00:65:05:b0 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
inet6 2a01:4f8:162:11c5::10:1/112 scope global
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe65:5b0/64 scope link
valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master virbr0 state DOWN qlen 500
link/ether 52:54:00:65:05:b0 brd ff:ff:ff:ff:ff:ff
6: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr0 state UNKNOWN qlen 500
link/ether fe:54:00:dc:99:21 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fedc:9921/64 scope link
valid_lft forever preferred_lft forever
маршрутизации:
igalic@steak ~ % ip r
default via 5.9.87.129 dev virbr1 metric 100
5.9.87.128/27 via 5.9.87.129 dev virbr1
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
igalic@steak ~ % ip -6 r
2a01:4f8:162:11c5::10:0/112 dev virbr0 proto kernel metric 256
2a01:4f8:162:11c5::/64 dev virbr1 proto kernel metric 256
fe80::/64 dev eth0 proto kernel metric 256
fe80::/64 dev vnet0 proto kernel metric 256
fe80::/64 dev vnet1 proto kernel metric 256
fe80::/64 dev vnet2 proto kernel metric 256
fe80::/64 dev vnet3 proto kernel metric 256
fe80::/64 dev vnet4 proto kernel metric 256
fe80::/64 dev vnet5 proto kernel metric 256
fe80::/64 dev vnet6 proto kernel metric 256
fe80::/64 dev vnet7 proto kernel metric 256
fe80::/64 dev vnet8 proto kernel metric 256
fe80::/64 dev virbr0 proto kernel metric 256
fe80::/64 dev vnet9 proto kernel metric 256
fe80::/64 dev vnet10 proto kernel metric 256
fe80::/64 dev virbr1 proto kernel metric 256
default via fe80::1 dev virbr1 metric 1024
igalic@steak ~ %
сократить для краткости, потому что на сервере много виртуальных машин. Он может отлично взаимодействовать с этими виртуальными машинами, как по IPv4, так и по IPv6. С IPv4 он может нормально взаимодействовать с миром, как и его виртуальные машины.
Давайте остановимся здесь и рассмотрим вопрос, часто задаваемый в ## сети и комментарии здесь:
Почему ваш дизайн такой странный?
я использую virbr1
в качестве внешнего моста для адресов IPv4. По необходимости дизайна сети Хетцнера или их рекомендации я должен привязать к ней основной IPv6-адрес.
см. http://wiki.hetzner.de/index.php/Zusaetzliche_IP-Adressen (примечание: эта рекомендация по разделению /64 не существует в английской версии того же документа: http://wiki.hetzner.de/index.php/Zusaetzliche_IP-Adressen/en)
Но я использую только IPv6-адреса для внутренней связи, то есть я использую его только для соединения служб между моими серверами, которым не нужен контакт с внешним миром: марионетка, базы данных и т. Д. Я не могу использовать здесь адреса ULA для одного и того же Причина, по которой я не мог просто придерживаться IPv4: серверы, которые должны взаимодействовать друг с другом, не находятся в одном DC, частные IPv4 или ULA были бы бесполезны.
Мне также нужен IPv4 для этих внутренних ссылок: я использую их для обеспечения. Хетцнер не допустит, чтобы PXE не контролировался ими, поэтому мне приходится работать на установочном сервере для каждого сервера. (Вы когда-нибудь пробовали preseeding через VPN? PXEbooting через IPv6? Вот почему)
После этого короткого перерыва, давайте вернемся к...
IPv6: ничего не работает
Хост не может общаться с внешним миром через IPv6. Внешний мир не может общаться с хостом через IPv6. Хост может подключаться к своим виртуальным машинам через IPv6. Виртуальные машины могут подключаться к хосту через IPv6. Но виртуальные машины не могут соединиться друг с другом.
igalic@steak ~ % ping6 google.com -c5
PING google.com(fra07s30-in-x08.1e100.net) 56 data bytes
From steak icmp_seq=1 Destination unreachable: Address unreachable
From steak icmp_seq=2 Destination unreachable: Address unreachable
From steak icmp_seq=3 Destination unreachable: Address unreachable
From steak icmp_seq=4 Destination unreachable: Address unreachable
From steak icmp_seq=5 Destination unreachable: Address unreachable
--- google.com ping statistics ---
5 packets transmitted, 0 received, +5 errors, 100% packet loss, time 4024ms
1 igalic@steak ~ %
У меня есть второй сервер с точной настройкой, которая работает. вот пинг от бекона (работает) до стейка (не работает):
igalic@bacon ~ % ping6 a01:4f:16:c5::2 -c5
PING 2a01:4f8:162:11c5::2(a01:4f:16:c5::2) 56 data bytes
--- a01:4f:16:c5::2 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4032ms
1 igalic@bacon ~ %
и tcpdump того, что происходит, когда я делаю это:
igalic@steak ~ % sudo tcpdump -vi any icmp6
[sudo] password for igalic:
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
10:17:31.712316 IP6 (hlim 59, next-header ICMPv6 (58) payload length: 64) 2a01:4f8:150:5024::2 > steak: [icmp6 sum ok] ICMP6, echo request, seq 1
10:17:31.712316 IP6 (hlim 59, next-header ICMPv6 (58) payload length: 64) 2a01:4f8:150:5024::2 > steak: [icmp6 sum ok] ICMP6, echo request, seq 1
10:17:31.712429 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 32) steak > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): c8:60:00:df:06:35
10:17:32.709170 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 32) steak > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): c8:60:00:df:06:35
10:17:32.718647 IP6 (hlim 59, next-header ICMPv6 (58) payload length: 64) 2a01:4f8:150:5024::2 > steak: [icmp6 sum ok] ICMP6, echo request, seq 2
10:17:32.718647 IP6 (hlim 59, next-header ICMPv6 (58) payload length: 64) 2a01:4f8:150:5024::2 > steak: [icmp6 sum ok] ICMP6, echo request, seq 2
10:17:33.709162 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 32) steak > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): c8:60:00:df:06:35
10:17:33.729483 IP6 (hlim 59, next-header ICMPv6 (58) payload length: 64) 2a01:4f8:150:5024::2 > steak: [icmp6 sum ok] ICMP6, echo request, seq 3
10:17:33.729483 IP6 (hlim 59, next-header ICMPv6 (58) payload length: 64) 2a01:4f8:150:5024::2 > steak: [icmp6 sum ok] ICMP6, echo request, seq 3
10:17:34.709180 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 112) steak > steak: [icmp6 sum ok] ICMP6, destination unreachable, unreachable address 2a01:4f8:150:5024::2
10:17:34.709214 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 112) steak > steak: [icmp6 sum ok] ICMP6, destination unreachable, unreachable address 2a01:4f8:150:5024::2
10:17:34.709239 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 112) steak > steak: [icmp6 sum ok] ICMP6, destination unreachable, unreachable address 2a01:4f8:150:5024::2
10:17:34.735945 IP6 (hlim 59, next-header ICMPv6 (58) payload length: 64) 2a01:4f8:150:5024::2 > steak: [icmp6 sum ok] ICMP6, echo request, seq 4
10:17:34.735945 IP6 (hlim 59, next-header ICMPv6 (58) payload length: 64) 2a01:4f8:150:5024::2 > steak: [icmp6 sum ok] ICMP6, echo request, seq 4
10:17:34.736042 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 32) steak > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): c8:60:00:df:06:35
10:17:35.733165 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 32) steak > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): c8:60:00:df:06:35
10:17:35.745519 IP6 (hlim 59, next-header ICMPv6 (58) payload length: 64) 2a01:4f8:150:5024::2 > steak: [icmp6 sum ok] ICMP6, echo request, seq 5
10:17:35.745519 IP6 (hlim 59, next-header ICMPv6 (58) payload length: 64) 2a01:4f8:150:5024::2 > steak: [icmp6 sum ok] ICMP6, echo request, seq 5
10:17:36.733160 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 32) steak > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): c8:60:00:df:06:35
10:17:37.733188 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 112) steak > steak: [icmp6 sum ok] ICMP6, destination unreachable, unreachable address 2a01:4f8:150:5024::2
10:17:37.733215 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 112) steak > steak: [icmp6 sum ok] ICMP6, destination unreachable, unreachable address 2a01:4f8:150:5024::2
^C
21 packets captured
26 packets received by filter
0 packets dropped by kernel
igalic@steak ~ %
отключение iptables не влияет на поведение.
Это вся информация, которую я могу себе представить, чтобы быть полезной. На данный момент я немного растерялся и понятия не имею, как продолжить отладку.