136185
Goto Top

Probleme bei Weiterleitung mit IPtables

Hallo zusammen,

ich verzweifle an Iptables und der Weiterleitung damit.

Ich besitzte einen Root Server bei Strato mit 2 festen IP Adressen. Auf diesem läuft eine VM. Nun möchte ich sämtliche Daten, die über IP Adresse 2 eingehen, an die VM weiterleiten, welche mit dem Hauptserver über eine virtuelle Brücke verbunden ist und darin den eigenen Adressraum 192.168.122.X hat. Ich habe es bereits mit
iptables -t nat -A PREROUTING -p tcp -d 85.214.XXX.XXX -j DNAT --to-destination 192.168.122.58
versucht, allerdings erhalte ich nur einen Timeout. Wenn ich mit dem Hauptserver verbunden bin, kann ich mich per SSH mit der VM verbinden und auf der VM besteht auch eine uneingeschränkte Internetverbindung.

Ich hoffe, dass mir jemand helfen kann und vielen Dank im vorraus.
Finn

Content-Key: 377624

Url: https://administrator.de/contentid/377624

Printed on: April 19, 2024 at 17:04 o'clock

Member: UnbekannterNR1
UnbekannterNR1 Jun 21, 2018 at 05:39:16 (UTC)
Goto Top
Ich kommentiere mal um die Lösung am zu erfahren face-smile

Aber hast du Routing im Kernel Schon aktiviert?
Musst du ggf. evtl noch eine Regel in der FORWARD kette Anlegen die den Traffic an sich zulässt?
Member: SlainteMhath
SlainteMhath Jun 21, 2018 at 06:06:40 (UTC)
Goto Top
Moin,

wenn die VM per Bridge verbunden ist, dann brauchst du doch kein NAT machen, sondern kannst der VM direkt die öffentliche IP verpassen.
Ein DNAT macht imo nur Sinn, wenn die VM in einem Host-only Netzwerk läuft.

lg,
Slainte
Member: gierig
gierig Jun 21, 2018 updated at 06:36:36 (UTC)
Goto Top
wenn die VM per Bridge verbunden ist, dann brauchst du doch kein NAT machen, sondern kannst der VM direkt die öffentliche IP verpassen.
Ein DNAT macht imo nur Sinn, wenn die VM in einem Host-only Netzwerk läuft.

Was bei den meisten "RootServern sind cool" Hostern zum baldigen sperren des Ports führt da hier dann eine unbekannte Mac Adresse auftaucht.
Der Weg hier geht immer über Routing auf/über eine Bridge auf ein internes Netzwerk (Virtueller switch, tap device, whatever)

@136185
Wie sieht deine "Virtuelle Brücke" aus ? Welche Weiteren Iptables Regeln hast du ?
Da du aus der VM Internet hast gehe ich davon aus das ein PNAT existiert ? (MASQUERADE)

 iptables -t nat -A PREROUTING -p tcp -s 85.214.XXX.XXX -j DNAT --to-destination 192.168.122.58

Sollte ggf. besser klappen, man beachte das -s statt des -d.
Denn du möchtest ja die Source IP Umleiten...
Mitglied: 136185
136185 Jun 23, 2018 at 00:25:22 (UTC)
Goto Top
@gierig Die virtuelle Brücke hab ich mit bridge-utils erstellt.

 brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          8000.525400078005       yes             virbr0-nic
                                                                                    vnet0


eth0      Link encap:Ethernet  Hardware Adresse ac:1f:6b:21:ea:14
          inet Adresse:81.169.XXX.XXX  Bcast:81.169.XXX.XXX  Maske:255.255.255.255
          inet6-Adresse:  Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX-Pakete:6640340 Fehler:0 Verloren:0 Überläufe:0 Fenster:0
          TX-Pakete:4170534 Fehler:0 Verloren:0 Überläufe:0 Träger:0
          Kollisionen:0 Sendewarteschlangenlänge:1000
          RX-Bytes:2462676036 (2.4 GB)  TX-Bytes:1012723449 (1.0 GB)
          Speicher:df200000-df27ffff

eth0:1    Link encap:Ethernet  Hardware Adresse ac:1f:6b:21:ea:14
          inet Adresse:85.214.XXX.XXX  Bcast:0.0.0.0  Maske:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          Speicher:df200000-df27ffff

