Server als Gateway nutzen

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Server als Gateway nutzen

Beitrag von Duff » 25.09.2008 16:44:36

Hallo,

ich wollte soeben mal meinen Home-Server neu konfigurieren bzw. die Netzwerktopologie ein wenig umstellen. Dazu wollte ich den Server mit 2 NICs als Gateway hinter einem Router verwenden.

Skizze:

Internet <---> Fritzbox (interne IP: 192.168.1.1) <---> 1. NIC (192.168.1.98) SERVER 2. NIC 192.168.3.99 <---> SWITCH <---> LAN (192.168.3.0).

Habe dieses Szenario mit IP-Adressen in verschiedenen Netzen als auch im gleichen Netz (also 192.168.1.0) probiert.

Vom Client aus kann ich aber immer nur bis zur ersten NIC des Server pingen, sprich die 192.168.1.98. Vom Server kann ich aber ins Internet pingen.

Habe auf dem Server folgendes eingestellt:

Code: Alles auswählen

root@homer:/var/log# cat /proc/sys/net/ipv4/ip_forward
1
root@homer:/var/log# route -n
Kernel IP Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
10.8.0.2        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
192.168.3.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.8.0.0        10.8.0.2        255.255.255.0   UG    0      0        0 tun0
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
root@homer:/var/log# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#allow-hotplug eth0
auto eth0
iface eth0 inet static
        address 192.168.1.98
        netmask 255.255.255.0
        gateway 192.168.1.1

# The secondary network interface
#allow-hotplug eth0
auto eth1
iface eth1 inet static
        address 192.168.3.99
        netmask 255.255.255.0
        gateway 192.168.1.98
root@homer:/var/log# ping www.google.de -c3
PING www.l.google.com (209.85.135.103) 56(84) bytes of data.
64 bytes from mu-in-f103.google.com (209.85.135.103): icmp_seq=1 ttl=247 time=61.5 ms
64 bytes from mu-in-f103.google.com (209.85.135.103): icmp_seq=2 ttl=247 time=62.1 ms
64 bytes from mu-in-f103.google.com (209.85.135.103): icmp_seq=3 ttl=247 time=60.9 ms

--- www.l.google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 60.926/61.549/62.150/0.539 ms
Auf dem Client habe ich als Gateway die IP-Adresse 192.168.3.99 eingetragen.


Habe ich irgendwas vergessen???
Oh, yeah!

Benutzeravatar
DynaBlaster
Beiträge: 958
Registriert: 25.03.2004 18:18:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DF0://dynablaster.adf

Re: Server als Gateway nutzen

Beitrag von DynaBlaster » 25.09.2008 16:54:40

1. Du musst auf dem Server ip_forward aktivieren (Forumssuche !)
2. Du darfst die Rückroute für die Pakete nicht vergessen. Sprich du solltest auf der Fritz-Box eine statische Route für das Netz 192.168.3.0/24 über 192.168.1.98 eintragen; sonst weiss die Fritz-Box nicht, wie sie dieses Netz erreichen soll und schickt alles über sein Standard-Gateway raus, sprich ins Internet wo die Pakete dann verworfen werden. Alternativ kannst du das Netz 192.168.3.0/24 auf dem Server "natten" und die Routing-Problematik damit umgehen (auch hier gilt: Forumssuche).

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Server als Gateway nutzen

Beitrag von Duff » 25.09.2008 17:04:43

Danke für die schnelle Antwort.

IP_Forwarding habe ich aktiviert.

Code: Alles auswählen

root@homer:/var/log# cat /proc/sys/net/ipv4/ip_forward
1
Dann wird es wohl an der Rückroute liegen. Wobei ich lieber alles auf dem Server konfigurieren möchte.

Ist es sinnvoller ein Netz zu nehmen (192.168.1.0) oder zwei verschiedene???
Oh, yeah!

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Server als Gateway nutzen

Beitrag von Duff » 25.09.2008 17:13:08

Zum Thema "natten", müsste dies dann so funktionieren???

eth1=192.168.3.99
eth0=192.168.1.98

Code: Alles auswählen

iptables -A POSTROUTING -t nat -s eth1 -o eth0 -j MASQUERADE
Oh, yeah!

Benutzeravatar
DynaBlaster
Beiträge: 958
Registriert: 25.03.2004 18:18:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DF0://dynablaster.adf

Re: Server als Gateway nutzen

Beitrag von DynaBlaster » 25.09.2008 17:39:25

