Рейтинг:0

Почему моя настройка политики маршрутизации не работает?

флаг br

У меня есть машина EC2 под управлением Ubuntu 20.04 с двумя интерфейсами Ethernet. Оба они подключены к одной и той же подсети и оба доступны извне. Я создал 2 настраиваемые таблицы маршрутов, по одной для каждого интерфейса, и обе содержат только записи маршрутов для самой машины, непосредственной подсети и шлюза по умолчанию через соответствующий интерфейс. Я могу добавить правило для всего трафика, чтобы использовать любую из пользовательских таблиц маршрутизации, и это работает: машина будет использовать указанный интерфейс и соответствующий IP-адрес для исходящей связи. Однако, если я добавлю правила для использования любой пользовательской таблицы маршрутизации на основе маркировки пакетов, которые я применяю через iptables, все перестанет работать, и трафик не будет покидать мою машину.

Вот основные биты соответствующей конфигурации:

$ sudo IP-маршрут
10.0.11.0/24 dev ens6 ссылка на область ядра proto src 10.0.11.52
10.0.11.0/24 dev ens5 ссылка на область ядра proto src 10.0.11.201

$ sudo ip route показать таблицу if1
по умолчанию через 10.0.11.1 dev ens5 proto static metric 100
10.0.11.0/24 dev ens5 proto static scope link src 10.0.11.52
10.0.11.201 dev ens5 proto static Scope Link метрика 100

$ sudo ip route показать таблицу if2
по умолчанию через 10.0.11.1 dev ens6 proto static metric 200
10.0.11.0/24 dev ens6 proto static scope link src 10.0.11.201
10.0.11.52 dev ens6 proto static Scope Link метрика 200

$ IP-правило
0: из всех локальных поисковых систем
46: из всего поиска fwmark 0x3 if1
47: из всего поиска fwmark 0x2 if2
50: с 10.0.11.201 поиск if1
100: из 10.0.11.52 поиск if2
32766: из всех основных поисковых запросов
32767: из всех поисковых запросов по умолчанию

$ sudo iptables -S -t мангл
-P ПРЕДВАРИТЕЛЬНАЯ МАРШРУТИЗАЦИЯ ПРИНЯТЬ
-P ВВОД ПРИНЯТЬ
-P ВПЕРЕД ПРИНЯТЬ
-P ВЫВОД ПРИНЯТЬ
-P ОТПРАВКА ПРИНЯТЬ
-A ВЫВОД -m owner --uid-owner 1002 -j MARK --set-xmark 0x3/0xffffffff
-A ВЫВОД -m owner --uid-owner 1003 -j MARK --set-xmark 0x2/0xffffffff

Моя цель - направить трафик от пользователя с uid 1002 через интерфейс ens5 (if1) и трафик от пользователя с uid 1003 через ens6 (if2), но я где-то делаю что-то не так, и это сводит меня с ума.... Я вижу, что помеченные пакеты обрабатываются по-разному, значит, что-то происходит. Если я назначу маршрут по умолчанию для основной таблицы маршрутизации, а затем просто отмечу трафик для uid 1002, все пользователи смогут выполнять исходящие соединения, кроме uid 1002. Таким образом, я знаю, что маркировка работает, я знаю, что помеченные пакеты маршрутизируются по-разному, и я знаю свой пользовательский таблицы маршрутов работают, но где-то в этом созвездии есть ошибка, и я не могу ее найти. Любая помощь будет принята с благодарностью на данный момент!

--редактировать--

Я пришел к этому, основываясь на подходе, описанном здесь: Попытка маршрутизировать исходящие http-запросы через VPN на Ubuntu Server 12.04 и некоторые настройки, поскольку я не хочу направлять трафик на основе определенных портов, а исходящий uid.

флаг br
Я нашел решение своей проблемы, сделав это по-другому. Вместо того, чтобы помечать пакеты с помощью iptables, а затем использовать правила ip для активации различных таблиц маршрутизации, как описано выше, я полностью отказался от iptables и просто поместил этот оператор в правила ip: ``sudo ip rule add uidrange 1000-1000 lookup if1`` и ``sudo ip rule add uidrange 1001-1004 lookup if2`` работает как шарм! :) Мне все еще интересно узнать, почему мой предыдущий пример не сработал...

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.