iptables nat não existe

12

Hoje meu iptables nat no sistema host parou de funcionar e não tenho idéia do que aconteceu! (Isso é muito ruim, eu sei)

Todos os comandos são executados como usuário root.

Se eu executar $ iptables -t nat -L , recebo a seguinte mensagem de erro:

$ iptables -t nat -L
iptables v1.4.7: can't initialize iptables table 'nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

Não há mais atualizações disponíveis. Eu também reiniciei o servidor com vários kernels mais antigos, mas sempre recebo a mesma mensagem de erro.

Meu servidor está rodando no CentOS com o kernel oficial do OpenVZ na última versão.

$ uname -r
2.6.32-042stab088.4

Versão do kernel também testada: 2.6.32-042stab85.20 e 2.6.32-042stab084.26

Primeiro kernel no grub.conf:

title OpenVZ (2.6.32-042stab088.4)
root (hd0,1)
kernel /vmlinuz-2.6.32-042stab088.4 ro root=/dev/md2 rd_NO_LUKS rd_NO_DM nomodeset crashkernel=auto SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8 KEYTABLE=de
initrd /initramfs-2.6.32-042stab088.4.img

As seguintes atualizações foram instaladas:

$ rpm -qa --last
vzctl-4.7.2-1.x86_64                          Mon 05 May 2014 03:25:16 AM CEST
vzctl-core-4.7.2-1.x86_64                     Mon 05 May 2014 03:25:14 AM CEST
util-linux-ng-2.17.2-12.14.el6_5.x86_64       Wed 30 Apr 2014 11:37:19 PM CEST
libuuid-2.17.2-12.14.el6_5.x86_64             Wed 30 Apr 2014 11:37:18 PM CEST
libblkid-2.17.2-12.14.el6_5.x86_64            Wed 30 Apr 2014 11:37:18 PM CEST
vzkernel-2.6.32-042stab088.4.x86_64           Mon 26 Apr 2014 09:01:00 AM CEST
nss-softokn-freebl-3.14.3-10.el6_5.x86_64     Sat 26 Apr 2014 09:01:00 AM CEST
nss-softokn-3.14.3-10.el6_5.x86_64            Sat 26 Apr 2014 09:01:00 AM CEST
bridge-utils-1.2-10.el6.x86_64                Tue 15 Apr 2014 02:22:41 PM CEST
openssl-1.0.1e-16.el6_5.7.x86_64              Wed 09 Apr 2014 10:14:03 AM CEST
...

lsmod me dá o seguinte:

$ lsmod | grep ip
iptable_nat             6302  0
nf_nat                 23213  2 iptable_nat,vzrst
nf_conntrack_ipv4       9946  3 iptable_nat,nf_nat
nf_defrag_ipv4          1531  1 nf_conntrack_ipv4
nf_conntrack           80281  5 iptable_nat,vzrst,nf_nat,nf_conntrack_ipv4,vzcpt
ip6t_REJECT             4711  0
ip6table_mangle         3669  0
ip6table_filter         3033  0
ip6_tables             18988  2 ip6table_mangle,ip6table_filter
iptable_mangle          3493  0
iptable_filter          2937  0
xt_multiport            2716  0
ipt_REJECT              2399  0
ip_tables              18119  3 iptable_nat,iptable_mangle,iptable_filter
ipv6                  322519  35 vzrst,ip6t_REJECT,ip6table_mangle

A execução do modprobe apresenta o seguinte erro:

$ modprobe /lib/modules/2.6.32-042stab088.4/kernel/net/ipv4/netfilter/iptable_nat.ko
FATAL: Module /lib/modules/2.6.32_042stab088.4/kernel/net/ipv4/netfilter/iptable_nat.ko not found.

Mas o arquivo existe:

$ ll /lib/modules/2.6.32-042stab088.4/kernel/net/ipv4/netfilter/iptable_nat.ko
-rwxr--r-- 1 root root 16K Apr  3 16:20 /lib/modules/2.6.32-042stab088.4/kernel/net/ipv4/netfilter/iptable_nat.ko*

Alguma idéia?

    
por Lukas Schulze 05.05.2014 / 23:15

4 respostas

10

Devido à atualização do vzctl de 4.6 para 4.7 eles mudaram a configuração do nf_conntrack para ser desabilitado por padrão. ( link )

Mensagem de confirmação correspondente:

...

Disable conntrack for VE0 by default

IP conntrack functionality has some negative impact on venet performance (uo to about 10%), so they better be disabled by default.

...

(Source: http://git.openvz.org/?p=vzctl;a=commit;h=a191a462579ee)

Solução:

In dependence of distribution it is somewhere in /etc directory. Find it:

$ sudo grep -R "options nf_conntrack ip_conntrack_disable_ve0=1" /etc/modprobe.d/

and replace the "1" with "0":

options nf_conntrack ip_conntrack_disable_ve0=0

reboot your system

(Source: https://bugzilla.openvz.org/show_bug.cgi?id=2943#c5)

Como alternativa à reinicialização:

rmmod iptable_nat
rmmod nf_nat
rmmod nf_conntrack_ipv4
rmmod nf_conntrack

E nat agora trabalhando

Todas as fontes:

Changelog para vzctl 4.7: link

Relatório de erros com a solução nos comentários: link

Relatório de erros com a descrição resumida da solução: link

Correspondência de GIT correspondente: link

Artigo relacionado da Wiki: link

    
por 06.05.2014 / 10:50
4

Você deve ser superusuário para executar iptables . Portanto, execute-o como root .

$ iptables -t nat -L
iptables v1.4.19.1: can't initialize iptables table 'nat': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.

# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
[...]
    
por 05.05.2014 / 23:19
1

Parece que algo está errado com o arquivo? E se você tentar usar o modprobe /lib/modules/2.6.32-042stab088.4/kernel/net/ipv4/netfilter/iptable_nat.ko? O sistema realmente retorna um ENOENT (Nenhum arquivo ou diretório)? Eu não posso imaginar isso, mas talvez o SELinux esteja mexendo com o arquivo? E finalmente, talvez o arquivo / sistema de arquivos esteja corrompido. md5sum com uma boa versão conhecida. Ou apenas remova-o e copie um novo completamente. Espero que não seja o sistema de arquivos.

Tente isto: link

    
por 06.05.2014 / 01:10
0

Encontrei outra solução para esse problema! No nó eu não pude remover

rmmod iptable_nat
rmmod nf_nat
rmmod nf_conntrack_ipv4
rmmod nf_conntrack

no Guia Oficial, encontrei:

vzctl set VZID --netfilter full --save --setmode restart

    
por 10.02.2015 / 12:29