Newsgroup: it.comp.os.linux.sys
Titolo: iptables rifiuta di MASQUERarmi!! Aiuto!

Come da oggetto. La regola semrba corretta(almeno è para para agli howto
che ho), quindi non capisco.
Allora, ricompilo il kernel da zero controllando di abilitare tutto il
supporto necessario(segue estratto del mio .config relativo a netfilter),
installo e riavvio. Dopodiché, piglio la mia bella configurazione di
iptables:
# Generated by iptables-save v1.2.7a on Fri Jun 13 15:51:01 2003
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [7320:1956244]
:log_drop - [0:0]
[3483:1582249] -A INPUT -i lo -j ACCEPT
[0:0] -A INPUT -i tap0 -j ACCEPT
[0:0] -A INPUT -i tap1 -j ACCEPT
[2:120] -A INPUT -p icmp -m icmp ! --icmp-type 0 -j log_drop
[0:0] -A INPUT -p tcp -m tcp --dport 6000 -j log_drop
[0:0] -A INPUT -p tcp -m tcp --dport 631 -j log_drop
[0:0] -A INPUT -p udp -m udp --dport 631 -j log_drop
[0:0] -A INPUT -p udp -m udp --dport 833 -j log_drop
[18:864] -A INPUT -p tcp -m tcp --dport 80 -j log_drop
[0:0] -A INPUT -p tcp -m tcp --dport 8080 -j log_drop
[3074:1536996] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[0:0] -A INPUT -p udp -m udp --dport 4665 -j ACCEPT
[0:0] -A INPUT -p tcp -m tcp --dport 4661:4662 -j ACCEPT
[93:4124] -A INPUT -j log_drop
[0:0] -A FORWARD -j DROP
[0:0] -A FORWARD -i tap+ -m state --state NEW,RELATED,ESTABLISHED -j
ACCEPT
[0:0] -A FORWARD -o tap+ -m state --state RELATED,ESTABLISHED -j ACCEPT
[0:0] -A log_drop -j LOG --log-prefix "[iptables] DROP: "
[0:0] -A log_drop -p tcp -j REJECT --reject-with tcp-reset
[113:5108] -A log_drop -j DROP
COMMIT
# Completed on Fri Jun 13 15:51:01 2003
# Generated by iptables-save v1.2.7a on Fri Jun 13 15:51:01 2003
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Fri Jun 13 15:51:01 2003
E provo ad aggiungere una qualunque delle seguenti regole(l'una qualunque
deriva dal fatto che sono al 2^n-esimo tentativo):
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 123.12.23.43
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE #quella che mi serve
davvero, presa da un HOWTO
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A POSTROUTING -j SNAT --to 192.168.0.1
ottenendo invariabilmente un laconico:
iptables: Invalid argument
Ma la catena funziona:
iptables -t nat -A POSTROUTING -j DROP
è ok.
Ho anche provato ad azzerare tutte le regole e ad aggiungere quelle di
masquerading, ma il risultato è quello.
Riguardo ai flag del kernel, /proc/sys/net/ipv4/ip_forward e
/proc/sys/net/ipv4/ip_dynaddr sono entrambi 1.
Tra l'altro, le regole sono corrette(controllato 10000 volte la man page e
risulta para para nell'HOWTO), e i moduli sembrano compilati e caricati:
ipt_MASQUERADE          1464   0
ipt_REJECT              2936   1  (autoclean)
ipt_LOG                 3448   1  (autoclean)
ipt_state                568   3  (autoclean)
iptable_filter          1740   1  (autoclean)
iptable_nat            16856   0  (autoclean) [ipt_MASQUERADE]
ip_conntrack           21440   2  (autoclean) [ipt_MASQUERADE ipt_state
iptable_nat]
(ip_tables è compilato staticamente nel kernel).
Ho provato strace iptables e ottengo questa parte interessante:
socket(PF_INET, SOCK_RAW, IPPROTO_RAW)  = 3
getsockopt(3, SOL_IP, 0x40 /* IP_??? */,
"nat\0\310\367\334\3264.\33\300\0P\313\326\0
\20\0\0 \312"..., [84]) = 0
getsockopt(3, SOL_IP, 0x41 /* IP_??? */,
"nat\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
\0\0\0\0\0"..., [656]) = 0
setsockopt(3, SOL_IP, 0x40 /* IP_??? */,
"nat\0004\234\25@\310\367\334\3264.\33
\300\0P\313\326\0"..., 880) = -1 EINVAL (Invalid argument)
write(2, "iptables: Invalid argument\n", 27) = 27
Cioè, fallisce la Syscall con errore EINVAL. Tenendo conto che questa è la
configurazione del kernel, qualcuno può aiutarmi?
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
# CONFIG_FILTER is not set
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
# CONFIG_IP_PNP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
# CONFIG_INET_ECN is not set
CONFIG_SYN_COOKIES=y
#
#   IP: Netfilter Configuration
#
CONFIG_IP_NF_CONNTRACK=m
CONFIG_IP_NF_FTP=m
CONFIG_IP_NF_IRC=m
# CONFIG_IP_NF_QUEUE is not set
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_MATCH_LIMIT=m
# CONFIG_IP_NF_MATCH_MAC is not set
# CONFIG_IP_NF_MATCH_PKTTYPE is not set
# CONFIG_IP_NF_MATCH_MARK is not set
# CONFIG_IP_NF_MATCH_MULTIPORT is not set
# CONFIG_IP_NF_MATCH_TOS is not set
# CONFIG_IP_NF_MATCH_ECN is not set
# CONFIG_IP_NF_MATCH_DSCP is not set
# CONFIG_IP_NF_MATCH_AH_ESP is not set
# CONFIG_IP_NF_MATCH_LENGTH is not set
# CONFIG_IP_NF_MATCH_TTL is not set
# CONFIG_IP_NF_MATCH_TCPMSS is not set
CONFIG_IP_NF_MATCH_HELPER=m
CONFIG_IP_NF_MATCH_STATE=m
CONFIG_IP_NF_MATCH_CONNTRACK=m
CONFIG_IP_NF_MATCH_UNCLEAN=m
CONFIG_IP_NF_MATCH_OWNER=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
# CONFIG_IP_NF_TARGET_MIRROR is not set
CONFIG_IP_NF_NAT=m
CONFIG_IP_NF_NAT_NEEDED=y
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP_NF_TARGET_REDIRECT=m
# CONFIG_IP_NF_NAT_LOCAL is not set
# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
CONFIG_IP_NF_NAT_IRC=m
CONFIG_IP_NF_NAT_FTP=m
# CONFIG_IP_NF_MANGLE is not set
CONFIG_IP_NF_TARGET_LOG=m
# CONFIG_IP_NF_TARGET_ULOG is not set
# CONFIG_IP_NF_TARGET_TCPMSS is not set
# CONFIG_IP_NF_ARPTABLES is not set
-- 
cat <<EOSIGN
Paolo Giarrusso, aka Blaisorblade(togliere solo REMOVEONLYTHIS per rispondere)
Kernel 2.4.20/2.5.63 on an i686; Linux registered user n. 292729
EOSIGN

 Cioè, fallisce la Syscall con errore EINVAL.
deriva dal fatto che si tratta di un kernel parecchio patchato. Si tratta
di un 2.4.20 vanilla + il ck7 scaricato da
http://members.optusnet.com.au/ckolivas/kernel/index.html
 (qualche tempo
fa, prima dell'uscita del 2.4.21) + la relativa fix(sempre dalla stessa
pagina, era la "important fix to apply")
+ una patch molto leggera(del .19 l'ho applicata sul .20 e ha funzionato,
e sul sito lo dice che dovrebbe comunque funzionare): da
http://user-mode-linux.sourceforge.net/dl-sf.html
, la host-skas3.patch in
fondo. Nessuna di queste patch interagisce con la rete, quindi non capisco
il perché. C'è nessuno che mi può aiutare/consigliare?
