(Fortsetzun)
Dann kann es jetzt an das eigentliche Problem mit "iptables" gehen. Voraussetzung, daß es funktionieren könnte, sind ein paar Einträge im Kernelscript. Der Auszug aus /usr/src/linux/.config wird jetzt leider eine etwas längere Liste:
#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_NETLINK_DEV=y
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_FWMARK=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_NET_IPIP=m
CONFIG_NET_IPGRE=m
CONFIG_NET_IPGRE_BROADCAST=yiptables -t nat -nvL
CONFIG_IP_MROUTE=y
CONFIG_SYN_COOKIES=y
CONFIG_INET_TUNNEL=m
[...]
#
# IP: Netfilter Configuration
#
CONFIG_IP_NF_CONNTRACK=y
CONFIG_IP_NF_CT_ACCT=y
CONFIG_IP_NF_CT_PROTO_SCTP=m
CONFIG_IP_NF_FTP=y
CONFIG_IP_NF_TFTP=m
CONFIG_IP_NF_QUEUE=m
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_MATCH_LIMIT=y
CONFIG_IP_NF_MATCH_IPRANGE=y
CONFIG_IP_NF_MATCH_MAC=y
CONFIG_IP_NF_MATCH_PKTTYPE=y
CONFIG_IP_NF_MATCH_MARK=y
CONFIG_IP_NF_MATCH_MULTIPORT=y
CONFIG_IP_NF_MATCH_TOS=y
CONFIG_IP_NF_MATCH_RECENT=y
CONFIG_IP_NF_MATCH_ECN=y
CONFIG_IP_NF_MATCH_DSCP=y
CONFIG_IP_NF_MATCH_AH_ESP=y
CONFIG_IP_NF_MATCH_LENGTH=y
CONFIG_IP_NF_MATCH_TTL=y
CONFIG_IP_NF_MATCH_TCPMSS=y
CONFIG_IP_NF_MATCH_HELPER=y
CONFIG_IP_NF_MATCH_STATE=y
CONFIG_IP_NF_MATCH_CONNTRACK=y
CONFIG_IP_NF_MATCH_OWNER=y
CONFIG_IP_NF_MATCH_PHYSDEV=y
CONFIG_IP_NF_MATCH_ADDRTYPE=y
CONFIG_IP_NF_MATCH_REALM=y
CONFIG_IP_NF_MATCH_SCTP=y
CONFIG_IP_NF_MATCH_COMMENT=y
CONFIG_IP_NF_FILTER=y
CONFIG_IP_NF_TARGET_REJECT=y
CONFIG_IP_NF_TARGET_LOG=y
CONFIG_IP_NF_TARGET_ULOG=y
CONFIG_IP_NF_TARGET_TCPMSS=y
CONFIG_IP_NF_NAT=y
CONFIG_IP_NF_NAT_NEEDED=y
CONFIG_IP_NF_TARGET_MASQUERADE=y
CONFIG_IP_NF_TARGET_REDIRECT=y
CONFIG_IP_NF_TARGET_NETMAP=y
CONFIG_IP_NF_TARGET_SAME=y
CONFIG_IP_NF_NAT_LOCAL=y
CONFIG_IP_NF_NAT_SNMP_BASIC=m
CONFIG_IP_NF_NAT_FTP=y
CONFIG_IP_NF_NAT_TFTP=m
CONFIG_IP_NF_MANGLE=y
CONFIG_IP_NF_TARGET_TOS=y
CONFIG_IP_NF_TARGET_ECN=y
CONFIG_IP_NF_TARGET_DSCP=y
CONFIG_IP_NF_TARGET_MARK=y
CONFIG_IP_NF_TARGET_CLASSIFY=y
CONFIG_IP_NF_RAW=y
CONFIG_IP_NF_TARGET_NOTRACK=m
CONFIG_IP_NF_ARPTABLES=y
CONFIG_IP_NF_ARPFILTER=m
CONFIG_IP_NF_ARP_MANGLE=m
Es ist zu sehen, daß ich alles, was mir irgendwie wichtig erschien, vorsichtshalbe fest in den Kernel gepackt und nur ganz wenige Module gebaut habe. Mein Kernel (ich habe es sowohl mit 2.6.9 wie auch mit dem neuen 2.6.10 probiert) _sollte_ also eigentlich alles Wichtige enthalten, oder siehst du das anders?
Selbstverständlich ist ein "emerge iptables" auch gelaufen, das heißt, die iptables-Software (1.2.11) ist vorhanden und korrekt installiert. Und da ich ein "rc-update add iptables default" getippt habe, wird es mir mit "rc-update -s" auch als aktiver Dienst gelistet:
bash-2.05b# rc-update -s
[...]
hotplug | default
ip6tables |
iptables | default
keymaps | boot
[...]
Wenn ich nach dem Kernelbacken und der Software-Installation noch gar nix weiter mache, sondern nur mal den Rechner neu starte, sehe ich unter den Bootmeldungen mit zwei roten Ausrufezeichen als Warnung markiert den Hinweis:
pc1 rc-scripts: Not starting iptables. First create some
rules then run
pc1 rc-scripts: /etc/init.d/iptables save
Das ist prima, weil es zeigt, daß meine iptables-Software zwar loasarbeiten möchte, bisher aber noch gar keine Regeln definiert sind. Wenn ich jetzt wie verlangt einfach nur
/etc/init.d/iptables save
vorgebe, ohne irgendeine "rule" festzulegen, wird ein gewissermaßen "leeres" Script in /var/lib/iptables/routes-save erzeugt, das allerdings bewirkt, daß ich bei einem unmittelbar folgenden reboot keine solche Fehlermeldungen mehr in den Startanzeigen sehe, sondern stattdessen dort steht:
* Loading iptables state and starting firewall ...
* Restoring iptables ruleset
* Mounting network filesystems ...
Wenn ich jetzt dein gewünschtes "iptables -t nat -vnL" eingebe, bekomme ich selbstverständlich nichts angezeigt, es existieren noch keine Regeln. Ich gebe also einfach mal deinen Vorschlag aus https://forum.selfhtml.org/?t=97300&m=592421 ein:
iptables -A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
iptables -A FORWARD -j REJECT --reject-with icmp-net-prohibited
iptables -P FORWARD DROP
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Den Effekt kan ich mit "iptables -t nat -vnL" abfragen:
bash-2.05b# iptables -t nat -vnL
Chain PREROUTING (policy ACCEPT 251K packets, 13M bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 131K packets, 7298K bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * ppp0 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 241K packets, 14M bytes)
pkts bytes target prot opt in out source destination
bash-2.05b#
Meine SuSE-Kiste sagt mir bei einem schlichten ping aber:
pc2:~ # ping www.google.de
pc2:~ # unknown host www.google.de
Und das wars. Er geht nicht online.
Du hast noch auf die mir bereits bekannte Adresse http://www.gentoo.org/doc/en/home-router-howto.xml verwiesen. Wenn ich das, was dort als funktionierende Lösung vorgeschlagen wird, etwas modifiziere, gebe ich ein:
iptables -I INPUT 1 -i eth0 -j ACCEPT
iptables -I INPUT 1 -i lo -j ACCEPT
iptables -A INPUT -p UDP --dport bootps -i ! eth0 -j REJECT
iptables -A INPUT -p UDP --dport domain -i ! eth1 -j REJECT
iptables -I FORWARD -i eth0 -d 192.168.0.0/255.255.255.0 -j ACCEPT
iptables -A FORWARD -i eth0 -s 192.168.0.0/255.255.255.0 -j ACCEPT
iptables -A FORWARD -i eth1 -d 192.168.0.0/255.255.255.0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Den Effekt kan ich wieder mit "iptables -t nat -vnL" abfragen:
bash-2.05b# iptables -t nat -vnL
Chain PREROUTING (policy ACCEPT 251K packets, 13M bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 131K packets, 7299K bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0
0 0 MASQUERADE all -- * eth1 0.0.0.0/0 0.0.0.0/0
0 0 MASQUERADE all -- * ppp0 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 241K packets, 14M bytes)
pkts bytes target prot opt in out source destination
So weit ich das beurteilen kann, sieht das korrekt aus.
Meine SuSE-Kiste sagt mir bei einem schlichten ping aber wiederum:
pc2:~ # ping www.google.de
pc2:~ # unknown host www.google.de
Und das wars dann.
Ich habe mich gewiß an vielen Stellen zu belesen versucht. Aber es steckt irgendwo noch ein Fehler drin, auf den ich nicht komme. Selbstverständlich habe ich auch eine Menge weiterer iptables-Befehlszeilen ausprobiert, alles bisher ohne Erfolg.
Grüße
Christoph S.
mailto:christoph.schnauss@berlin.de
http://www.christoph-schnauss.de
ss:| zu:) ls:& fo:) va:) sh:| rl:|