lo        Link encap:Lokale Schleife
          inet Adresse:127.0.0.1  Maske:255.0.0.0
          inet6-Adresse: ::1/128 Gültigkeitsbereich:Maschine
          UP LOOPBACK RUNNING  MTU:65536  Metrik:1
          RX-Pakete:4564147 Fehler:0 Verloren:0 Überläufe:0 Fenster:0
          TX-Pakete:4564147 Fehler:0 Verloren:0 Überläufe:0 Träger:0
          Kollisionen:0 Sendewarteschlangenlänge:1
          RX-Bytes:991705649 (991.7 MB)  TX-Bytes:991705649 (991.7 MB)

virbr0    Link encap:Ethernet  Hardware Adresse 52:54:00:07:80:05
          inet Adresse:192.168.122.1  Bcast:192.168.122.255  Maske:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX-Pakete:161841 Fehler:0 Verloren:0 Überläufe:0 Fenster:0
          TX-Pakete:332503 Fehler:0 Verloren:0 Überläufe:0 Träger:0
          Kollisionen:0 Sendewarteschlangenlänge:1000
          RX-Bytes:9044951 (9.0 MB)  TX-Bytes:537345666 (537.3 MB)

vnet0     Link encap:Ethernet  Hardware Adresse fe:00:a3:b0:56:10
          inet6-Adresse: fe80::fc00:a3ff:feb0:5610/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX-Pakete:161841 Fehler:0 Verloren:0 Überläufe:0 Fenster:0
          TX-Pakete:456706 Fehler:0 Verloren:0 Überläufe:0 Träger:0
          Kollisionen:0 Sendewarteschlangenlänge:1000
          RX-Bytes:11310725 (11.3 MB)  TX-Bytes:544421020 (544.4 MB)

Weitere benutzererstellten Iptablesregeln existieren nicht. Für die VM nutze ich die Standardkonfiguration von QEMU, ein PNAT habe ich nicht speziell eingerichtet.

Habe es mal mit der Regel probiert, bekomme allerdings einen Timeout.

Danke schonmal für die Hilfe.
Member: gierig
gierig Jun 26, 2018 at 06:44:55 (UTC)
Goto Top
Mhhh Mal lose in den Raum geworfen:

1.) Standardkonfiguration von QEMU gibt es nicht in Bezug auf Netzwerk. Wie startest du die VM mit welchen Parametern ?

2.) dein brctl show sieht schonmal nicht schlecht aus, auch wenn virbr0-nic nicht in deiner liste auftaucht.
allerdings kenne ich es das das interfaces im Promisc mode laufen mus.

z.B
KVM_TAP4  Link encap:Ethernet  Hardware Adresse fa:8c:0b:42:c7:20
          ...
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metrik:1
           ...
           ...

3.) Netzwerknamen / Interface Namen klingen ein wenig danach das ein VM Verwalter
wie libvirt oder dergleichen benutzt wird. Dann bitte den prüfen.

4.) was sagt den ein "iptables -t nat -L". Deine VM wird nicht Internet haben weil es glaubt Internet zu haben. Ohne ein NAT Irgendwo gibt es für die VM auch kein Internet (Proxy oder dergleichen mal abgesehen)
und wenn schon mal dabei auch ein iptables -L

5.) Doofe frage aber IP und Gateway in der VM auch richtig gesetzt ?
6.) Doofe frage aber IP forward auch eingeschaltet ? (cat /proc/sys/net/ipv4/ip_forward sollte "1" ergeben
Mitglied: 136185
136185 Jun 27, 2018 at 10:55:33 (UTC)
Goto Top
1) Hab zum Erstellen den folgenden Artikel verwendet. http://xmodulo.com/use-kvm-command-line-debian-ubuntu.html

2) Also sollte ich den Promisc Mode für virb0 aktivieren?

3) Virsh beruht soweit ich weiß auf Libvirt.

4)
iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere             85.214.XXX.XXX       to:192.168.122.58

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
RETURN     all  --  192.168.122.0/24     base-address.mcast.net/24
RETURN     all  --  192.168.122.0/24     255.255.255.255
MASQUERADE  tcp  --  192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
MASQUERADE  udp  --  192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
MASQUERADE  all  --  192.168.122.0/24    !192.168.122.0/24
SNAT       all  --  anywhere             192.168.122.58       to:85.214.XXX.XXX

iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imaps
DROP       tcp  --  anywhere             anywhere             tcp dpt:poppassd
DROP       tcp  --  anywhere             anywhere             tcp dpt:mysql
DROP       tcp  --  anywhere             anywhere             tcp dpt:postgresql
DROP       tcp  --  anywhere             anywhere             tcp dpt:9008
DROP       tcp  --  anywhere             anywhere             tcp dpt:9080
DROP       udp  --  anywhere             anywhere             udp dpt:netbios-ns
DROP       udp  --  anywhere             anywhere             udp dpt:netbios-dgm
DROP       tcp  --  anywhere             anywhere             tcp dpt:netbios-ssn
DROP       tcp  --  anywhere             anywhere             tcp dpt:microsoft-ds
DROP       udp  --  anywhere             anywhere             udp dpt:openvpn
DROP       udp  --  anywhere             anywhere             udp dpt:domain
DROP       tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     icmp --  anywhere             anywhere             icmptype 8 code 0
ACCEPT     all  --  anywhere             anywhere

Chain FORWARD (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             192.168.122.0/24     ctstate RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     anywhere
ACCEPT     all  --  anywhere             anywhere
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
REJECT     tcp  --  anywhere             anywhere             tcp flags:!FIN,SYN,RST,ACK/SYN state NEW reject-with tcp-reset
DROP       all  --  anywhere             anywhere             state INVALID
ACCEPT     all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere

Chain OUTPUT (policy DROP)
target     prot opt source               destination
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
REJECT     tcp  --  anywhere             anywhere             tcp flags:!FIN,SYN,RST,ACK/SYN state NEW reject-with tcp-reset
DROP       all  --  anywhere             anywhere             state INVALID
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

Chain f2b-plesk-modsecurity (0 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

5) Müsste alles richtig gesetzt sein.

 ifconfig
ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.58  netmask 255.255.255.0  broadcast 192.168.122.255
        inet6 fe80::200:a3ff:feb0:5610  prefixlen 64  scopeid 0x20<link>
        ether 00:00:a3:b0:56:10  txqueuelen 1000  (Ethernet)
        RX packets 5308  bytes 583909 (583.9 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 53345  bytes 4229358 (4.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 284390

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Lokale Schleife)
        RX packets 11337  bytes 759662 (759.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11337  bytes 759662 (759.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

6) Jo ist aktiviert.
Member: gierig
gierig Jun 28, 2018 updated at 19:59:08 (UTC)
Goto Top
zu1.)
Ich habe keine Lust mir einen 3 Jahre alten Artikel durchzulesen. Entweder ist er Falsch oder Dir ist es nicht möglich ihn zu befolgen,
da ggf. irgendwelche Voraussetzungen nicht identisch sind, die Du nicht erkennst und ich nicht erraten kann.
Sonst würde es ja gehen...

der Rest schaut soweit ganz OK aus, bis auf bis die große Ausnahme:

Wo kommt der ganze Iptables Müll her?

Du willst dich mit deiner Firewall auseinandersetzten und da einmal aufräumen.
Oder raus finden wer oder was den ganzen Schrott da hinzufügt.

das hier ist richtig und OK
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere             85.214.XXX.XXX       to:192.168.122.58

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  192.168.122.0/24    !192.168.122.0/24

Der erste macht das Dnat zu deiner VM,
das zweite das Pnat für nach draußen.

Alles andere ist mehr oder minder Müll, doppelt Unsinnig oder schlechtes Design.
Es ist z.b Unsinnig in der Input als Default Drop zu haben, einen Dienst zu erlauben,
ein dutzend Dienste zu Droppen um dann den ganzen rest wieder zu erlauben.
Hier noch ein falsches SNAT, crap in der Output chain und so weiter...

das hier aber bricht dir evt. das Genick für deinen speziellen Fall.

chain FORWARD (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             192.168.122.0/24     ctstate RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     anywhere

Du bleibst also ggf. in deiner eignen Firewall hängen.
Wie oben schon gesagt, schaue es Dir in Ruhe an und finde raus wer oder was deine
config so zumüllt.

EDIT nachtrag:
ACCEPT     all  --  anywhere             anywhere
steht da ja noch im direkten anschluss und sollte demnach doch alles durchlassen..

Dann ist es evt. noch die SNAT regel die da nicht hingehört in der POSTROUTING der NAT chain...