iptables nat nie istnieje

13

Dzisiaj mój iptables nat w systemie hosta przestał działać i nie mam pojęcia, co się stało! (To bardzo źle, wiem)

Wszystkie polecenia są wykonywane jako użytkownik root.

Po uruchomieniu $ iptables -t nat -Lpojawia się następujący komunikat o błędzie:

$ 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.

Brak dostępnych dalszych aktualizacji. Zrestartowałem również serwer przy użyciu kilku starszych jąder, ale zawsze pojawia się ten sam komunikat o błędzie.

Mój serwer działa na CentOS z oficjalnym jądrem OpenVZ w najnowszej wersji.

$ uname -r
2.6.32-042stab088.4

Przetestowano również wersję jądra: 2.6.32-042stab85.20 i 2.6.32-042stab084.26

Pierwsze jądro w 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

Zainstalowano następujące aktualizacje:

$ 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 daje mi następujące:

$ 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

Uruchomienie modprobe daje następujący błąd:

$ 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.

Ale plik istnieje:

$ 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*

Jakieś pomysły?

Lukas Schulze
źródło
Niektóre konfiguracje OpenVZ nie włączają NAT u gości. Czy coś się zmieniło na hoście?
Zoredache
To jest system hosta, a nie gość.
Lukas Schulze

Odpowiedzi:

10

Z powodu aktualizacji vzctl z 4.6 do 4.7 zmieniono ustawienie domyślnego wyłączenia nf_conntrack. ( https://openvz.org/Download/vzctl/4.7/changes )

Odpowiadający komunikat zatwierdzenia:

...

Domyślnie wyłącz conntrack dla VE0

Funkcjonalność konwersji IP ma pewien negatywny wpływ na wydajność wenet (od około 10%), więc lepiej domyślnie wyłączyć.

...

(Źródło: http://git.openvz.org/?p=vzctl;a=commit;h=a191a462579ee )

Rozwiązanie:

W zależności od dystrybucji znajduje się gdzieś w katalogu / etc. Znajdź to:

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

i zamień „1” na „0”:

opcje nf_conntrack ip_conntrack_disable_ve0 = 0

uruchom ponownie system

(Źródło: https://bugzilla.openvz.org/show_bug.cgi?id=2943#c5 )

Alternatywnie do ponownego uruchomienia:

rmmod iptable_nat
rmmod nf_nat
rmmod nf_conntrack_ipv4
rmmod nf_conntrack

I nat teraz działa

Wszystkie źródła:

Dziennik zmian dla vzctl 4.7: https://openvz.org/Download/vzctl/4.7/changes

Raport o błędzie z rozwiązaniem w komentarzach: https://bugzilla.openvz.org/show_bug.cgi?id=2943

Raport o błędach ze skróconym opisem rozwiązania: https://bugzilla.openvz.org/show_bug.cgi?id=2755#c4

Odpowiednie zatwierdzenie GIT: http://git.openvz.org/?p=vzctl;a=commit;h=a191a462579ee

Powiązany artykuł na wiki: https://openvz.org/NAT#IP_conntracks

Lukas Schulze
źródło
4

Musisz być superużytkownikiem, aby uruchomić iptables. Dlatego uruchom go jako 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
[...]
Spack
źródło
1
Jestem już zalogowany jako użytkownik root.
Lukas Schulze
1

Wydaje się, że coś jest nie tak z plikiem? Co się stanie, jeśli spróbujesz zastosować modprobe /lib/modules/2.6.32-042stab088.4/kernel/net/ipv4/netfilter/iptable_nat.ko? Czy system naprawdę zwraca ENOENT (brak takiego pliku lub katalogu)? Nie mogę sobie wyobrazić, że to by było na tyle, ale może SELinux ma problem z plikiem? I wreszcie może plik / system plików jest uszkodzony. md5sum to znaną dobrą wersją. Lub po prostu usuń go i skopiuj zupełnie nowy. Mam nadzieję, że to nie jest system plików.

Spróbuj tego: /programming/3140478/fatal-module-not-found-error-using-modprobe

majikman
źródło
0

Znalazłem inne rozwiązanie tego problemu! W węźle nie mogłem usunąć

rmmod iptable_nat
rmmod nf_nat
rmmod nf_conntrack_ipv4
rmmod nf_conntrack

w oficjalnym przewodniku znalazłem:

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

Дмаи Летов
źródło