Ко всему этому привели глупые ошибки, читайте Обновление 5
Я пытаюсь настроить маршрутизатор Linux (LXC, 3.10.0-123.el7.x86_64) с IPv6.
Провайдер - Hetzner, у меня 2 подсети, одна / 56 и / 64. Они настроили маршрутизацию на мой адрес LL, а мой шлюз по умолчанию - fe80 :: 1.
Я включил пересылку ipv6 и ipv4 в sysctl.conf:
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
и я настроил IPTables для принятия всего.
я знаю это ICMPv6
это основная утилита, используемая для маршрутизации в IPv6, поэтому она не заблокирована ;-). Я также добавил -A FORWARD -j ACCEPT
.
Я настроил второй (:: 2) ip моей подсети / 56 на eth1, а второй (:: 2) из / 64 на eth0.
eth0 - интерфейс восходящей связи, eth1 - интерфейс локальной сети.
Итак, теперь к основной проблеме.
Внутренние клиенты с адресами ipv6 из / 56 не могут пинговать внешний мир, но пакеты и ответ правильно маршрутизируются до моего маршрутизатора, который просто отбрасывает пакет без каких-либо подсказок.
например ping6 ipv6.google.com приводит к тайм-аутам
но на восходящем канале маршрутизатора я получаю:
20:43:13.350932 IP6 client-ipv6-ip > fra07s64-in-x00.1e100.net: ICMP6, echo request, seq 1, length 64
20:43:13.355143 IP6 fra07s64-in-x00.1e100.net > client-ipv6-ip: ICMP6, echo reply, seq 1, length 64
20:43:14.350572 IP6 client-ipv6-ip > fra07s64-in-x00.1e100.net: ICMP6, echo request, seq 2, length 64
20:43:14.354609 IP6 fra07s64-in-x00.1e100.net > client-ipv6-ip: ICMP6, echo reply, seq 2, length 64
20:43:15.350630 IP6 client-ipv6-ip > fra07s64-in-x00.1e100.net: ICMP6, echo request, seq 3, length 64
20:43:15.355072 IP6 fra07s64-in-x00.1e100.net > client-ipv6-ip: ICMP6, echo reply, seq 3, length 64
20:43:16.350656 IP6 client-ipv6-ip > fra07s64-in-x00.1e100.net: ICMP6, echo request, seq 4, length 64
20:43:16.354748 IP6 fra07s64-in-x00.1e100.net > client-ipv6-ip: ICMP6, echo reply, seq 4, length 64
на клиенте виден только эхо-запрос.
В чем может быть проблема? Существуют ли какие-либо дополнительные настройки, чтобы мой маршрутизатор принимал все, что ему отправляется?
До сих пор я использовал только NAT и никогда не использовал полноценную маршрутизацию на своих Linux-компьютерах.
Спасибо за любые указатели, я надеюсь, что это просто простой параметр sysctl, который нужно установить ...
Обновление 1
Я заменил подсеть / 56 на «подсеть-2», а / 64 на «подсеть-1».
ip -6 а
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
61: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 subnet-1::2/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::216:2eff:fe01:1/64 scope link
valid_lft forever preferred_lft forever
63: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 subnet-2::2/56 scope global
valid_lft forever preferred_lft forever
inet6 fe80::216:3eff:fe01:1/64 scope link
valid_lft forever preferred_lft forever
ip -6 r
unreachable ::/96 dev lo metric 1024 error -101
unreachable ::ffff:0.0.0.0/96 dev lo metric 1024 error -101
unreachable 2002:a00::/24 dev lo metric 1024 error -101
unreachable 2002:7f00::/24 dev lo metric 1024 error -101
unreachable 2002:a9fe::/32 dev lo metric 1024 error -101
unreachable 2002:ac10::/28 dev lo metric 1024 error -101
unreachable 2002:c0a8::/32 dev lo metric 1024 error -101
unreachable 2002:e000::/19 dev lo metric 1024 error -101
subnet-1::/64 dev eth0 proto kernel metric 256
subnet-2::/56 dev eth1 proto kernel metric 256
unreachable 3ffe:ffff::/32 dev lo metric 1024 error -101
fe80::/64 dev eth0 proto kernel metric 256
fe80::/64 dev eth1 proto kernel metric 256
default via fe80::1 dev eth0 metric 1024
Система обновлена, за исключением ядра (например, оно не загружено), так как для этого потребуется перезагрузка, и у меня не было проблем с текущим. Но если это известная проблема с 3.10.0-123.13.2.el7, я могу перезапустить, чтобы обновить его до 3.10.0-229.14.1.el7.
Обновление 2
tcpdump -i eth0 ip6
показывает входящие пакеты
Я добавил правило брандмауэра для искажения, например.
*mangle
-A PREROUTING -j NFLOG
войти в / var / log / messages, но там ничего не регистрируется!
Обновление 3
Bridge "br0"
Port "router.eth0"
Interface "router.eth0"
Port "br0"
Interface "br0"
type: internal
Port "eth0"
Interface "eth0"
Bridge "br1"
Port "db01.eth0"
Interface "db01.eth0"
Port "mail01.eth0"
Interface "mail01.eth0"
Port "br1"
Interface "br1"
type: internal
Port "team1"
Interface "eth3"
Interface "eth2"
Port "router.eth1"
Interface "router.eth1"
Обновление 4
Я облажался, в интерфейсе был неправильный макинтош (короче - исправил сейчас)
Итак, теперь пакеты принимаются и пересылаются, но ответ не отправляется на шлюз по умолчанию:
Маршрутизатор:
22:09:22.638405 IP6 ping_ip > client_ip: ICMP6, echo request, seq 243, length 64
22:09:22.754936 IP6 router-ll > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has fe80::1, length 32
22:09:22.757001 IP6 2a01:4f8::a:b:10 > router-ll: ICMP6, neighbor advertisement, tgt is fe80::1, length 32
22:09:22.757044 IP6 router-ll > ff02::1:ff00:2: ICMP6, neighbor solicitation, who has router-ll, length 32
22:09:23.639651 IP6 ping_ip > client_ip: ICMP6, echo request, seq 244, length 64
22:09:23.756969 IP6 router-ll > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has fe80::1, length 32
22:09:23.759007 IP6 router-ll > ff02::1:ff00:2: ICMP6, neighbor solicitation, who has router-ll, length 32
22:09:23.759240 IP6 2a01:4f8::a:b:10 > router-ll: ICMP6, neighbor advertisement, tgt is fe80::1, length 32
22:09:24.640677 IP6 ping_ip > client_ip: ICMP6, echo request, seq 245, length 64
Клиент:
22:11:41.640978 IP6 ping_ip > client_ip: ICMP6, echo request, seq 382, length 64
22:11:41.640998 IP6 client_ip > ping_ip: ICMP6, echo reply, seq 382, length 64
22:11:42.642993 IP6 ping_ip > client_ip: ICMP6, echo request, seq 383, length 64
22:11:42.643013 IP6 client_ip > ping_ip: ICMP6, echo reply, seq 383, length 64
ip -6 neigh:
fe80::216:3eff:fe01:1 dev eth1 lladdr 00:16:3e:01:00:01 router STALE
subnet-2::1:1 dev eth0 FAILED
fe80::216:3eff:fe15:1 dev eth1 lladdr 00:16:3e:15:00:01 DELAY
fe80::216:3eff:fe15:c dev eth1 lladdr 00:16:3e:15:00:0c STALE
fe80::1 dev eth0 FAILED
subnet-2::1:1 dev eth1 lladdr 00:16:3e:15:00:01 REACHABLE
fe80::216:2eff:fe01:1 dev eth0 INCOMPLETE
subnet-2::1:12 dev eth1 lladdr 00:16:3e:15:00:0c STALE
subnet-1::2 dev eth0 FAILED
неудачная запись для 1: 1 здесь, потому что вскоре у меня был этот адрес на eth0 для отладки проблемы с пингом, которая была раньше ...
Обновление 5
Как и при смене Mac, я не менял адрес LL. Я не знал, что эти 2 адреса связаны на 100%.
Основная проблема заключалась в том, что старый маршрутизатор умер, и я скопировал оттуда LL-адрес, не изменив соответствующий Mac -> это не сработало.
Затем ... вернул LL (что было ошибкой) и сменил Mac (за 2 отдельных шага с интервалом в несколько часов).
Для кого-либо еще MAC-адрес L2 и IPv6 LL-адрес должны соответствовать, и они должны совпадать с тем, что отправляет маршрутизатор.
Для отладки используйте tcpdump -i eth0 ip6 -en
тогда вы можете увидеть MAC-адреса и II-адреса и сравнить их с вашим интерфейсом, если они есть, и с тем, который настроен в Hetzner как адрес маршрутизации, не совпадают, ничего не работает!
Итак, извините всех, кто это прочитал, я как-то пропустил объяснение, что раньше он был на другом маршрутизаторе, и я установил этот, потому что последний умер. Очевидное исправление ...
Если у вас возникают странные проблемы с маршрутизацией с отсутствующими пакетами, выполните следующие действия:
ip l
и обратите внимание на MAC-адреса
tcpdump -en -i eth0 ip6
(или соответствующий интерфейс) и сравните их, если они совпадают, все хорошо
ip -6 a
сравните локальные адреса ссылки (локальная область) с вашим MAC-адресом (вот калькулятор: http://ben.akrin.com/?p=1347 , есть несколько)
если он все еще не работает, я думаю, проблема кроется в iptables, по возможности используйте ведение журнала :)