Рейтинг:0

Лучший способ маршрутизировать трафик на основе вошедшего в систему пользователя по определенному избыточному маршруту?

флаг br

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

Машина EC2:

- eni1:

  • частный-IP1 -> общедоступный-IP1
  • частный-IP2 -> общедоступный-IP2

- eni2:

  • частный-IP3 -> общедоступный-IP3
  • частный-IP4 -> общедоступный-IP4

Все 4 адреса доступны извне, так что все в порядке. Однако для исходящего трафика в настоящее время всегда используется частный IP1 (и, следовательно, общедоступный IP1). Я хочу указать, что отдельные пользователи SSH используют определенные IP-адреса, поэтому они будут исходить с соответствующего общедоступного IP-адреса при общении со службами в Интернете, т.е.

пользователь1 -> частный-IP1

пользователь2 -> частный-IP2

пользователь3 -> частный-IP3

пользователь4 -> частный-IP4

Каков наилучший способ достижения этого результата?

Zac67 avatar
флаг ru
Есть ли шанс, что вы сможете запустить 802.1X? Вы можете назначать IP-адреса на основе аутентификации RADIUS.
флаг br
хм, я думаю, это был бы вариант. Никогда раньше не работал с RADIUS-аутентификацией. Знаете ли вы какие-либо ресурсы, которые я мог бы проверить, чтобы начать с этого?
Zac67 avatar
флаг ru
Нет, извините, запросы на ресурсы здесь в любом случае не по теме. Вы должны изучить, какие варианты у вас есть EC2. В то время как сервер RADIUS может быть легко добавлен, 802.1X должно быть предоставлено облаком (если вы не добавите полный уровень виртуализации поверх).
Рейтинг:1
флаг bd

Лучшим способом добиться этого было бы клонировать экземпляр EC2 в четыре экземпляра, назначить каждому клону один IP-адрес и позволить каждому пользователю использовать только машину с IP-адресом, который он или она должны использовать.

флаг br
Интересный подход, но не то, что я ищу. Я планирую масштабировать это до большего количества IP-адресов в долгосрочной перспективе, и развертывание парка экземпляров только для этой цели кажется расточительным и создаст много накладных расходов на обслуживание.
Tilman Schmidt avatar
флаг bd
Извините, все другие решения, которые я могу придумать, создадут еще больше накладных расходов на обслуживание.
флаг br
Но должен быть способ указать ядру Linux использовать различные доступные ему маршруты. Он работает для трафика, проходящего через ящик, почему он не должен работать для трафика, исходящего из ящика?
Tilman Schmidt avatar
флаг bd
Есть конечно. Трудность заключается в том, чтобы сделать решение о маршрутизации зависимым от идентификатора пользователя. Сам трафик не несет никакой информации о пользователе, который его инициировал. Проще говоря, вам придется создать *и поддерживать* механизм для сопоставления UID с исходными IP-адресами *и* указать сетевому стеку использовать его вместо обычного независимого от пользователя механизма. Опять же, создание отдельного экземпляра для каждого пользователя — самый простой способ добиться этого.
флаг br
хм. Я попытался использовать -m owner в iptables, чтобы сопоставить трафик с пользователем, пометить пакеты, а затем использовать правила ip, чтобы сопоставить их с определенной таблицей маршрутизации.К сожалению, это не работает, поэтому я искал альтернативы ... Я все еще думаю, что это должно быть возможно или что должен существовать обходной путь. Я просто не могу понять...
флаг br
Я, наконец, решил с помощью обходного пути. Но спасибо за мысли!
Рейтинг:1
флаг br

Я, наконец, решил это сам, потратив на это много часов. В конце концов я заставил его работать, добавив правило ip следующим образом:

правило sudo ip добавить поиск uidrange 1000-1001 if1
правило sudo ip добавить поиск uidrange 1002-1004 if2

а затем добавить правила постмаршрутизации iptables следующим образом:

$ sudo iptables -S -t физ
-P ПРЕДВАРИТЕЛЬНАЯ МАРШРУТИЗАЦИЯ ПРИНЯТЬ
-P ВВОД ПРИНЯТЬ
-P ВЫВОД ПРИНЯТЬ
-P ОТПРАВКА ПРИНЯТЬ
-A POSTROUTING -o interface1 -m owner --uid-owner 1000 -j SNAT --to-source IP1
-A POSTROUTING -o interface1 -m owner --uid-owner 1001 -j SNAT --to-source IP2
-A POSTROUTING -o interface2 -m owner --uid-owner 1002 -j SNAT --to-source IP3
-A POSTROUTING -o interface2 -m owner --uid-owner 1003 -j SNAT --to-source IP3

где if1 и if2 являются моими пользовательскими таблицами маршрутов, содержащими соответствующие маршруты по умолчанию. Работает хорошо! Может кому в будущем пригодится :)

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

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