it-swarm-eu.dev

iptables v1.4.14: nie można zainicjalizować tabeli iptables `nat ': Tabela nie istnieje (czy potrzebujesz insmod?)

Próbuję ustawić reguły i otrzymałem następujący komunikat o błędzie, gdy używam iptable:

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.

Używam :

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

Jest to serwer wirtualny obsługiwany przez dostawcę usług.

Co mogę zrobić, aby rozwiązać ten problem?

25
Douglas

Miałem ten sam problem i to zadziałało:

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

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

13
conrad

Miałem ten sam problem z Debianem 8. Naprawiłem go, restartując system. Wydaje się, że błąd może wystąpić, jeśli obraz jądra został zaktualizowany i system nie został ponownie uruchomiony.

10
JayTheKay

Przydatne może być dodanie tego, że jeśli widzisz ten komunikat o błędzie i nie używasz jakiegoś ograniczonego hostingu opartego na kontenerach (np. OpenVZ), to może problem polega na tym, że w jądrze brakuje modułów nat. Aby sprawdzić uruchomienie:

modinfo iptable_nat

Które powinny wydrukować lokalizację modułu, jeśli wydrukuje BŁĄD, to wiesz, że to jest twój problem. Istnieją również zależne moduły, takie jak nf_nat, których może brakować, więc będziesz musiał kopać głębiej, jeśli moduł iptable_nat istnieje, ale zawiedzie. Jeśli go nie ma, musisz zdobyć kolejne jądro i moduły, lub jeśli tworzysz własne, upewnij się, że konfiguracja jądra zawiera CONFIG_IP_NF_NAT=m (dla NAT IPv4).

Aby uzyskać informacje, odpowiedni moduł jądra zwykle znajduje się w jednej z następujących lokalizacji:

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

A jeśli korzystasz z IPv6, spójrz tutaj:

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

Ostatecznie mój usługodawca odpowiedział:

Jest to ograniczenie systemu wirtualizacji, którego używamy (OpenVZ), podstawowe reguły iptables są możliwe, ale nie te, które używają nat stół. 

Jeśli to naprawdę problem, możemy zaoferować Ci migrację do innego wirtualizacja systemu (KVM), gdy zaczynamy oferować naszym klientom.

Więc musiałem przenieść mój serwer do nowego systemu ...

4
Douglas

Krótka wersja :

uruchom iptables na hoście przed uruchomieniem go na serwerze wirtualnym (jestem prawie pewien, że jest to jakiś rodzaj kontenera LXC lub OpenVZ).

Długa wersja :

Problem wynika z faktu, że moduł ip_table jest ładowany na żądanie. Tak więc po ponownym uruchomieniu na dowolnej maszynie, która nie ma załadowanych reguł iptables w czasie rozruchu, moduł ip_tables nie jest ładowany (brak zapotrzebowania na moduły == moduł nie jest ładowany). W związku z tym kontenery LXC lub OpenVZ nie mogą używać iptables (ponieważ dzielą jądro hosta, ale nie mogą modyfikować, które moduły są ładowane), dopóki host w jakiś sposób nie załaduje modułu ip_tables.

2
phep

„Funkcjonalność IP conntrack ma pewien negatywny wpływ na wydajność venet (uo do około 10%), więc lepiej być domyślnie wyłączonym.”

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

1
dragonfly

To rozwiązanie z oficjalnej wiki: 

vzctl set $CTID --netfilter full --save

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

0
J. Doe

sprawdź, czy włączony jest tun/tap:

cat /dev/net/tun

jeśli ok zobaczysz coś:

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

W nazwach tabel rozróżniana jest wielkość liter, więc powinieneś używać małych liter nat zamiast dużych liter NAT ..__ Na przykład;

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

Jeśli uruchamiasz marionetkę może ustawić /proc/sys/kernel/modules_disabled na 1, uniemożliwiając dalsze ładowanie modułu . Gdy komputer jest ponownie uruchamiany, zostaje przywrócony do 0, co pozwala na zmiany, takie jak ładowanie modułów iptables. Po pewnym czasie marionetka ustawi go z powrotem na 1, aby chronić system przed zestawami root jądra . Dlatego wszystkie moduły, których będziemy potrzebować powinny być ładowane podczas lub wkrótce po rozruchu.

0
dbkeys

W systemie OpenSUSE 15.3 dziennik systemowy zgłosił ten błąd (sugestia insmod była nieprzydatna).

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 rozwiązał problem

0
nmclough