Вот цели и средства ретранслятора (, т.е. relay1
, relay2
или relay3
), для правильной обработки трафика, поступающего как через default-gateway
(10.0.0.1
), так и через HAProxymaster-relay
(10.0.0.254
)в прозрачном режиме, действуя как шлюз:
Ретранслятор должен использовать обычный шлюз default-gateway
для нормального трафика, то есть:
default-gateway
. Ретранслятор должен использовать альтернативный шлюз master-relay
для прозрачно ретранслируемого трафика HAProxy, то есть только для:
master-relay
, действующий в качестве альтернативного шлюза. Селектор для различения случая маршрутизации 1. от случая 2. является MAC-адресом источника альтернативного шлюза master-relay
. Скажем 02:03:04:05:06:07
.
Выбор, однажды сделанный в первом пакете соединения, должен оставаться тем же самым для всех других пакетов, входящих в это соединение.
Для этого требуется маршрутизация на основе политик с альтернативной таблицей маршрутизации (ip route add table...
, дополнительное решение о маршрутизации (ip rule add fwmark...
), основанное на iptables
использовании модуля соответствияmac
для селектора MAC-адресов, цельMARK
для изменения решение о маршрутизации и цельCONNMARK
запомнить решение для всего соединения.
Случай 1. является случаем по умолчанию без специальной обработки, а случай 2. является исключением, вам следует отменить изменение маршрутизации, чтобы использовать default-gateway
в качестве шлюза по умолчанию, как обычно:
ip route replace default via 10.0.0.1
Случай 2. будет сохранен в альтернативной таблице маршрутизации. Не надо его называть, любой номер подойдет, давайте выберем1000254
(254
был зарезервирован, это главная таблица...):
ip route add table 1000254 default via 10.0.0.254
Решение о маршрутизации будет инициировано значением метки (, поступающим от iptables
цели MARK
). Давайте выберем254
:
ip rule add fwmark 254 lookup 1000254
Как видно из Поток пакетов в Netfilter и общей сети ,правило iptables
в mangle/PREROUTING
или mangle/OUTPUT
может установить метку перед выполнением решения о маршрутизации (или проверки перемаршрута ). Вот так в итоге iptables
изменит маршрут. Таким образом, для одного входящего пакета это будет:
iptables -t mangle -A PREROUTING -m mac --mac-source 02:03:04:05:06:07 -j MARK --set-mark 254
Теперь, чтобы запомнить его для всего соединения, его следует обернуть вызовами CONNMARK
, которые сохраняют и извлекают метку в записи conntrack для этого потока и позволяют установить ее только в первый раз, не забывая направление OUTPUT. Некоторые пояснения есть в этом блоге:Для Linux и не только! Сетевой фильтр Connmark . Нет необходимости помечать пакеты для трафика локальной сети, поэтому отфильтруйте их (, и это может помочь при использовании conntrack -L
, см. в конце ). В итоге, включая предыдущее правило, получается:
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j RETURN
iptables -t mangle -A PREROUTING ! -s 10.0.0.0/24 -m mac --mac-source 02:03:04:05:06:07 -j MARK --set-mark 254
iptables -t mangle -A PREROUTING -j CONNMARK --save-mark
iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark
Вот именно. В этом случае даже не требуется переводrp_filter
в свободный режим, поскольку задействован только один сетевой интерфейс.
Обратите внимание, что вы можете легко вставить больше таблиц, правил и меток, чтобы иметь более одной master-relay
, если вам нужна избыточность (или просто добавить дополнительный MAC-адрес к master-relay
, если его IP-адрес может изменить свой MAC-адрес. адрес по любой причине ). Пример дополнительного HAProxy с IP 10.0.0.250
и MAC0A:09:08:07:06:05
:
ip route add table 1000250 default via 10.0.0.250
ip rule add fwmark 250 lookup 1000250
iptables -t mangle -I PREROUTING 4 ! -s 10.0.0.0/24 -m mac --mac-source 0A:09:08:07:06:05 -j MARK --set-mark 250
conntrack -L
будет отображать метку соединения и, таким образом, может использоваться для определения того, произошло ли соединение через master-relay
вместо значения по умолчанию, потому что его метка будет 254
вместо 0
:
.
# conntrack -L -s 198.51.100.1
tcp 6 431635 ESTABLISHED src=198.51.100.1 dst=10.0.0.10 sport=50230 dport=25 src=10.0.0.10 dst=198.51.100.1 sport=25 dport=50230 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
tcp 6 431527 ESTABLISHED src=198.51.100.1 dst=10.0.0.10 sport=49554 dport=25 src=10.0.0.10 dst=198.51.100.1 sport=25 dport=49554 [ASSURED] mark=254 secctx=system_u:object_r:unlabeled_t:s0 use=1
conntrack v1.4.4 (conntrack-tools): 2 flow entries have been shown.
Кажется, что все iGPU Intel 2-го поколения имеют только 2 пиксельных конвейера , что означает, что они могут одновременно создавать контент только для двух отдельных дисплеев, если я правильно понял.
Можно использовать один конвейер для предоставления одного и того же содержимого дисплея на два дисплея (, то есть режим клонирования ), если оба дисплея могут принимать одинаковое разрешение и частоту обновления.
Поскольку разъем VGA использует аналоговые сигналы, для него также требуется RAMDAC. Некоторые графические процессоры могут иметь, например. четыре пиксельных конвейера, но только два RAMDAC, что ограничивает вас максимум двумя дисплеями с аналоговыми разъемами (VGA или DVI -A ); остальные должны быть подключены с использованием какой-либо формы цифровой сигнализации (DVI -D, HDMI или DisplayPort или внутреннего LVDS на ноутбуках ).