У меня есть машина 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.