Вопрос или проблема
Я пытаюсь выполнить следующую команду на своей системе Raspbian
sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 2222 -j DNAT --to-destination 192.168.2.241:22
iptables говорит:
iptables v1.8.2 (nf_tables): неизвестный параметр "--to-destination"
Попробуйте `iptables -h` или `iptables --help` для получения дополнительной информации.
Та же проблема возникает, если я заменяю --to-destination
на --to
.
Я довольно нов в iptables
и не смог разобраться с проблемой при поиске в интернете.
Я понимаю, что в какой-то момент iptables
изменяется на “nf_tables”? Это уже произошло в Raspbian? Является ли это источником моей проблемы?
Эта команда работает на моем RPi с Raspbian 10 Buster.
Может быть, у вас поврежденная установка с отсутствующими файлами? Или некоторые нестандартные настройки?
Замените SD-карту на чистую новую систему Raspbian и попробуйте снова. Это должно сработать, команда правильная.
Возможно, не загружен необходимый модуль
modprobe xt_nat
Ответ или решение
На системы Raspbian, начиная с версии 10 (Buster), действительно существует переход на новую подсистему фильтрации пакетов, известную как nf_tables
. Эта система может вызывать некоторые проблемы с некоторыми командами iptables
, которые раньше работали на более старых версиях.
Ваше сообщение об ошибке, указывающее на то, что --to-destination
является неизвестной опцией, может быть связано с тем, что вы используете версию iptables
, которая работает с nf_tables
, а не с классической версией iptables
. В nf_tables
синтаксис отличается от традиционного, и некоторые параметры могут быть недоступны в старом формате.
Вот шаги, которые вы можете предпринять для решения данной проблемы:
-
Проверьте версию
iptables
. Введите команду:iptables --version
Если версия выглядит как
iptables v1.8.x (nf_tables)
, это значит, что вы используете новую подсистему. -
Убедитесь, что модуль NAT загружен. Попробуйте загрузить модуль NAT, если он ещё не загружен:
sudo modprobe xt_nat
-
Используйте альтернативный синтаксис
nftables
. Если вы хотите воспользоваться новыми возможностямиnf_tables
, попробуйте воспользоваться командойnft
:sudo nft add table ip nat sudo nft add chain ip nat prerouting { type nat hook prerouting priority 0; } sudo nft add rule ip nat prerouting ip daddr 192.168.2.241 tcp dport 2222 dnat 192.168.2.241:22
-
Вернуться к классической версии
iptables
. Если вам нужно сохранить именно старый синтаксис, вы можете использовать следующую команду, чтобы запуститьiptables
в совместимом режиме:sudo update-alternatives --config iptables
Это позволит выбрать между
iptables
в форматеlegacy
иnf_tables
. -
Переустановите
iptables
. Если ничего не помогает, возможно, стоит переустановитьiptables
, чтобы убедиться, что установка не повреждена:sudo apt-get purge iptables sudo apt-get install iptables
-
Проверьте наличие обновлений системы. Убедитесь, что вы используете последнюю версию Raspbian. Это может помочь избавиться от некоторых ошибок:
sudo apt-get update sudo apt-get upgrade
Если после выполнения всех вышеуказанных шагов проблема не решается, возможно, вам стоит рассмотреть возможность установки свежей версии Raspbian на новую флешку, чтобы избежать некорректных настроек и проблем с зависимостями.
Надеюсь, эти рекомендации помогут вам разобраться с вашей проблемой.