Да, есть ряд экземпляров, которые можно найти путем поиска вызовов kill
и killpg
вjobs.c
в исходном коде Bash.
Одним из примеров является обработка остановленных заданий при запуске exec
или при выходе из оболочки:оболочка отправляет SIGTERM
иSIGCONT
всем остановленным заданиям.
В конце концов я сам нашел решение после многих часов чтения документации, учебных пособий, предложений на различных веб-страницах, многочисленных испытаний, а также глубокого и всестороннего мониторинга и анализа сети и сетевых фильтров.
nft add table ip prot1
nft add chain ip prot1 prerouting '{ type filter hook prerouting priority -300; policy accept; }'
nft add rule ip prot1 prerouting iif enp1s0 udp dport '{ 50404, 50441 }' ip daddr set 0.0.0.17 notrack accept
nft add rule ip prot1 prerouting iif vprot0 ip saddr 0.0.0.17 notrack accept
nft add chain ip prot1 postrouting '{ type filter hook postrouting priority 100; policy accept; }'
nft add rule ip prot1 postrouting oif enp1s0 ip saddr 0.0.0.17 ip saddr set 0.0.0.6 accept
Страница netfilter hooks должна быть открыта и прочитана в первую очередь, чтобы понять следующее объяснение.
Пояснение к используемым командам:
ip
(IPv4 )с именем prot1
. prot1
с именем prerouting
типа filter
для хука prerouting
с приоритетом -300
. Важно использовать номер приоритета ниже -200
, чтобы иметь возможность обойти отслеживание соединения conntrack
. Это исключает использование цепочки типа nat
для трансляции сетевых адресов назначения, поскольку она имеет еще более низкий приоритет. prot1
цепочки prerouting
добавлено фильтрправило , которое применяется только к пакетам IPv4, полученным на i
nput i
nter f
ace enp1s0
типа протокола udp
, имеющего в качестве d
пункт назначения port
либо 50404
, либо 50441
, который изменяетip
d
пункт назначения addr
ess пакета с 0.0.0.6
на 0.0.0.17
и активирует no track
соединение для этого UDP-пакета. Вердикт указывается явно с помощью accept
, хотя на самом деле нет необходимости передавать UDP-пакет, полученный от службы sva
ЦП приложения для службы sv2
ЦП связи, как можно быстрее к следующему крючку, который в этом случае крючок forward
.prot1
в цепочку prerouting
, которое применяется только ко всем всем пакетам IPv4, полученным на i
ввод i
. ] nter f
ace vprot0
, не зависящий от типа протокола (udp
, icmp
,... )имеющийip
s
источник addr
ess 0.0.0.17
для активации no track
соединения для этот пакет. Конечно, также можно было бы фильтровать только UDP-пакеты с соответствующим номером порта источника или получателя, но это дополнительное ограничение здесь не требуется, и это правило также подходит для пакетов ICMP, отправляемых обратно с 0.0.0.17
на 0.0.0.5
в пункте назначения. порт еще не открыт, так как служба sv2
в данный момент не запущена. Вердикт снова указывается явно с помощью accept
вместо использования неявного значения по умолчанию continue
для максимально быстрой передачи пакета на хук forward
. prot1
с именем postrouting
типа filter
для хука postrouting
с приоритетом 100
. Важно использовать цепочку типа filter
, а не типа nat
, чтобы иметь возможность применять преобразование исходного адреса к пакетам UDP (и ICMP ), которые обходят отслеживание соединения. prot1
во вторую цепочку postrouting
, которая применяется только к пакетам IPv4, отправленным на o
выход i
nter f
ace enp1s0
не зависит от типа протокола (udp
, icmp
,... ), имеющего в качестве s
ource addr
ess 0.0.0.17
, который изменяетip
s
ource addr
ess пакета из 0.0.0.17
до 0.0.0.6
. Вердикт еще раз указывается явно с помощью accept
, хотя на самом деле нет необходимости передавать UDP-пакет, полученный от службы sv2
коммуникационного ЦП, службе sva
прикладного ЦП как можно быстрее. Это правило также изменяет исходный адрес на 0.0.0.6
ICMP-пакета, отправленного с 0.0.0.17
на порт назначения, недоступный из-за того, что служба sv2
еще не запущена.Таким образом, центральный процессор приложения никогда не замечает, что он обменивается данными по двум каналам UDP с интерфейсом, отличным от 0.0.0.6
, что было вторым требованием для выполнения, хотя и не очень важным. Было нелегко выяснить, что преобразование сети без сохранения состояния необходимо для этой очень специальной конфигурации сети и типа связи между службами sva
и sv2
и что NAT необходимо выполнять без с помощью крючка nat
.