Как перенаправить между физическими сетевыми интерфейсами внутри моста

Как перенаправить между физическими сетевыми интерфейсами внутри моста

У меня есть домашний ПК с проводным подключением к Ethernet (подключенным к маршрутизатору) и картой Wi-Fi. Wi-Fi настроен как точка доступа (hostapd), а сетевые интерфейсы объединены в мост:

auto enp0s10
iface enp0s10 inet manual

auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual

auto br0
iface br0 inet dhcp
bridge_ports wlan0 enp0s10
netmask 255.255.255.0

Существуют некоторые iptablesправила, которые влияют на выбранный трафик, проходящий черезwlan0только интерфейс, используя --physdev-inселектор. Эта настройка работает так, как и ожидалось.
Сейчас я пытаюсь создать механизм, который заставит выбранные процессы на устройстветолько отправлять трафик через wlan0.
Следуя примеруздесьЯ пытался:

> sudo ip netns add myNamespace
> sudo ip link set wlan0 netns myNamespace
RTNETLINK answers: Invalid argument 

Что, насколько я могу судить, означает:

  • что я не могу назначить физический интерфейс, потому что он соединен мостом
  • Я не могу использовать netnsпространство имен для достижения своей цели.

EDIT: следуя предложению ниже отгравитацияВ сочетании с упомянутым выше свинцом я попробовал:

> sudo ip netns show
> sudo ip netns add myNamespace
> sudo ip netns show
myNamespace
> sudo iw phy phy0 set name myNamespace
> sudo ip netns exec myNamespace ip link show
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

На данном этапе, следует ли мне ожидать увидеть что-либофи0илиwlan0перечислены? iw phy phy0 set name myNamespaceКоманда не возвращает сообщение об ошибке, но ни один из интерфейсов не был добавлен вмоепространство имен. Как и ожидалось, попытка вызвать интерфейс не удалась:

> sudo ip netns exec myNamespace ifconfig wlan0 192.168.0.10/24 up
SIOCSIFADDR: No such device
wlan0: ERROR while getting interface flags: No such device
wlan0: ERROR while getting interface flags: No such device
SIOCSIFNETMASK: No such device
> sudo ip netns exec myNamespace ifconfig phy0 192.168.0.10/24 up  
SIOCSIFADDR: No such device
phy0: ERROR while getting interface flags: No such device
phy0: ERROR while getting interface flags: No such device
SIOCSIFNETMASK: No such device<br/>

Опять же, я подозреваю, что это осложняется установкой моста.

План Б — создать пользователя/группу специально для этой задачи (назовем ихwlantraffic) затем используйте iptablesдля перенаправления трафика этого пользователя наwlan0если/когда это произойдетenp0s10.
Вот тут я застрял. Правило будет выглядеть примерно так:

iptables -t nat -A PREROUTING -m owner --gid-owner wlantraffic -m physdev ! --physdev-in wlan0 -j ???

т.е. "трафик из группыwlantrafficчтоне имеетвъехали на мост черезwlan0следует перенаправить вwlan0«
Пакеты будут представлять собой обычный интернет-трафик.
У меня такие вопросы:

  • Это правило PREROUTINGили FORWARDнорма?
  • Если бы я DROPсопоставлял пакеты — в контексте моста — «провалились бы» ли пакеты на следующий интерфейс?
  • Как мне указатьwlan0интерфейс как цель?

решение1

Я не могу использовать пространство имен ntns для достижения своей цели.

Ваша проблема может заключаться в мосте; однако:

Интерфейсы WLAN немного странные, когда дело доходит до сетевых пространств имен. Каждый адаптер имеет два слоя – phy (представляющий физическое оборудование) и netdev (представляющий сетевой интерфейс).

(Причина в том, что возможно наличие нескольких сетевых устройств на одном физическом уровне, например клиент+точка доступа, или двухдиапазонный адаптер Wi-Fi может иметь wlan0 и wlan1, работающие одновременно в разных сетях. Если вам интересно, посмотрите, iw phyкакие комбинации поддерживаются для вашего адаптера.)

В настоящее время Linux имеет ограничение, котороевесьУстройство phy должно быть перемещено в пространство имен; отдельные netdevs не могут быть перемещены. Для этого используйте iw:

iw phy phy0 set netns myNamespace

Это правило PREROUTING или FORWARD?

В общем, все зависит от того, какое действие ( -jпараметр) используется. Некоторые имеют смысл только в FORWARD, другие только в PREROUTING; некоторые работают только в -t nat, другие только в -t mangle.

Если бы я отбрасывал соответствующие пакеты — в контексте моста — «провалились бы» ли пакеты на следующий интерфейс?

Нет. Правила iptables предназначены для IP, и они обрабатываются до того, как пакет достигнет уровня моста. Если пакет отбрасывается на уровне IP, он исчезает.

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