1) "iptables" adalah aplikasi userland yang berhubungan dengan modul kernel ip_tables. Tampaknya Anda sudah memiliki /bin/iptables tetapi kernel Anda belum menyertakan/memuat ip_tables.ko
2) jika kernel Anda tidak mendukung ip_tables, distro Anda mungkin menyertakannya sebagai modul kernel yang dapat dimuat di:
/lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_tables.ko
di mana uname -r
adalah versi kernel yaitu 3.5.0-18-generic
jika Anda menemukan ip_tables.ko, Anda dapat mencoba
#depmod
#modprobe ip_tables
atau
#insmod /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_tables.ko
tergantung apakah distro Anda menyertakan aplikasi depmod/modprobe/insmod asli atau yang diimplementasikan oleh busybox, Anda mungkin mengalami beberapa masalah tambahan seperti masalah jalur relatif atau modul kernel terkompresi yang tidak ditangani dengan benar bergantung pada versi busybox.
3) jika ip_tables.ko tidak tersedia, Anda harus membangun kembali kernel dengan dukungan ip_table atau sebagai modul eksternal yang dapat dimuat. Dalam kasus terakhir setelah membuat ip_tables.ko kembali ke 2).
TL;DR
-
Perbarui kernel Anda:
sudo pacman -S linux
-
Perbarui bootloader Anda:
bootctl --path=/boot install
-
Mulai ulang
Pagi ini saya mengalami masalah yang sama saat mencoba mengonfigurasi iptables:
[[email protected] /]# iptables -t nat -A POSTROUTING -o enp0s31f6 -j MASQUERADE
iptables v1.6.0: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
Saya menggunakan versi iptables:
[[email protected] /]# pacman -Q iptables
iptables 1.6.0-1
Apa yang terjadi?
Apakah modul kernel ip_tables benar-benar ada?
[[email protected] /]# /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_tables.ko
bash: /lib/modules/4.8.13-1-ARCH/kernel/net/ipv4/netfilter/ip_tables.ko: No such file or directory
[[email protected] /]# modprobe ip_tables
modprobe: FATAL: Module ip_tables not found in directory /lib/modules/4.8.13-1-ARCH
hmmm.... Sepertinya sudah menghilang! Mari kita cari tahu:1. Kernel apa yang digunakan komputer saya?2. Apakah ini mendukung iptables?
[[email protected] /]# uname -r
4.8.13-1-ARCH
[[email protected] /]# cat /proc/sys/kernel/osrelease
4.8.13-1-ARCH
[[email protected] /]# zgrep IPTABLES /proc/config.gz
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP6_NF_IPTABLES=m
Oke.... Ini aneh karena ini adalah kernel Arch Linux standar, dan mendukung iptables.
Mari kita lihat apakah ada modul netfilter yang tersedia (saya akan sangat terkejut jika tidak ada karena sangat tidak mungkin sesuatu akan menghapusnya):
[[email protected] /]# ls /lib/modules/*/kernel/net/*/netfilter/
/lib/modules/4.9.11-1-ARCH/kernel/net/bridge/netfilter/:
ebt_802_3.ko.gz ebtables.ko.gz ebt_dnat.ko.gz ebt_log.ko.gz ebt_pkttype.ko.gz ebt_vlan.ko.gz nft_reject_bridge.ko.gz
ebtable_broute.ko.gz ebt_among.ko.gz ebt_ip6.ko.gz ebt_mark.ko.gz ebt_redirect.ko.gz nf_log_bridge.ko.gz
ebtable_filter.ko.gz ebt_arp.ko.gz ebt_ip.ko.gz ebt_mark_m.ko.gz ebt_snat.ko.gz nf_tables_bridge.ko.gz
ebtable_nat.ko.gz ebt_arpreply.ko.gz ebt_limit.ko.gz ebt_nflog.ko.gz ebt_stp.ko.gz nft_meta_bridge.ko.gz
/lib/modules/4.9.11-1-ARCH/kernel/net/ipv4/netfilter/:
arptable_filter.ko.gz ip_tables.ko.gz nf_conntrack_ipv4.ko.gz nf_nat_pptp.ko.gz nft_dup_ipv4.ko.gz
arp_tables.ko.gz ipt_ah.ko.gz nf_defrag_ipv4.ko.gz nf_nat_proto_gre.ko.gz nft_masq_ipv4.ko.gz
arpt_mangle.ko.gz ipt_CLUSTERIP.ko.gz nf_dup_ipv4.ko.gz nf_nat_snmp_basic.ko.gz nft_redir_ipv4.ko.gz
iptable_filter.ko.gz ipt_ECN.ko.gz nf_log_arp.ko.gz nf_reject_ipv4.ko.gz nft_reject_ipv4.ko.gz
iptable_mangle.ko.gz ipt_MASQUERADE.ko.gz nf_log_ipv4.ko.gz nf_tables_arp.ko.gz
iptable_nat.ko.gz ipt_REJECT.ko.gz nf_nat_h323.ko.gz nf_tables_ipv4.ko.gz
iptable_raw.ko.gz ipt_rpfilter.ko.gz nf_nat_ipv4.ko.gz nft_chain_nat_ipv4.ko.gz
iptable_security.ko.gz ipt_SYNPROXY.ko.gz nf_nat_masquerade_ipv4.ko.gz nft_chain_route_ipv4.ko.gz
/lib/modules/4.9.11-1-ARCH/kernel/net/ipv6/netfilter/:
ip6table_filter.ko.gz ip6t_ah.ko.gz ip6t_mh.ko.gz nf_conntrack_ipv6.ko.gz nf_reject_ipv6.ko.gz nft_redir_ipv6.ko.gz
ip6table_mangle.ko.gz ip6t_eui64.ko.gz ip6t_NPT.ko.gz nf_defrag_ipv6.ko.gz nf_tables_ipv6.ko.gz nft_reject_ipv6.ko.gz
ip6table_nat.ko.gz ip6t_frag.ko.gz ip6t_REJECT.ko.gz nf_dup_ipv6.ko.gz nft_chain_nat_ipv6.ko.gz
ip6table_raw.ko.gz ip6t_hbh.ko.gz ip6t_rpfilter.ko.gz nf_log_ipv6.ko.gz nft_chain_route_ipv6.ko.gz
ip6table_security.ko.gz ip6t_ipv6header.ko.gz ip6t_rt.ko.gz nf_nat_ipv6.ko.gz nft_dup_ipv6.ko.gz
ip6_tables.ko.gz ip6t_MASQUERADE.ko.gz ip6t_SYNPROXY.ko.gz nf_nat_masquerade_ipv6.ko.gz nft_masq_ipv6.ko.gz
Jadi ada petunjuk di sini; tampaknya saya memiliki kernel yang tidak cocok (ada modul kernel untuk versi kernel:/lib/modules/4.9.11-1 yang tidak cocok dengan kernel yang berjalan di komputer saya - 4.9.13-1). Jadi mari kita periksa untuk melihat apakah ada modul yang tersedia untuk kernel yang berjalan di komputer saya:
[[email protected] /]# ls /lib/modules/4.8.13-1-ARCH
ls: cannot access '/lib/modules/4.8.13-1-ARCH': No such file or directory
Tidak! Jadi ini kemungkinan besar menjadi akar penyebab masalah; kernel yang berjalan di mesin saya tidak memiliki modul yang dapat dimuat (tidak bagus). Mari kita coba memperbaikinya dengan memperbarui (dalam kasus saya, menurunkan versi) kernel, karena saya menggunakan kernel Arch Linux standar yang berada di bawah kontrol versi pacman, saya cukup menjalankan pacman untuk memperbaruinya (jika Anda menggunakan kernel khusus yang masalah yang dapat Anda pecahkan):
[[email protected] /]# sudo pacman -S linux
...
Packages (1) linux-4.9.11-1
...
Besar! pacman akan menginstal kernel 4.9.11-1, yang saya inginkan (Saya memiliki modul untuk kernel ini - saya tidak tahu bagaimana akhirnya saya mendapatkan Kernel 4.9.13). Biarkan pacman menyelesaikan instalasi.
Terakhir, saya perlu memastikan kernel ini akan digunakan saat mem-boot mesin. Jadi saya perlu memperbarui boot manager (saya menggunakan systemd-boot). - Saya memiliki partisi boot yang di-mount ke /boot- Hapus file loader.conf:/boot/loader/loader.conf (itu akan diperbarui saat menjalankan bootctl di bawah dan bootctl tidak akan memperbaruinya jika sudah ada)- Jalankan bootctl untuk memperbarui manajer boot:
[[email protected] /]$ bootctl --path=/boot install
Sekarang reboot komputer.... Ketika reboot seharusnya menggunakan kernel baru (diturunkan)!
Setelah di-boot, dan Anda telah masuk, periksa versi kernel untuk memastikan kernel yang benar sedang berjalan:
[[email protected] /]$ uname -r
4.9.11-1-ARCH
Sekarang coba jalankan perintah asli (untuk mengatur iptables internet sharing)
[[email protected] /]$ sudo iptables -t nat -A POSTROUTING -o enp0s31f6 -j MASQUERADE
[[email protected] /]$ sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
[[email protected] /]$ sudo iptables -A FORWARD -i enp0s20f0u4u3 -o enp0s31f6 -j ACCEPT
Woo-hoo Masalah teratasi! (perhatikan saya masuk sebagai pengguna root untuk memperbaiki masalah ini - saya tidak akan merekomendasikan melakukan ini kecuali Anda yakin Anda tahu apa yang Anda lakukan!)