У меня есть несколько интернет-маршрутизаторов от одного и того же провайдера (я назову интернет-маршрутизаторы «боксы»), все они подключены к одному и тому же аппаратному сетевому коммутатору, образующему физическую сеть (я назову эту физическую сеть «NML» для «No Man's Land» »), К которому подключены два маршрутизатора (я назову их« маршрутизаторы »), выполняющие задачи маршрутизации и брандмауэра для частной локальной сети:
_____________________________________________ WAN (Internet)
| | | |
| | | |
___|___ ___|___ ___|___ ___|___
[ ] [ ] [ ] [ ]
[ Box 1 ] [ Box 2 ] [ Box 3 ] [ Box 4 ]
[ 0:A:1 ] [ 0:B:1 ] [ 0:C:1 ] [ 0:D:1 ]
[_______] [_______] [_______] [_______]
| | | |
| | | |
____|___________|___________|___________|____ NML (A physical network
| | for boxes and routers)
| |
____|____ ____|____
[ ] [ ]
[ Router1 ] [ Router2 ]
[ 0:A:2 ] [ 0:A:3 ]
[ 0:B:2 ] [ 0:B:3 ]
[ 0:C:2 ] [ 0:C:3 ]
[ 0:D:2 ] [ 0:D:3 ]
[_________] [_________]
| |
| |
__________|_______________________|__________ LAN (Where people are working)
Со стороны ipv4 NML - это локальная сеть, использующая частный класс ipv4, он работает.
На стороне ipv6 все блоки имеют один и тот же префикс / 64, и каждый маршрутизатор получает автоматически настраиваемый адрес ipv6 из каждого блока (каждый маршрутизатор получает четыре IPv6, по одному на блок).
Чтобы упростить задачу, вы можете представить адреса ipv6 с 3 символами:
0:A:1
: 0
префикс из префикса сети провайдера, A
префикс из первого префикса сети ящика, 1
суффикс от адреса первого ящика;0:A:2
: 0
префикс из префикса сети провайдера, A
префикс из первого префикса сети ящика, 1
суффикс первого маршрутизатора, получившего адрес из первого поля;0:C:1
: 0
префикс из префикса сети провайдера, C
префикс из третьего ящика префикса сети, 1
суффикс из адреса третьего ящика;0:C:3
: 0
префикс из префикса сети провайдера, C
префикс из третьего ящика префикса сети, 3
суффикс второго маршрутизатора, получающего адрес из третьего поля.Таким образом, каждый маршрутизатор получает четыре адреса ipv6, по одному на коробку.
ping6
все ящики, используя свои адреса ipv6 (0:A:1
, 0:B:1
, 0:C:1
, 0:D:1
);ping6
каждый маршрутизатор2 адреса IPv6 (0:A:3
, 0:B:3
, 0:C:3
, 0:D:3
), верно обратное;ping6
адрес ipv6, даже когда я добавляю явный маршрут в одно поле для этого адреса ipv6 (ip -6 route add something via 0:A:1
), либо используя IPv6-адрес коробки из префикса провайдера, либо используя локальный для ссылки адрес коробки.Сначала только в одном ящике был активирован ipv6, и в это время я мог запрашивать Интернет с помощью ipv6, но, поскольку я активировал ipv6 на всех ящиках, я больше не могу запрашивать Интернет с помощью ipv6. Если я сделаю traceroute6
на интернет-адрес с маршрутизатора, он никогда не выходит за рамки стандартного.
Обратите внимание, что в настоящее время мне не нужно выполнять работу с ipv6 из локальной сети через маршрутизаторы, мне нужны только маршрутизаторы, чтобы иметь возможность работать с Интернетом с использованием ipv6 (в основном для создания некоторой VPN через ipv6).
Интернет-маршрутизаторы (названные «ящиками») являются собственностью интернет-провайдера, и единственный вариант, который у меня есть, - это флажок «включить IPv6» на странице клиента, у меня нет доступа к самой конфигурации маршрутизатора и нет другого варианта, кроме включения или отключение ipv6. Маршрутизаторы между LAN и NML (называемые «маршрутизаторами») - это стандартные системы Debian, работающие на некотором сетевом оборудовании на базе x86. С точки зрения Debian вы можете представить, что это похоже на ПК: я могу делать то же, что и стандартный Debian.
Итак, два вопроса:
Я удалил некоторую информацию об истечении срока действия и тому подобное, чтобы убрать многословие, плюс я иногда добавлял некоторые ведущие 0
для выравнивания адресов для облегчения чтения, затем заменил некоторые биты, чтобы использовать пример класса ipv6.
# my boxes' ipv6 addresses
box0 2001:db8:ee84:2180::1
box1 2001:db8:ee84:21c0::1
box2 2001:db8:2f13:1ea0::1
box3 2001:db8:399a:08f0::1
box4 2001:db8:399a:39e0::1
# my router1's ipv6 addresses
# ip -6 addr show dev eth2
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 2001:db8:ee84:2180:200:24ff:fed1:3d9e/64 scope global mngtmpaddr dynamic
inet6 2001:db8:ee84:21c0:200:24ff:fed1:3d9e/64 scope global mngtmpaddr dynamic
inet6 2001:db8:2f13:1ea0:200:24ff:fed1:3d9e/64 scope global mngtmpaddr dynamic
inet6 2001:db8:399a:08f0:200:24ff:fed1:3d9e/64 scope global mngtmpaddr dynamic
inet6 2001:db8:399a:39e0:200:24ff:fed1:3d9e/64 scope global mngtmpaddr dynamic
inet6 fe80::200:24ff:fed1:3d9e/64 scope link
# my router2's ipv6 addresses
ip -6 addr show dev eth2
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 2001:db8:ee84:2180:200:24ff:fed1:6336/64 scope global mngtmpaddr dynamic
inet6 2001:db8:ee84:21c0:200:24ff:fed1:6336/64 scope global mngtmpaddr dynamic
inet6 2001:db8:2f13:1ea0:200:24ff:fed1:6336/64 scope global mngtmpaddr dynamic
inet6 2001:db8:399a:08f0:200:24ff:fed1:6336/64 scope global mngtmpaddr dynamic
inet6 2001:db8:399a:39e0:200:24ff:fed1:6336/64 scope global mngtmpaddr dynamic
inet6 fe80::200:24ff:fed1:6336/64 scope link
# default ipv6 routes on router1
# ip -6 route
2001:db8:ee84:2180::/64 dev eth2 proto kernel metric 256
2001:db8:ee84:21c0::/64 dev eth2 proto kernel metric 256
2001:db8:2f13:1ea0::/64 dev eth2 proto kernel metric 256
2001:db8:399a:08f0::/64 dev eth2 proto kernel metric 256
2001:db8:399a:39e0::/64 dev eth2 proto kernel metric 256
fe80::/64 dev eth2 proto kernel metric 256
default via fe80::e69e:12ff:fe04:286f dev eth2 proto ra metric 1024 hoplimit 64
default via fe80::e69e:12ff:fe03:8b35 dev eth2 proto ra metric 1024 hoplimit 64
default via fe80::e69e:12ff:fe02:10de dev eth2 proto ra metric 1024 hoplimit 64
default via fe80::0224:d4ff:fea7:f258 dev eth2 proto ra metric 1024 hoplimit 64
default via fe80::0224:d4ff:febb:af9e dev eth2 proto ra metric 1024 hoplimit 64
# default ipv6 routes on router2
# ip -6 route
2001:db8:ee84:2180::/64 dev eth2 proto kernel metric 256
2001:db8:ee84:21c0::/64 dev eth2 proto kernel metric 256
2001:db8:2f13:1ea0::/64 dev eth2 proto kernel metric 256
2001:db8:399a:08f0::/64 dev eth2 proto kernel metric 256
2001:db8:399a:39e0::/64 dev eth2 proto kernel metric 256
fe80::/64 dev eth2 proto kernel metric 256
default via fe80::e69e:12ff:fe03:8b35 dev eth2 proto ra metric 1024 mtu 1480 hoplimit 64
default via fe80::0224:d4ff:febb:af9e dev eth2 proto ra metric 1024 hoplimit 64
default via fe80::e69e:12ff:fe02:10de dev eth2 proto ra metric 1024 hoplimit 64
default via fe80::e69e:12ff:fe04:286f dev eth2 proto ra metric 1024 hoplimit 64
default via fe80::0224:d4ff:fea7:f258 dev eth2 proto ra metric 1024 hoplimit 64
# neigh from router1
# ip -6 neigh | grep eth2
fe80::224:d4ff:febb:af9e dev eth2 lladdr 00:24:d4:bb:af:9e router STALE
fe80::200:24ff:fed1:6336 dev eth2 lladdr 00:00:24:d1:63:36 STALE
fe80::e69e:12ff:fe04:286f dev eth2 lladdr e4:9e:12:04:28:6f router REACHABLE
2001:db8:2f13:1ea0::1 dev eth2 lladdr 00:24:d4:bb:af:9e router STALE
fe80::e69e:12ff:fe02:10de dev eth2 lladdr e4:9e:12:02:10:de router STALE
2001:db8:399a:39e0:200:24ff:fed1:6336 dev eth2 lladdr 00:00:24:d1:63:36 STALE
2001:db8:399a:8f0:200:24ff:fed1:6336 dev eth2 lladdr 00:00:24:d1:63:36 STALE
2001:db8:399a:39e0::1 dev eth2 lladdr 00:24:d4:a7:f2:58 router STALE
2001:db8:399a:8f0::1 dev eth2 lladdr e4:9e:12:02:10:de router STALE
2001:db8:399a:39e0:: dev eth2 FAILED
fe80::213:46ff:fe8f:1e4a dev eth2 lladdr 00:13:46:8f:1e:4a STALE
2001:db8:399a:8f0:: dev eth2 FAILED
fe80::e69e:12ff:fe03:8b35 dev eth2 lladdr e4:9e:12:03:8b:35 router STALE
fe80::224:d4ff:fea7:f258 dev eth2 lladdr 00:24:d4:a7:f2:58 router STALE
fe80::8226:89ff:fe2d:b3d3 dev eth2 lladdr 80:26:89:2d:b3:d3 STALE
fe80::20a:f7ff:fe12:e77 dev eth2 lladdr 00:0a:f7:12:0e:77 STALE
2001:db8:ee84:2180::1 dev eth2 lladdr e4:9e:12:03:8b:35 router STALE
fe80::21d:9ff:fe2c:628d dev eth2 lladdr 00:1d:09:2c:62:8d STALE
# get from router1
# ip -6 route get 2001:4860:4860::8888
2001:4860:4860::8888 from :: via fe80::e69e:12ff:fe04:286f dev eth2 proto ra src 2001:db8:399a:39e0:200:24ff:fed1:3d9e metric 1024 hoplimit 64
# neigh from router2
# ip -6 neigh | grep eth2
2001:db8:399a:8f0:200:24ff:fed1:3d9e dev eth2 lladdr 00:00:24:d1:3d:9e STALE
2001:db8:399a:8f0::1 dev eth2 lladdr e4:9e:12:02:10:de router STALE
fe80::e69e:12ff:fe04:286f dev eth2 lladdr e4:9e:12:04:28:6f router STALE
fe80::224:d4ff:fea7:f258 dev eth2 lladdr 00:24:d4:a7:f2:58 router DELAY
fe80::e69e:12ff:fe02:10de dev eth2 lladdr e4:9e:12:02:10:de router REACHABLE
fe80::200:24ff:fed1:3d9e dev eth2 lladdr 00:00:24:d1:3d:9e STALE
fe80::224:d4ff:febb:af9e dev eth2 lladdr 00:24:d4:bb:af:9e router STALE
2001:db8:399a:39e0:200:24ff:fed1:3d9e dev eth2 lladdr 00:00:24:d1:3d:9e STALE
fe80::e69e:12ff:fe03:8b35 dev eth2 lladdr e4:9e:12:03:8b:35 router REACHABLE
# get from router2
ip -6 route get 2001:4860:4860::8888
2001:4860:4860::8888 from :: via 2001:db8:399a:8f0::1 dev eth2 src 2001:db8:399a:39e0:200:24ff:fed1:6336 metric 1024
Некоторый пример трассировки:
# traceroute from router1
# traceroute 2001:4860:4860::8888
traceroute to 2001:4860:4860::8888 (2001:4860:4860::8888), 30 hops max, 80 byte packets
1 2001:db8:ee84:21c0::1 (2001:db8:ee84:21c0::1) 26.146 ms 27.728 ms 28.507 ms
Я транспонирую этот пример ipv4 в ipv6.
Проблема в том, что если вы не будете активно пинговать каждый ip-адрес коробки с правильным источником, будет нелегко сопоставить (используя Mac-адрес) правильный общедоступный IP-адрес с правильной ссылкой локальный IP-адрес. Вот что я мог сделать из соседних таблиц с обоих маршрутизаторов и из того факта, что конец локальной ссылки является концом Mac:
box0 2001:db8:ee84:2180::1 <=> fe80::e69e:12ff:fe03:8b35
box2 2001:db8:2f13:1ea0::1 <=> fe80::0224:d4ff:febb:af9e
box3 2001:db8:399a:08f0::1 <=> fe80::e69e:12ff:fe02:10de
box4 2001:db8:399a:39e0::1 <=> fe80::0224:d4ff:fea7:f258
а оставшийся, который не может быть найден данными, должен быть:
box1 2001:db8:ee84:21c0::1 <=> fe80::e69e:12ff:fe04:286f
При этом становится ясно, что оба ip -6 route get
Примеры в вопросе показывают, что для выбранного маршрутизатора использовался неправильный источник. В данном случае это похоже на ограничение Linux (наличие нескольких локальных сетей, наложенных на одну физическую локальную сеть).
Итак, вот что нужно сделать для router1. Кроме того, методом проб и ошибок необходимо указать "src" для маршрута по умолчанию в таблице, иначе может быть выбран другой источник. Обратите внимание, что общедоступный IP-адрес или локальный IP-адрес ссылки могут (должны) использоваться взаимозаменяемо в качестве шлюза, поэтому лучше использовать общедоступный IP-адрес, даже если RA, похоже, предпочитает IP-адрес ссылки, проще использовать общедоступный в сценарии и найти соответствие между двумя типами IP, как указано выше, больше не требуется.
# ip -6 route add 2001:db8:ee84:2180::/64 dev eth2 src 2001:db8:ee84:2180:200:24ff:fed1:3d9e table 100 # ip -6 route add default via 2001:db8:ee84:2180::1 dev eth2 src 2001:db8:ee84:2180:200:24ff:fed1:3d9e table 100 # ip -6 route add 2001:db8:ee84:21c0::/64 dev eth2 src 2001:db8:ee84:21c0:200:24ff:fed1:3d9e table 101 # ip -6 route add default via 2001:db8:ee84:21c0::1 dev eth2 src 2001:db8:ee84:21c0:200:24ff:fed1:3d9e table 101 # ip -6 route add 2001:db8:2f13:1ea0::/64 dev eth2 src 2001:db8:2f13:1ea0:200:24ff:fed1:3d9e table 102 # ip -6 route add default via 2001:db8:2f13:1ea0::1 dev eth2 src 2001:db8:2f13:1ea0:200:24ff:fed1:3d9e table 102 # ip -6 route add 2001:db8:399a:08f0::/64 dev eth2 src 2001:db8:399a:08f0:200:24ff:fed1:3d9e table 103 # ip -6 route add default via 2001:db8:399a:08f0::1 dev eth2 src 2001:db8:399a:08f0:200:24ff:fed1:3d9e table 103 # ip -6 route add 2001:db8:399a:39e0::/64 dev eth2 src 2001:db8:399a:39e0:200:24ff:fed1:3d9e table 104 # ip -6 route add default via 2001:db8:399a:39e0::1 dev eth2 src 2001:db8:399a:39e0:200:24ff:fed1:3d9e table 104
По крайней мере, маршрут по умолчанию должен быть помещен в основную (обычную) таблицу, иначе, что бы ни было сделано позже, будет ошибка типа «нет маршрута к хосту» или «сеть недоступна». Поскольку вы уже получили 5 из них из рекламы маршрутизатора, это не нужно.
Теперь давайте добавим правила, которые привязывают каждый исходный IP-адрес к соответствующей таблице, таким образом выбирая правильный источник для любого из (блочных) маршрутизаторов:
# ip -6 rule add from 2001:db8:ee84:2180:200:24ff:fed1:3d9e table 100 # ip -6 rule add from 2001:db8:ee84:21c0:200:24ff:fed1:3d9e table 101 # ip -6 rule add from 2001:db8:2f13:1ea0:200:24ff:fed1:3d9e table 102 # ip -6 rule add from 2001:db8:399a:08f0:200:24ff:fed1:3d9e table 103 # ip -6 rule add from 2001:db8:399a:39e0:200:24ff:fed1:3d9e table 104
Также возможно принудительно (или даже балансировать нагрузку с помощью statistic --mode nth
match) выбор с использованием, например, ip6tables ... -j MARK ...
с участием ip -6 rule add fwmark ... table 10x
Теперь лучше было бы написать это ...
Может быть другая проблема. Если коробочный маршрутизатор перейдет в автономный режим, соответствующий маршрут по умолчанию быстро исчезнет в системе Linux, потому что он больше не рекламируется, но IP останется. Тогда я не знаю, может ли этот IP-адрес по-прежнему быть ошибочно выбран для использования на оставшемся маршруте по умолчанию. Если это произойдет, добавленные IP-правила могут переопределить маршрут по умолчанию, чтобы использовать теперь автономный блочный маршрутизатор, тем самым побеждая механизм переключения при отказе, состоящий из нескольких устройств в качестве маршрутизаторов. У меня нет средств проверить это.