Это происходит потому, что у вас все еще есть запись в таблице подключений для этого хоста, и утилита iptables
не будет очищать ее или каким-либо образом возиться с ней при добавлении или удалении ее правил.
Для этого вам необходимо установить утилиту conntrack(8)
, которую можно использовать для управления таблицей отслеживания активных соединений ядра. Для этого используется интерфейс сокета netlink, который предлагает функции, недоступные через /proc
или другие средства.
Например, conntrack -F
удалит все соединения, conntrack -D --dst=8.8.8.8
удалит все записи с этим пунктом назначения, conntrack -D --src=192.168.35.107
удалит все записи с этим источником и т. д.
Его легко установить в большинстве дистрибутивов, например, с. apt-get install conntrack
, yum install conntrack
и т. д.
TL;DR; rngd
требует, чтобы /lib/arm -linux -gnueabihf/ld -linux.so.3(программный интерпретатор)существовал именно в этом месте, когда вы запускаете исполняемый файл, в отличие от ldd
он не разрешает его в /lib/ld -linux -armhf.so.3
Этот отличный ответ о механизме интерпретатора программ указал мне правильное направление.
Чтобы понять это, я сначала нашел и попытался использовать переменную окружения LD _DEBUG :
sudo chroot /home/pi/rngd_chroot/ bash
bash-5.0# LD_DEBUG=libs rngd
bash: /sbin/rngd: No such file or directory
Установка LD_DEBUG
не приводит к выводу для rng
, но есть вывод для bash
, поэтому я решил, что он даже не загрузил программный интерпретатор библиотеку(ld -linux).
Предполагая, что поиск в библиотеке выполняется ld -linux , логично, что он не может найти сам ld -linux , если он не находится в точном месте (. ] /lib/arm -linux -gnueabihf/ld -linux.so.3 в моем случае ).
Не знаю, почему ldd
не сообщает об этом как об отсутствующей библиотеке. Я предполагаю, что это ошибка особенность ldd
.
Также, если мы сравним вывод ldd
для bash
иrng
:
pi@raspberrypi:~/rngd_chroot $ ldd bin/bash
...
/lib/ld-linux-armhf.so.3 (0xb6f9b000)
pi@raspberrypi:~/rngd_chroot $ ldd sbin/rngd
...
/lib/arm-linux-gnueabihf/ld-linux.so.3 => /lib/ld-linux-armhf.so.3 (0xb6f10000)
Для bash
он не имеет -левой стороны, он просто показывает фактический локальный путь интерпретатора программы .
Думаю, это связано с тем, как связываются исполняемые файлы.
Если у кого-то есть более полное представление о том, что именно происходит и какова правильная терминология для этих двух типов программных интерпретаторов , пожалуйста, опубликуйте это как ответ или комментарий (Я добавлю его сюда ).