Ошибка добавления правил iptables snat или dnat в Linux

Я использую Arch Linux (32-разрядный version) на Raspberry Pi 3.

Когда я пытаюсь добавить какие-либо правила -j SNAT или -j DNAT в iptables , это не работают - я получаю сообщение об ошибке

iptables: No change/target/match by that name

Обычно у меня нет проблем с iptables. Например, для стандартных INPUT , OUTPUT и FORWARD есть множество правил. Кроме того, POSTROUTING содержит правило MASQUERADE , которое нормально работает, позволяя внутренней локальной сети взаимодействовать с Интернетом.

Я столкнулся с проблемой SNAT , когда пытался разрешить Интернету отправлять трафик на общедоступный IP-адрес для доступа к машине во внутренней сети. Когда это не помогло, я попробовал более простые правила, и они тоже не сработали. Затем я попытался добавить правила DNAT и столкнулся с той же проблемой.

Я могу добавить свои более сложные правила в PREROUTING и POSTROUTING без указания -j DNAT или -j SNAT , а затем они будут добавлять, и счетчики увеличиваются.

Ниже приведены некоторые примеры простейших попыток добавления -j SNAT и -j DNAT правила и ошибки. Независимо от того, какое правило SNAT или DNAT я пытаюсь добавить, ошибка всегда такая же, как показано ниже.

[root@hostname ~]# iptables -F PREROUTING -t nat
[root@hostname ~]# iptables -A PREROUTING -t nat -d $public_IP -j DNAT --to-destination $internal_IP
iptables: No chain/target/match by that name.

[root@hostname ~]# iptables -F POSTROUTING -t nat
[root@hostname ~]# iptables -A POSTROUTING -t nat -o teql+ -j SNAT --to-source $public_IP
iptables: No chain/target/match by that name.

Подробная информация о Linux и текущая конфигурация -t nat :

[root@hostname ~]# uname -a
Linux hostname.local 4.4.37-1-ARCH #1 SMP Fri Dec 9 19:03:41 MST 2016 armv7l GNU/Linux

[root@hostname ~]# iptables -nvL -t nat
Chain PREROUTING (policy ACCEPT 18 packets, 1184 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination
600 37155 MASQUERADE  all  --  *      teql+   0.0.0.0/0            0.0.0.0/0
[root@hostname ~]#

Вот список загруженных модулей ядра, которые могут быть полезны в случае, если это поможет:

[root@hostname ~]# lsmod | grep ip
ipt_REJECT              1543  142
nf_reject_ipv4          3223  1 ipt_REJECT
ipt_MASQUERADE          1223  1
nf_nat_masquerade_ipv4  2893  1 ipt_MASQUERADE
iptable_nat             1812  1
nf_nat_ipv4             5573  1 iptable_nat
nf_nat                 15506  2 nf_nat_ipv4,nf_nat_masquerade_ipv4
nf_conntrack_ipv4      13768  7
nf_defrag_ipv4          1684  1 nf_conntrack_ipv4
nf_conntrack          101220  5 nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ipv4
iptable_filter          1665  1
ip_tables              12280  2 iptable_filter,iptable_nat
x_tables               17670  5 ip_tables,ipt_MASQUERADE,xt_conntrack,iptable_filter,ipt_REJECT
ipv6                  370087  20
2
задан 23 December 2016 в 14:24
2 ответа

У Arch xt_nat не загружаецца па змаўчанні.

Гэта выпраўлена з:

modprobe xt_nat
echo "xt_nat >> /etc/modules-load.d/iptables.conf"
1
ответ дан 3 December 2019 в 12:37

Итак, в конце концов я понял это .... оказывается, что модуль ядра Linux xt_nat должен быть загружен. Выполнение следующей команды для загрузки этого модуля немедленно устранило проблему.

insmod /lib/modules/`uname -r`/kernel/net/netfilter/xt_nat.ko.gz

Чтобы попытаться выяснить, что происходит, я решил перезагрузить Pi. Модуль xt_nat загружался при загрузке и iptables все еще работал должным образом - разрешая добавление правил.

Поэтому, хотя я не уверен, как модуль был выгружен (поскольку он уже должен был загружаться во время загрузки), по крайней мере, он работает Сейчас. Теоретически проблема не должна возникать сейчас, потому что модуль не может быть выгружен, пока существует правило -j DNAT или -j SNAT s.

0
ответ дан 3 December 2019 в 12:37

Теги

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