LINUX.ORG.RU
ФорумAdmin

Помогите разобраться с маршрутизацией нескольких туннелей ipv6

 , ,


0

2

Задача настроить несколько одновременно работающих туннеля ipv6.
делаю туннель 1

ip tunnel add v6-1 mode sit remote 209.51.161.14 local 45.139.184.150 ttl 255
ip link set v6-1 up
ip -6 addr add 2001:470:8a87:1111:1111:1111:1111:1111 dev v6-1
ip -6 route add ::/0 dev v6-1 metric 1
делаю туннель 2
ip tunnel add v6-2 mode sit remote 184.105.250.46 local 185.230.140.161 ttl 255
ip link set v6-2 up
ip -6 addr add 2001:470:411c:2222:2222:2222:2222:2222 dev v6-2
ip -6 route add ::/0 dev v6-2 metric 2
Проверяю так:
работает: curl -k --interface v6-1 "https://whatismyv6.com/"
работает: curl -k --interface v6-2 "https://whatismyv6.com/"
Потом проверяю так:
работает: curl -k --interface 2001:470:8a87:1111:1111:1111:1111:1111 "https://whatismyv6.com/"
Не работает: curl -k --interface 2001:470:411c:2222:2222:2222:2222:2222 "https://whatismyv6.com/"
Как сделать так, чтобы можно было делать запросы свободно указывая адрес для интерфейса v6-2, ровно как и для v6-1?
root@sirius:~# route -nA inet6
Kernel IPv6 routing table
Destination                    Next Hop                   Flag Met Ref Use If
::1/128                        ::                         U    256 1     0 lo
2001:470:411c:2222:2222:2222:2222:2222/128 ::                         Un   256 1     0 v6-2
2001:470:8a87:1111:1111:1111:1111:1111/128 ::                         Un   256 1     0 v6-1
fe80::/64                      ::                         U    256 1     0 eth0
fe80::/64                      ::                         Un   256 1     0 v6-1
fe80::/64                      ::                         Un   256 1     0 v6-2
::/0                           ::                         U    1   2    52 v6-1
::/0                           ::                         U    2   2     1 v6-2
::1/128                        ::                         Un   0   3    16 lo
2001:470:411c:2222:2222:2222:2222:2222/128 ::                         Un   0   3    17 v6-2
2001:470:8a87:1111:1111:1111:1111:1111/128 ::                         Un   0   3    15 v6-1
fe80::2d8b:b896/128            ::                         Un   0   2     0 v6-1
fe80::b9e6:8ca1/128            ::                         Un   0   2     0 v6-2
fe80::5054:ff:fe51:e932/128    ::                         Un   0   2     0 eth0
ff00::/8                       ::                         U    256 2    10 eth0
ff00::/8                       ::                         U    256 1     0 v6-1
ff00::/8                       ::                         U    256 1     0 v6-2
::/0                           ::                         !n   -1  1     1 lo
root@sirius:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 45.139.184.150  netmask 255.255.255.255  broadcast 0.0.0.0
        inet6 fe80::5054:ff:fe51:e932  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:51:e9:32  txqueuelen 1000  (Ethernet)
        RX packets 2446  bytes 220457 (220.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 555  bytes 89861 (89.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0:2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 185.230.140.161  netmask 255.255.255.255  broadcast 185.230.140.161
        ether 52:54:00:51:e9:32  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 554  bytes 59163 (59.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 554  bytes 59163 (59.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

v6-1: flags=209<UP,POINTOPOINT,RUNNING,NOARP>  mtu 1480
        inet6 fe80::2d8b:b896  prefixlen 64  scopeid 0x20<link>
        inet6 2001:470:8a87:1111:1111:1111:1111:1111  prefixlen 128  scopeid 0x0<global>
        sit  txqueuelen 1000  (IPv6-in-IPv4)
        RX packets 38  bytes 24661 (24.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 83  bytes 8274 (8.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

v6-2: flags=209<UP,POINTOPOINT,RUNNING,NOARP>  mtu 1480
        inet6 2001:470:411c:2222:2222:2222:2222:2222  prefixlen 128  scopeid 0x0<global>
        inet6 fe80::b9e6:8ca1  prefixlen 64  scopeid 0x20<link>
        sit  txqueuelen 1000  (IPv6-in-IPv4)
        RX packets 25  bytes 8175 (8.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10  bytes 1449 (1.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

У вас два дефолтных роутинга, один с метрикой 1, второй с метрикой 2. Я так подозреваю, что все 4 ваших теста идут через интерфейс v6-1, при этом три первых с адресом 1111.

Если вы хотите независимого роутинга для разных IPv6, то надо делать две таблицы роутинга с разными рулесами (ip rule). Тогда, я думаю, работать будет.

В ipv6, global адреса, по сути, складываются в одну кучу (можно представить, что они биндятся на интерфейс lo), и при исходящих коннектах там работает своя логика выбора глобального адреса.

Вы можете проверить это, повесив их на eth0. Или любой другой нетоннельный интерфейс.

Oleg_Iu ()
Ответ на: комментарий от Oleg_Iu

Я пробовал делать разные таблицы, но у меня не полчилось настроить даже 1 интерфейс. Можете подсказать как правильно настроить используя таблицы и правила?

ip tunnel add v6-1 mode sit remote 209.51.161.14 local 45.139.184.150 ttl 255
ip link set v6-1 up
ip -6 addr add 2001:470:8a87:1111:1111:1111:1111:1111 dev v6-1
ip -6 rule add from 2001:470:8a87::/48 dev v6-1 table ipv6route-1
ip -6 route add local 2001:470:8a87::/48 dev lo
Так тоже не работает
ip tunnel add v6-1 mode sit remote 209.51.161.14 local 45.139.184.150 ttl 255
ip link set v6-1 up
ip -6 addr add 2001:470:8a87:1111:1111:1111:1111:1111 dev v6-1
ip -6 rule add from 2001:470:8a87::/48 dev v6-1 table ipv6route-1
ip -6 route add local 2001:470:8a87::/48 dev v6-1

root@sirius:~# cat /etc/iproute2/rt_tables
#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
101 ipv6route-1
102 ipv6route-2
103 ipv6route-3
104 ipv6route-4
105 ipv6route-5

Vincent_ ()
Ответ на: комментарий от Bers666

Зачем указывать именно адрес, если указывая интерфейс все работает?

Потому, что если указывать только интерфейс, то все время будешь выходить в инет с одного и того же ip

Правильно посоветовали про ip rule.

Я и сам понимаю, что ip rule. Вот только не понимаю конкретно как.

Vincent_ ()
Ответ на: комментарий от Vincent_

если указывать только интерфейс, то все время будешь выходить в инет с одного и того же ip

ты же написал, что если указывать интерфейс, то все работает. Соврал?

ip rule. Вот только не понимаю конкретно как.

Linux Advanced Routing and Traffic Control (LARTC)
Chapter 4. Rules - routing policy database

Bers666 ★★★★★ ()
Ответ на: комментарий от Bers666

ты же написал, что если указывать интерфейс, то все работает. Соврал?

Повторяю:

Потому, что если указывать только интерфейс, то все время будешь выходить в инет с одного и того же ip


Linux Advanced Routing and Traffic Control (LARTC) Chapter 4. Rules - routing policy database

Я уже пробовал как там написано и не получилось. Вот оттуда:

Теперь нам нужно лишь сгенерировать таблицу John и очистить кэш маршрутов:

ip route add default via 195.96.98.253 dev ppp2 table John

ip route flush cache

Что делаю я:

root@sirius:~# ip -6 route add default via 2001:470:39:1da::1 dev v6-1 table ipv6route-1
RTNETLINK answers: No route to host

2001:470:39:1da::1 - это gateway

Почему ошибка?

Vincent_ ()
Ответ на: комментарий от Bers666

Ну или взять раздел «4.2.1. Раздельный доступ»

root@sirius:~# ip route add 2001:470:8a87::/48 dev v6-1 src 2001:470:8a87:1111:1111:1111:1111:1111 table ipv6route-1
root@sirius:~# ip route add default via 2001:470:39:1da::1 table ipv6route-1
RTNETLINK answers: No route to host

Что не так?

Vincent_ ()
Ответ на: комментарий от Vincent_

Вы указали gateway, и не указали, на каком интерфейсе его искать.

Что это за адрес вдруг появился в повествовании? 2001:470:39:1da::1

Потом, на какой туннель вы получали /48?

Из той информации, что есть, я могу только предположить такой вариант:

ip tunnel add v6-2 mode sit remote 184.105.250.46 local 185.230.140.161 ttl 255
ip -6 addr add 2001:470:411c:2222:2222:2222:2222:2222/48 dev v6-2
ip link set v6-2 up
ip -6 rule add from 2001:470:411c::/48 dev v6-2 table ipv6route-2
ip -6 route replace ::/0 dev v6-2 via ....gateway_for_2222.... table ipv6route-2

Я написал для второго туннеля, намекая, чо первый не надо в отдельную таблицу выкидывать, если у вас нет основной сети ipv6.

Oleg_Iu ()
Ответ на: комментарий от Oleg_Iu

Что это за адрес вдруг появился в повествовании?

2001:470:39:1da::1 - это gateway для v6-2

root@sirius:~# ip -6 route replace ::/0 dev v6-2 via 2001:470:39:1da::1 table ipv6route-2
RTNETLINK answers: No route to host

Та же ошибка

ниже конфиги туннелей от HE


auto he-ipv6

iface he-ipv6 inet6 v4tunnel

address 2001:470:1f06:2f8::2

netmask 64

endpoint 209.51.161.14

local 45.139.184.150

ttl 255

gateway 2001:470:1f06:2f8::1

Routed /48 2001:470:8a87::/48


auto he-ipv6

iface he-ipv6 inet6 v4tunnel

address 2001:470:39:1da::2

netmask 64

endpoint 184.105.250.46

local 185.230.140.161

ttl 255

gateway 2001:470:39:1da::1

Routed /48 2001:470:411c::/48

Vincent_ ()
Ответ на: комментарий от Vincent_

Значит есть какая-то информация, о которой нам неизвестно, что не дает работать туннелю.

Только что поднял туннель на HE, это третий ipv6 у меня - поднялось все, и побежало с src ip, как и надо.

Oleg_Iu ()
Ответ на: комментарий от Oleg_Iu

Я подозреваю, что вы проверяете туннели только так

curl -k --interface v6-1 "https://whatismyv6.com/"

А если начнете проверять так

curl -k --interface 2001:470:8a87:1111:1111:1111:1111:1111 "https://whatismyv6.com/"

То проверку пройдет только один туннель

Значит есть какая-то информация, о которой нам неизвестно, что не дает работать туннелю.

Никаких у меня настроек особых нет. Простая Ubuntu18.04 с VestaCP, к которой подцеплены несколько доп ip.

Vincent_ ()
Ответ на: комментарий от Vincent_

Я подозреваю, что вы проверяете туннели только так

Я правильно проверяю. Можете попинговать 2001:470:1f14:c70::2. Пол часика еще постоит.

В ipv6 ставить в команде название интерфейса смысла нет, я вам уже писал.

Кстати, если команда ip route у вас выдает no route to host, то это означает, что ваш gateway роутится куда-то в сторону, где и погибает в смертных муках.

Прицепите куда-нибудь на свой интерфейс префикс линка 2001:470:39:1da::2/64, что бы не ругалось.

Oleg_Iu ()
Ответ на: комментарий от Oleg_Iu

В ipv6 ставить в команде название интерфейса смысла нет, я вам уже писал.

Извиняюсь, не понял, что вы имеете ввиду.

Я подцепил 2001:470:39:1da::2/64 на интерфейс и попробовал сделать так:

ip tunnel add v6-2 mode sit remote 184.105.250.46 local 185.230.140.161 ttl 255
ip -6 addr add 2001:470:411c:2222:2222:2222:2222:2222/48 dev v6-2
ip -6 addr add 2001:470:39:1da::2/64 dev v6-2
ip link set v6-2 up
ip -6 rule add from 2001:470:411c::/48 dev v6-2 table ipv6route-2
ip -6 route replace ::/0 dev v6-2 via 2001:470:39:1da::1 table ipv6route-2

Команды выполнились, но интерфейс не заработал.

Ну и вы скорее всего правы насчет gateway, что он не нужен для 6in4.

Vincent_ ()
Ответ на: комментарий от Vincent_

Тогда два последних пункта.

  1. Убедитесь (или проверьте еще раз), что 2001:470:411c::/48 - это routed prefix для этого линка 2001:470:39:1da::/64. Можете проверить туннель от адреса 2001:470:39:1da::2, как минимум, проверите линк.

  2. Загляние в ip6tables. Вдруг там засел злобный буратино.

Ну и в порядке аванградизма:

traceroute -ns 185.230.140.161 184.105.250.46

Ну и смотрите, что бы у вас на этих адресах не было уже туннеля. Я не в курсе, как там у he.net с i|o|key.

Oleg_Iu ()
Ответ на: комментарий от Oleg_Iu

Большое спасибо за старания мне помочь. Мне дали решение в другом месте

ip tunnel add v6-1 mode sit remote 209.51.161.14 local 45.139.184.150 ttl 255
ip link set v6-1 up
ip -6 addr add 2001:470:8a87:1111:1111:1111:1111:1113/128 dev v6-1
ip -6 rule add from 2001:470:8a87:1111:1111:1111:1111:1113/64 table 101
ip -6 route add default dev v6-1 table 101
#ip -6 rule add from $subnet1 table 101

Vincent_ ()