2 Netze verbinden Pakete maskieren mit iptables

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Benutzeravatar
ThoRHam
Beiträge: 113
Registriert: 12.11.2006 12:57:33
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Rhein-Main
Kontaktdaten:

2 Netze verbinden Pakete maskieren mit iptables

Beitrag von ThoRHam » 19.04.2010 17:58:29

Hallo,

habe im Moment noch Probleme mit IPTABLES möchte zwei IP-Netzwerke mit den Adressen:

192.168.1.0/24
192.168.3.0/24

verbinden. Dabei soll im 192.168.3.0/24 (3.0er) Netz ein Server mit Diensten stehen, z.B. ein Apache Web-Server auf den die Rechner aus dem 192.168.1.0/24(1.0er) Netz auch Zugriff haben sollen. Momentan komme ich nur aus dem 3.0er nach draußen und kann auf die 1.0er Rechner zugreifen und auch die Internetverbindung mitnutzen, aber umgekehrt kann ich z.B. keine SSH-Verbindung vom 1.0er Netz zum 3.0er-Netz aufbauen. Hier mal mein aktuelles Skript: Oder kann man das auch ohne IPTABLES lösen?

Code: Alles auswählen

#!/bin/bash
#
# Sa 17. Apr 18:49:59 CEST 2010

# Variablen
IPTABLES="/sbin/iptables"
EXTERN_IP="192.168.1.11"
EXTDEV="eth1"
INTDEV="eth0"

# Rechner außerhalb 3.0 Netz
mobil="192.168.1.13"

# 1.0 Netz-Rechner
traeger="192.168.3.1"
CallServer="192.168.3.12"
mobil_DS="192.168.3.13"
thor="192.168.3.10"

# Paket Weiterleitung aktivieren
echo 1 >> /proc/sys/net/ipv4/ip_forward

# aufraeumen von evt. vorhandenen alten Regeln
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -X


# Maskiere Pakete fuer Weiterleitung nach aussen.
$IPTABLES -t nat -A POSTROUTING -o $EXTDEV -j MASQUERADE


# Maskiere Pakete fuer Weiterleitung nach innen.
$IPTABLES -t nat -A POSTROUTING -o $INTDEV -j MASQUERADE


# erlaube Zugriff von aussen auf Rechner
$IPTABLES -A FORWARD -i $EXTDEV -o $INTDEV -j ACCEPT
$IPTABLES -A INPUT -i $EXTDEV -j ACCEPT
$IPTABLES -A OUTPUT -o $EXTDEV -j ACCEPT

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Re: 2 Netze verbinden Pakete maskieren mit iptables

Beitrag von Danielx » 19.04.2010 21:04:09

Du hast dir also ein NAT gebastelt, dann bräuchtest du für eingehende Verbindungen Port-Forwarding.
Warum löst du das nicht einfach über das Routing, anstatt über NAT?

Gruß,
Daniel

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

Re: 2 Netze verbinden Pakete maskieren mit iptables

Beitrag von DynaBlaster » 19.04.2010 21:36:36

Danielx hat geschrieben:Du hast dir also ein NAT gebastelt, dann bräuchtest du für eingehende Verbindungen Port-Forwarding.
Warum löst du das nicht einfach über das Routing, anstatt über NAT?
Genau, trag bei den Clients im Netz 192.168.3.0 die IP 192.168.3.x (die eth1-IP deines Gateways hier) ein. Für die Clients im Netz 192.168.1.0/24 entsprechend 192.168.1.x (eth0-IP von deinem Gateway hier) - dann kannst du auf das NAT verzichten.
Alternativ kannst du auch einfach auf deinem Standard-GW im Netz 192.168.1.0/24 (vermutlich irgendein DSL-Router) eine statische Route für das Netz 192.168.3.0/24 über die eth0-IP deines Rechners hier konfigurieren - auf NAT kannst du dann ebenfalls verzichten.

Benutzeravatar
ThoRHam
Beiträge: 113
Registriert: 12.11.2006 12:57:33
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Rhein-Main
Kontaktdaten:

Re: 2 Netze verbinden Pakete maskieren mit iptables

Beitrag von ThoRHam » 20.04.2010 11:39:50

Danke an Euch beide, das hört sich schon mal gut an.. werde das mal so durch testen.

Benutzeravatar
ThoRHam
Beiträge: 113
Registriert: 12.11.2006 12:57:33
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Rhein-Main
Kontaktdaten:

Re: 2 Netze verbinden Pakete maskieren mit iptables

Beitrag von ThoRHam » 20.04.2010 22:11:35

Habe mich mal wieder an meinem Netzaufbau versucht:
Warum löst du das nicht einfach über das Routing, anstatt über NAT?
Das NAT stellt doch nochmal zusätzlich ne Sicherheit da, habe ich mir gedacht. Und mit Routing wusste ich jetzt nicht so was anzufangen :roll:
trag bei den Clients im Netz 192.168.3.0 die IP 192.168.3.x (die eth1-IP deines Gateways hier) ein. Für die Clients im Netz 192.168.1.0/24 entsprechend 192.168.1.x (eth0-IP von deinem Gateway hier)
Glaube so habe ich das doch gemacht wie du es meinst.