Der Parameter -s bestimmt eine bestimmte IP oder ein bestimmtes Netz (also z.B. -s 192.168.3.0/24). Für ein Interface, auf dem Netzwerkpakte ankommen, ist der Schalter -i zuständig. Also:

Code: Alles auswählen

iptables -t nat -A POSTROUTING -i eth1 -o eth0 -j MASQUERADE
Da du auf dem Server statische IP-Adressen verwendest, waär SNAT dem MASQUERADE vorzuziehen, da es etwas ressourcenschonender ist. Also besipielsweise:

Code: Alles auswählen

iptables -t nat -A POSTROUTING -i eth1 -o eth0 -s 192.168.3.0/24 -j SNAT --to 192.168.1.98
Wichtig ist neben dem aktivierten ip_forward (hast du ja !) auch noch die FORWARD-CHAIN. Wenn du die Dfeault-Policies dort auf DROP gesetzt hast, müsstest du dies hier zusätzlich erlauben.

Code: Alles auswählen

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Server als Gateway nutzen

Beitrag von Duff » 25.09.2008 17:53:51

Ok, danke.

Wenn ich nun auf dem Gateway noch squid einrichte (was ich vor habe), muss ich doch dann für iptables noch folgende Regeln einrichten?

squid.conf

Code: Alles auswählen

...
http_port 192.168.3.99:3128
ACL lokales_netzwerk src 192.168.3.0/24
http_access allow lokales_netzwerk
http_access deny all
...
neue iptables-Regel:
eth1=192.168.3.99
eth0=192.168.1.98

Code: Alles auswählen

iptables -A INPUT -i eth1 -p tcp -s 192.168.3.0/24 --dport 3128 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m state --state NEW -j ACCEPT
Möchte das Szenario erstmal in der Theorie aufbauen und verstehen, bevor ich nachher wieder in der Luft hänge...
Oh, yeah!

Benutzeravatar
DynaBlaster
Beiträge: 958
Registriert: 25.03.2004 18:18:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DF0://dynablaster.adf

Re: Server als Gateway nutzen

Beitrag von DynaBlaster » 25.09.2008 18:06:51

Also SQUID ist jetzt nicht unbedingt mein Metier, aber ich nehme mal ganz stark an, dass du bei der Nutzung von SQUID auf FORWARDING, NAT, usw. verzichten kannst. Denn der Witz von einem Proxy ist ja gerade, dass die Clients ihre http-Anrfagen eben nicht direkt an die Webserver im Internet stellen, sondern eben an den Proxy.

Demnach müssen die Clients eigentlich nur Zugriff auf 192.168.3.99:3128 haben. Wie genau das mit der DNS-Auflösung in Verbindung mit SQUID ist, kann ich dir leider nicht sagen. Zur Not musst du halt dnsmasq oder etwas Ähnliches auf dem Server installieren oder die DNS-Anfragen der Clients wie im Beispiel oben an die Fritz-Box "forwarden".

Benutzeravatar
chroiss
Beiträge: 332
Registriert: 29.10.2004 09:29:43
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: BREMEN (in Wellington,NZ a.D) (in OLDENBURG a.D.) (in BREMEN a.D.) (in COLOGNE a.D.)

Re: Server als Gateway nutzen

Beitrag von chroiss » 25.09.2008 22:30:37

aber ich nehme mal ganz stark an, dass du bei der Nutzung von SQUID auf FORWARDING, NAT, usw. verzichten kannst.
Damit hat DynaBlaster recht.

Es sei denn Du willst die Clients zwingen den Squid zu benutzen. Denn manchmal/oft ist es so, dass der entsprechende Proxy in deren Einstellungen nicht auftaucht.
Folgende Zeile würde das bewirken :

Code: Alles auswählen

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
Gruss chroiss
"The only secure computer is one that's unplugged, locked in a safe, and buried 20 feet under the ground in a secret location... and I'm not even too sure about that one"--Dennis Huges, FBI.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Server als Gateway nutzen

Beitrag von Duff » 26.09.2008 17:23:46

chroiss hat geschrieben: Es sei denn Du willst die Clients zwingen den Squid zu benutzen. Denn manchmal/oft ist es so, dass der entsprechende Proxy in deren Einstellungen nicht auftaucht.
Folgende Zeile würde das bewirken :

Code: Alles auswählen

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
Gruss chroiss
Danke, ja sowas hätte ich gerne.
Die Clients sollen den Proxy benutzen müssen.

Aber reicht diese eine Regel dann aus?

Muss ich nicht noch eine Regel einrichten, was dann mit den Anfragen vom Port 3128 aus passieren soll?
Oh, yeah!

