У меня есть сеть, которая подключена к сети и доступна через туннель tun0. Этот tun0 запускается со скриптом Python следующим образом:
tun_name = 'tun0'.encode()
ifs = ioctl(self.virtualIf, TUNSETIFF, struct.pack("16sH", tun_name, IFF_TUN))
self.ifname = tun_name.decode()
print('[NetworkSideThread] Created virtual interface '+self.ifname+'.')
# configure IPv6 addresses of virtual interface
subprocess.check_call(CMD_IFCONFIG + ' ' + self.ifname + ' up', shell=True)
subprocess.check_call(CMD_IFCONFIG + ' ' + self.ifname + ' inet6 add ' + self.prefix + '::1/64', shell=True)
subprocess.check_call(CMD_IFCONFIG + ' ' + self.ifname + ' inet6 add fe80::1/64', shell=True)
print('[NetworkSideThread] Configured IPv6 address')
# set static route
subprocess.check_call(CMD_ROUTE+' -A inet6 add ' + self.prefix + '::/64 dev ' + self.ifname, shell=True)
Все устройства в сети имеют адрес bbbb:: (например, bbbb:: 17: d00: 30: 6fb6 и bbbb:: 17: d00: 30: 76f6). Цель состоит в том, чтобы трафик, отправляемый с 76f6 на 6fb6, поступал в туннель и затем корректно отправлялся на 6fb6.
Странная вещь: с вышеупомянутой конфигурацией это работает только время от времени!
Выполнение «маршрута -А инет6» раскрывает:
Kernel IPv6 routing table
Destination Next Hop Flag Met Ref Use If
2a02:2c40:500:a006::/64 [::] Ue 256 0 0 ens33
bbbb::/64 [::] U 1 3 290 tun0
bbbb::/64 [::] U 256 0 0 tun0
fe80::/64 [::] U 256 1 38 ens33
fe80::/64 [::] U 256 0 0 tun0
[::]/0 gateway UG 100 1 1 ens33
[::]/0 [::] !n -1 1 16599 lo
ip6-localhost/128 [::] Un 0 5882117 lo
2a02:2c40:500:a006::/128 [::] Un 0 4 3 lo
ubuntu/128 [::] Un 0 1 0 lo
ubuntu/128 [::] Un 0 3 82 lo
bbbb::/128 [::] Un 0 3 5 lo
ubuntu/128 [::] Un 0 4 57 lo
fe80::/128 [::] Un 0 3 6 lo
fe80::/128 [::] Un 0 1 0 lo
ubuntu/128 [::] Un 0 1 0 lo
ubuntu/128 [::] Un 0 1 0 lo
ubuntu/128 [::] Un 0 3 33 lo
ip6-mcastprefix/8 [::] U 256 4 610 ens33
ip6-mcastprefix/8 [::] U 256 0 0 tun0
[::]/0 [::] !n -1 1 16600 lo
Я полагаю, что иногда трафик, отправляемый с 76f6 на 6fb6, идет по маршруту "2a02:2c40:500:a006::/64 [::] Ue 256 0 0 ens33", а иногда - "bbbb::/64 [::] U 1 3 290 tun0 "маршрут.
Во всех случаях, когда устройство отправляет на адрес bbbb, пакет должен быть введен через туннель в сеть bbbb.
Любой ключ к решению этой проблемы? Это странно, так как это не происходит последовательно.
Редактировать:
Запрашиваемая информация:
ip -6 route get bbbb::17:d00:30:6fb6
дает
bbbb:: 17: d00: 30: 6fb6 из :: dev tun0 src bbbb :: 1 метрика 1 привилегированная среда
а также
ip route show match bbbb::17:d00:30:6fb6
ничего не дает
Хм, ваш первый комментарий имеет смысл, поэтому моя первоначальная гипотеза неверна. Для дополнительной информации я добавил экранный снимок Wireshark в туннеле, который показывает идентичные пакеты в обоих случаях, когда он получен на 6fb6, а где нет (пакеты
Это, кажется, указывает на то, что я был неправ. Не сразу понять, в чем проблема - приемное устройство в некоторых случаях может быть сброшено, а в других - нет, но это будет странно.
Wireshark также дает те же результаты. Первые 3 пакета являются первой передачей и прибывают в пункт назначения, последние 3 пакета (хотя и идентичные) являются второй передачей и не приходят!