meine /etc/networ/interfaces sieht so aus, bei den Rechner im 1.0er netz:

Code: Alles auswählen

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static

address 192.168.1.13
netmask 255.255.255.0
gateway 192.168.1.1
und die /etc/networ/interfaces bei den Rechner im 3.0er netz:

Code: Alles auswählen

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth1
iface eth1 inet static
        address 192.168.3.10
        netmask 255.255.255.0
        gateway 192.168.3.1
Würde das gerne mit den NAT realisieren, deshalb habe ich mein IPTABLES-Skript nochmal um Port forwarding erweitert... ich komme aber immer noch nicht vom 1.0er netz ins 3.0er Netz ...z.B. über eine SSH-Verbindung ..die andere Richtung geht nach wie vor.

Code: Alles auswählen

#!/bin/bash
#
# Sa 17. Apr 18:49:59 CEST 2010

# Variablen
IPTABLES="/sbin/iptables"
EXTERN_IP="192.168.1.11"
EXTDEV="eth1"
INTDEV="eth0"

# Rechner außerhalb 3.0 Netz
mobil="192.168.1.13"

# 1.0 Netz-Rechner
traeger="192.168.3.1"
CallServer="192.168.3.12"
mobil_DS="192.168.3.13"
thor="192.168.3.10"

# Paket Weiterleitung aktivieren
echo 1 > /proc/sys/net/ipv4/ip_forward

# aufraeumen von evt. vorhandenen alten Regeln
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -X


# Maskiere Pakete fuer Weiterleitung nach aussen.
$IPTABLES -t nat -A POSTROUTING -o $EXTDEV -j MASQUERADE


# Maskiere Pakete fuer Weiterleitung nach innen.
$IPTABLES -t nat -A POSTROUTING -o $INTDEV -j MASQUERADE

# Port forwarding fuer SSH von aussen auf das 3.0er Netz
$IPTABLES -A PREROUTING -t nat -i $INTDEV -p tcp --dport 22 -j DNAT --to 192.168.3.10:22
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 22 -i $INTDEV -j ACCEPT


# erlaube Zugriff von aussen auf Rechner
$IPTABLES -A FORWARD -i $EXTDEV -o $INTDEV -j ACCEPT
$IPTABLES -A INPUT -i $EXTDEV -j ACCEPT
$IPTABLES -A OUTPUT -o $EXTDEV -j ACCEPT

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Re: 2 Netze verbinden Pakete maskieren mit iptables

Beitrag von Danielx » 21.04.2010 11:46:33

Wie sind denn deine Rechner überhaupt genau miteinander verbunden bzw. wie sieht das Netzwerk genau aus?
Welche Rechner sind denn Router?
Wie sieht das Routing auf den Rechnern im 1-er und 3-er-Netz und auf den Routern aus, siehe "/sbin/route -n"?

Gruß,
Daniel

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

Re: 2 Netze verbinden Pakete maskieren mit iptables

Beitrag von DynaBlaster » 21.04.2010 17:24:37

Code: Alles auswählen

$IPTABLES -A PREROUTING -t nat -i $INTDEV -p tcp --dport 222 -j DNAT --to 192.168.3.10:22
Mit deinem SSH-Client aus dem 192.168.1.0/24-Netz darfst du selbstverständlich nicht auf 192.168.3.10 verbinden, sondern musst als Zieladresse 192.168.1.x:222 angeben. 192.168.1.x ist die IP-Adresse des eth0-Interfaces von dem Rechner, dessen iptables-Script du hier postest. Für nähere Erläuterungen wäre mal tatsächlich ganz hilfreich, welche IP-Adresse dieser rechner verwendet. Für eth1 vermutlich 192.168.3.1 - aber welche Adresse hat der im 192.168.1.0/24-Netz. Die 192.168.1.1 vermutlich nicht, da ich davon ausgehe, dass das der Router mit dem Zugang zu Internet ist ...

Und was ist überhaupt mit den Default-Policies der FORWARD-Chain ?

Code: Alles auswählen

$IPTABLES -A FORWARD -i $EXTDEV -o $INTDEV -j ACCEPT
Wenn die Default-Policy auf DROP stehen sollte kann das auch nicht klappen, weil du den Rückweg blockierst. Allerdings dürfte dann auh der NAT-Traffic von 192.168.3.0/24 nach 192.168.1.0/24 nicht klappen.

Nichtsdestrotz hau mal neben der Ausgabe von route -n (siehe Danielx) auch die Ausgabe von iptables -L -n -v und iptables -t nat -L -n -v raus - deine iptables-Kommandos sind alles andere als schlüssig ...

Antworten