Что ж, это довольно неудобный вопрос, и я довольно пессимистичен по этому поводу, но давайте посмотрим, что может сказать сообщество.
Сценарий:
Сервер, подключающийся к нескольким конечным точкам VPN, делает все что угодно.
Эта проблема:
Один и тот же IP-адрес может быть назначен нескольким устройствам.
Соревнование:
Уметь успешно маршрутизировать трафик через каждое из этих устройств с одним и тем же IP-адресом.
По следующему сценарию:
tun0: 192.168.200.10 192.168.200.1 tun1: 192.168.200.11 192.168.200.1 tun2: 192.168.200.12 192.168.200.1
Без проблем. Использование маршрутизации на основе исходных кодов Linux работает как шарм. Однако, поскольку я не контролирую со стороны клиента IP-адрес, который мне нужно назначить, я могу получить:
tun0: 192.168.200.10 192.168.200.1 tun1: 192.168.200.10 192.168.200.1 tun2: 192.168.200.10 192.168.200.1
И здесь возникает проблема. Есть ли способ контролировать таблицы маршрутизации для каждого интерфейса независимо от IP?
В настоящее время каждый интерфейс, который поднимается, получает еще одну запись в / и т.д. / iproute2 / rt_tables Такие как:
100 tun0 101 tun1 102 tun2
Затем для каждого устройства следующее:
ip rule add from 192.168.200.X iif tunX table tunX ip route add default via 192.168.200.1 table tunX
Чтобы проверить это, я использую curl --interface tunX.
Первый интерфейс более-менее «выигрывает» в решении о маршрутизации.
Я хочу, чтобы правильный интерфейс победил.
Теоретически я прекрасно понимаю, что делаю то, что многие сочтут неправильным. Однако я хотел бы знать, есть ли способ обойти это, потому что я думаю, что он есть.
Есть идеи по этому поводу? Может быть, iptables fwmark поможет, если вообще поможет?
Вы не можете использовать один и тот же IP-адрес на двух разных интерфейсах без что-то ломаются, и хороших "обходных путей" нет. Одну или несколько сетей придется перенумеровать.
(О, а теперь пора обзавестись IPv6, у которого нет этой проблемы.)