it-swarm.com.de

iptables v1.4.14: iptables-Tabelle "nat" kann nicht initialisiert werden: Tabelle existiert nicht (müssen Sie insmod?)

Ich versuche, iptable-Regeln festzulegen, und ich habe folgende Fehlermeldung, wenn ich iptable verwende:

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

Ich benutze :

cat /etc/debian_version 
7.4

uname -a
Linux myserver 2.6.32-22-pve #1 SMP Mon Jul 15 08:36:46 CEST 2013 x86_64 GNU/Linux

uname -r
2.6.32-22-pve

Dies ist ein virtueller Server, der von einem Service Provider gehostet wird.

Was kann ich tun, um das zu lösen?

25
Douglas

Ich hatte das gleiche Problem und das hat funktioniert:

Sudo modprobe ip_tables
Sudo echo 'ip_tables' >> /etc/modules

http://www.howtoforge.com/forums/showthread.php?t=3196

13
conrad

Ich hatte das gleiche Problem mit Debian 8. Ich habe es durch einen Neustart des Systems behoben. Es scheint, dass der Fehler auftreten kann, wenn das Kernel-Image aktualisiert wurde und das System danach nicht neu gestartet wurde.

10
JayTheKay

Es kann nützlich sein, Folgendes hinzuzufügen: Wenn diese Fehlermeldung angezeigt wird und Sie keine beschränkte, auf Container basierende Hosting-Anwendung verwenden (z. B. OpenVZ), besteht das Problem möglicherweise darin, dass der Kernel die nat-Module nicht enthält. Lauf prüfen:

modinfo iptable_nat

Welches sollte die Position des Moduls ausgeben, wenn es einen FEHLER ausgibt, dann wissen Sie, dass dies Ihr Problem ist. Es gibt auch abhängige Module wie nf_nat, die möglicherweise fehlen. Daher müssen Sie tiefer graben, wenn das iptable_nat-Modul vorhanden ist, aber fehlschlägt. Wenn es fehlt, müssen Sie einen anderen Kernel und weitere Module erwerben, oder wenn Sie Ihr eigenes machen, stellen Sie sicher, dass die Kernel-Konfiguration CONFIG_IP_NF_NAT=m (für IPv4-NAT) enthält.

Zur Information befindet sich das relevante Kernel-Modul normalerweise an einer dieser Stellen:

ls /lib/modules/`uname -r`/kernel/net/netfilter/
ls /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/

Und wenn Sie IPv6 verwenden, schauen Sie auch hier:

ls /lib/modules/`uname -r`/kernel/net/ipv6/netfilter/
7
Pierz

Endlich antwortete mein Dienstleister:

Dies ist eine Einschränkung des von uns verwendeten Virtualisierungssystems (OpenVZ), Grundlegende iptables-Regeln sind möglich, nicht jedoch die, die nat .__ verwenden. Tabelle. 

Wenn dies wirklich ein Problem ist, können wir Ihnen die Migration zu einem anderen .__ anbieten. System-Virtualisierung (KVM), sobald wir unseren Kunden anbieten.

SO musste ich meinen Server auf das neue System migrieren ...

4
Douglas

Kurze Version:

führen Sie iptables auf dem Host aus, bevor Sie ihn auf dem virtuellen Server ausführen (ich bin mir ziemlich sicher, dass dies hier eine Art LXC- oder OpenVZ-Container ist).

Lange Version :

Das Problem ist darauf zurückzuführen, dass das ip_table-Modul bei Bedarf geladen wird. Daher wird nach einem Neustart auf einem Computer, auf dem keine iptables-Regeln zum Startzeitpunkt geladen sind, das ip_tables-Modul nicht geladen (keine Anforderung für die Module == das Modul wird nicht geladen). Folglich können die LXC- oder OpenVZ-Container keine iptables verwenden (da sie den Host-Kernel gemeinsam nutzen, aber nicht ändern können, welche Module geladen sind), bis der Host das ip_tables-Modul irgendwie geladen hat.

2
phep

"Die IP-Conntrack-Funktionalität hat einige negative Auswirkungen auf die Venet-Leistung (bis zu etwa 10%). Sie sollten daher standardmäßig deaktiviert werden."

https://serverfault.com/questions/593263/iptables-nat-does-not-exist

1
dragonfly

Diese Lösung aus dem offiziellen Wiki: 

vzctl set $CTID --netfilter full --save

https://openvz.org/VPN_via_the_TUN/TAP_device#Fehlerbehebung

0
J. Doe

prüfen Sie, ob Tun/Tap aktiviert ist:

cat /dev/net/tun

wenn ok wird etwas sehen:

cat: /dev/net/tun: File descriptor in bad state
0
user2514964

Bei den Tabellennamen wird zwischen Groß- und Kleinschreibung unterschieden. Daher sollten Sie nat in Kleinbuchstaben anstelle von NAT ..__ in Großbuchstaben verwenden.

iptables -t nat -A POSTROUTING -s 192.168.1.1/24 -o eth0 -j MASQUERADE
0
cyb0k

Wenn Sie puppet ausführen, kann /proc/sys/kernel/modules_disabled auf 1 gesetzt werden, wodurch das Laden weiterer Module verhindert wird. Wenn der Computer neu gestartet wird, wird er auf 0 zurückgesetzt, sodass Änderungen vorgenommen werden können, z. Nach einer gewissen Zeit setzt puppet wieder auf 1, um das System vor Kernel-Root-Kits zu schützen . Daher sollten alle Module, die wir benötigen, während oder kurz nach der Boot-Zeit geladen werden.

0
dbkeys

In OpenSUSE 15.3 meldete das systemd-Protokoll diesen Fehler (Insmod-Vorschlag war nicht hilfreich).

Feb 18 08:36:38 vagrant-openSUSE-Leap dockerd[20635]: iptables v1.6.2: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)

REBOOT hat das Problem behoben

0
nmclough