Benutzeravatar
chroiss
Beiträge: 332
Registriert: 29.10.2004 09:29:43
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: BREMEN (in Wellington,NZ a.D) (in OLDENBURG a.D.) (in BREMEN a.D.) (in COLOGNE a.D.)

Re: Server als Gateway nutzen

Beitrag von chroiss » 26.09.2008 18:14:12

Muss ich nicht noch eine Regel einrichten, was dann mit den Anfragen vom Port 3128 aus passieren soll?
Nein.

Die Anfragen gehen ja freiwillig auf den Port des Proxys.

gruss chroiss
"The only secure computer is one that's unplugged, locked in a safe, and buried 20 feet under the ground in a secret location... and I'm not even too sure about that one"--Dennis Huges, FBI.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Server als Gateway nutzen

Beitrag von Duff » 03.10.2008 11:53:51

Sorry, aber ich muss noch mals nachfragen.

Wenn ich nun nicht will, dass alle Clients über den Proxy gehen müssen (sie also dazu zwinge), wäre dann meine iptables so richtig???

Oder habe ich noch was vergessen?

Code: Alles auswählen

iptables -A INPUT -i eth1 -p tcp -s 192.168.3.0/24 --dport 3128 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m state --state NEW -j ACCEPT
Oh, yeah!

Benutzeravatar
DynaBlaster
Beiträge: 958
Registriert: 25.03.2004 18:18:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DF0://dynablaster.adf

Re: Server als Gateway nutzen

Beitrag von DynaBlaster » 03.10.2008 15:17:57

Puh, also wir kennen ja nun nicht dein ganzes iptables-Script, aber ich gehe jetzt mal davon aus, dass deine "-m state --state NEW"-Anweisungen darauf zurückzuführen sind, dass du für die zugehörigen "ESTABLISHED,RELATED"-Pakete entsprechende Regeln eingerichtet hast. Aber das nur am Rande.
Wenn du diese beiden Zeilen verwendest:

Code: Alles auswählen

iptables -A INPUT -i eth1 -p tcp -s 192.168.3.0/24 --dport 3128 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m state --state NEW -j ACCEPT
dann muss jeder Client, der ins Internet möchte, z.B. in seinem Browser explizit eintragen, welcher Proxy genutzt werden soll. Sprich jeder Client muss seine Anwendungen so konfigurieren, dass diese explizit deinen Proxy nutzen. Mit chroiss Regel hier:

Code: Alles auswählen

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
werden alle Pakete, die von einem solchenClient kommen, auf jeden Fall auf Port 3128 umgebogen. Das ganze passiert, ohne dass der Client etwas davon mitbekommt - deshalb entfällt auch die manuelle Konfiguration auf dem Client.

Also entweder jeder Client muss den Proxy manuell eintragen --> dann reichen die beiden Regeln von oben.
oder: bei den Clients muss nichts konfiguriert werden und du biegst die Pakete auf dem Server um --> dann brauchst du alle 3 Regeln.

Und eine kleine Sache noch:

Code: Alles auswählen

iptables -A OUTPUT -o eth0 -p tcp -m state --state NEW -j ACCEPT
wird so nicht gehen, da meines Wissens nach der Parameter -p tcp unbedingt auch eine Port angabe braucht. Also entweder:

Code: Alles auswählen

iptables -A OUTPUT -o eth0 -p tcp --dport 80 -m state --state NEW -j ACCEPT
oder eben weglassen:

Code: Alles auswählen

iptables -A OUTPUT -o eth0 -m state --state NEW -j ACCEPT
Hängt halt davon ab, wie paranoid du bist ;-)

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Server als Gateway nutzen

Beitrag von Duff » 03.10.2008 15:38:44

Ok, danke.

Dann werde ich es wohl so machen, dass ich an den Clients nichts mehr einrichten muss.

Code: Alles auswählen

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -A INPUT -i eth1 -p tcp -s 192.168.3.0/24 --dport 3128 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o eth0 -m state --state NEW -j ACCEPT
Ist hier eigentlich die Reihenfolge wichtig?
Eingehende Verbindungen auf eth1, die als Protokoll tcp und Ziel den Port 80 haben, werden zum Port 3128 weitergeleitet.
Akzeptiere alle neu eingehenden Verbindungen über eth1 (aus dem Netz 192.168.3.0/24) mit dem Ziel Port 3128.
Neu ausgehende Packete über eth0 sollen auch erlaubt werden.
Oh, yeah!

Antworten