Маршрутизация контейнера подсети LXC

Маршрутизация контейнера подсети LXC

У меня есть CentOS 7 box с 2 NIC - один порт ethernet и один беспроводной. Я хотел бы создать контейнер lxc, который будет работать как маршрутизатор, отвечающий следующим требованиям:

  1. При запуске hostapd все данные клиентов, подключенных к точке доступа, должны направляться через этот контейнер.
  2. Любые другие установленные контейнеры lxc также должны направлять все данные через этот контейнер маршрутизации.
  3. Если порт Ethernet подключен к Интернету, то хост и все контейнеры, а также все клиенты, подключенные к точке доступа, должны иметь доступ к Интернету.

Для настройки я сделал следующее:

  • Создан контейнер маршрутизации lxc
  • У хоста есть интерфейсы eth0 и wlan0. Я также создал br-eth0 и br-wlan0, которые являются мостами, и добавил к ним эти два интерфейса соответственно.
  • br-eth0 настроен как клиент DHCP для подключения к моему внешнему маршрутизатору через сетевую карту eth0
  • br-wlan0 имеет статический IP-адрес 10.0.0.1, а dnsmasq прослушивает этот интерфейс и выдает IP-адреса в подсети 10.0.0.0/24.
  • Я настроил контейнер маршрутизации lxc для создания 2 интерфейсов, подключенных к этим мостам (leth0, leth1). leth0 — это клиент DHCP, а leth1 имеет статический IP-адрес 10.0.0.201.
  • Я создал еще один мост, br-router, который также был подключен к третьему интерфейсу в контейнере маршрутизации. Этот мост имеет статический IP-адрес 192.168.3.254 в хосте, а интерфейс в контейнере маршрутизации (leth2) имеет статический IP-адрес 192.168.3.1
  • Контейнер маршрутизации также запускает dnsmasq, прослушивает интерфейс leth2 и предоставляет IP-адреса в подсети 192.168.3/24 (.3 - .200), поэтому любые другие контейнеры lxc, которые подключают этот мост, получат любой IP-адрес в этой подсети.
  • Я включил маскировку на leth0 в контейнере маршрутизации.
  • Я настроил шлюз по умолчанию на хосте на 192.168.3.1, чтобы весь трафик, исходящий с хоста, направлялся через контейнер маршрутизации.

Для целей тестирования я также создал второй контейнер lxc, который включает в себя один интерфейс, который подключает br-router к контейнеру, и этот контейнер размещает веб-страницу на порту 8080. Этому единственному интерфейсу (teth0) выдается IP-адрес через DHCP (в данном случае 192.168.3.9).

С этой настройкой я могу успешно получить доступ к интернету из хоста, контейнера маршрутизации и тестового контейнера. Также, из контейнера маршрутизации и тестового контейнера я могу curlhttp://192.168.3.9:8080и успешно получить веб-страницу.

Итак, требования 2 и 3 выполнены. Однако при подключении клиента к этой системе, хотя мне предоставляется IP-адрес в подсети 10.0.0.0/24 (через dnsmasq, работающий на br-wlan0), у меня нет подключения к Интернету (я понимаю, что не смогу без некоторых изменений маршрутизации или чего-то в этом роде, поэтому я здесь). Я также попытался сделать переадресацию портов с помощью firewalld в контейнере маршрутизации на leth1 с порта 80 на 192.168.3.9:8080, в надежде, что я смогу обслуживать веб-страницу из тестового контейнера подключенному клиенту с помощьюhttp://10.0.0.201- однако, не тут-то было. (хотя эта попытка переадресации портов ДЕЙСТВИТЕЛЬНО позволяет мне получить доступ к веб-сайту через адрес 201 с хоста)

Я уверен, что есть комбинация изменений маршрутизации, правил таблицы IP и правил переадресации портов, которая заставила бы все это работать хорошо, но после нескольких дней экспериментов я не могу понять, в чем дело. Я все еще довольно новичок, когда дело касается всех этих сетей, поэтому я надеюсь, что кто-то сможет мне помочь. Надеюсь, я нарисовал достаточно приличную картину текущей конфигурации.

Спасибо!

Связанный контент