nftables :дублирование широковещательных пакетов между сегментами

К сожалению, тайм-аут кажется жестким -, закодированным как 5 минут в исходном коде PolicyKit, в файле src/polkitbackend/polkitbackendinteractiveauthority.c.

В строках 3231 -3236 написано:

/* TODO: right now the time the temporary authorization is kept is hard-coded - we
 *       could make it a propery on the PolkitBackendInteractiveAuthority class (so
 *       the local authority could read it from a config file) or a vfunc
 *       (so the local authority could read it from an annotation on the action).
 */
 expiration_seconds = 5 * 60;

Таким образом, тайм-аут установлен в исходном коде на 5 минут, и в настоящее время нет условий для его изменения без перекомпиляции соответствующих частей PolicyKit.

С другой стороны, OpenSuSE Leap 15, кажется, расширил эту функциональность. Похоже, что -они интерпретировали действия ..._keepкак означающие «запомнить аутентификацию во время выполнения запрашивающего процесса», и добавили действия ..._keep_sessionи ..._keep_alwaysкак означающие «запомнить для всего этого конкретного сеанс входа в систему» ​​и «запомнить навсегда» соответственно.

1
18.08.2020, 14:01
2 ответа

В этом случае по-прежнему можно использовать nftables в netdev семействе (, а не ip семействе ), поскольку требуется только вход . (nftables все еще не имеет выхода доступного ). Поведение dupи fwdв хуке ingress точно такое же, как tc -mirred mirrorи redirect.

Я также обратил внимание на незначительную деталь :переписать адрес источника Ethernet в MAC-адрес нового исходящего интерфейса Ethernet, как это было бы сделано для действительно маршрутизируемого пакета, даже если он работает для вас без этого. Таким образом, MAC-адреса интерфейсов должны быть известны заранее. Я поместил два необходимых(eth0 и eth1 )в переменные/определения макросов, которые должны быть отредактированы с правильными значениями.

define eth0mac = 02:0a:00:00:00:01
define eth1mac = 02:0b:00:00:00:01

table netdev statelessnat
delete table netdev statelessnat

table netdev statelessnat {
    chain b { type filter hook ingress device eth1 priority 0;
        pkttype broadcast ether type ip ip daddr 192.168.1.255 udp dport 21027 jump b-to-a
        
    }

    chain c { type filter hook ingress device eth2 priority 0;
        pkttype broadcast ether type ip ip daddr 192.168.2.255 udp dport 21027 counter jump c-to-b-a
    }

    chain b-to-a {
        ether saddr set $eth0mac ip daddr set 192.168.0.255 fwd to eth0
    }

    chain c-to-b-a {
        ether saddr set $eth1mac ip daddr set 192.168.1.255 dup to eth1 goto b-to-a
    }
}
2
18.03.2021, 23:11

Отредактируйте :для тех, кто обнаружит это позже, принятый ответ от A.B дает чисто -решение nft.

Благодаря предложению A.B, теперь это работает с использованием tc, а не чисто правил nftables:

tc qdisc add dev eth2 ingress
tc filter add dev eth2 ingress \
    protocol ip u32 \
    match ip dst 192.168.2.255 \
    match ip protocol 17 0xff \
    match ip dport 21027 0xffff \
    action nat ingress 192.168.2.255/32 192.168.0.255 \
    pipe action mirred egress mirror dev eth0 \
    pipe action nat ingress 192.168.0.255/32 192.168.1.255 \
    pipe action mirred egress redirect dev eth1

tc qdisc add dev eth1 ingress
tc filter add dev eth1 ingress \
    protocol ip u32 \
    match ip dst 192.168.1.255 \
    match ip protocol 17 0xff \
    match ip dport 21027 0xffff \
    action nat ingress 192.168.1.255/32 192.168.0.255 \
    pipe action mirred egress redirect dev eth0

Насколько я понимаю, эти фильтры сопоставляют входящие широковещательные пакеты для UDP-порта 21027, транслируют их по широковещательному адресу для каждой из других предполагаемых подсетей(ingressдля изменения IP-адреса назначения, а не IP-адреса источника, который nat egressизменит ), а затем продублирует/перенаправит NAT-пакеты в выходные очереди других интерфейсов.

Будучи новичком в tc, это может быть не лучший способ решить проблему, но он работает с точки зрения передачи объявлений по сегментам (и Syncthing с радостью обнаруживает новые узлы ).

2
18.03.2021, 23:11

Теги

Похожие вопросы