zwei Netzwerkkarten, zwei Gateways und keine Verbindung zum PC von Extern

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
hronny
Beiträge: 265
Registriert: 29.08.2004 13:07:42
Wohnort: Sonneberg

zwei Netzwerkkarten, zwei Gateways und keine Verbindung zum PC von Extern

Beitrag von hronny » 02.09.2018 15:00:00

Hallo. Ich versuche seit einiger Zeit ein ganz simples Problem zu lösen. Ein Rechner (war früher die Firewall) hat nun eine neue Hardwarefirewall bekommen. Zusätzlich dazu hat sie eine öffentliche IP Adresse die erreichbar ist. Per Portforwarding der neuen Firewall komme ich auf den LinuxPC. Auf die Öffentliche IP des LinuxPCs geht lediglich der Ping. Alle anderen Dienste oder Portforwarding gehen nicht. Wenn ich das so über tcpdump verfolge liegt es daran, dass zwar die Anfrage auf die PublicIP kommt nur "Rückwärts" über das DefaultGW wieder zum Absender will was natürlich nicht geht.

Code: Alles auswählen

+----------------------------+                                     
| LinuxPC:                   |         +--------------+            
| IP ETH1: 192.168.1.1       |         |neue Firewall |            
| IP ETH2: 80.80.80.81       |ETH1 ---->192.168.1.254 |            
| (öffentliche IP)           |         +-------^------+            
| Default GW: 192.168.1.254  |                 |                   
+----------------------------+                 |                   
            ETH2                               |                   
             |                                 |                   
             |                                 |                   
     +-------v------+                  +-------v------+            
     | Internet     |                  | Internet     |            
     | Public IP    |                  | Public IP    |            
     | 80.80.80.81  |                  | 80.80.80.80  |            
     +--------------+                  +--------------+            
Ping geht:

Code: Alles auswählen

root@externerpc: ~ # ping 80.80.80.81
PING 80.80.80.81 (80.80.80.81) 56(84) bytes of data.
64 bytes from 80.80.80.81: icmp_seq=1 ttl=54 time=19.8 ms
64 bytes from 80.80.80.81: icmp_seq=2 ttl=54 time=20.0 ms
64 bytes from 80.80.80.81: icmp_seq=3 ttl=54 time=19.9 ms
64 bytes from 80.80.80.81: icmp_seq=4 ttl=54 time=19.9 ms
64 bytes from 80.80.80.81: icmp_seq=5 ttl=54 time=20.0 ms
^C
--- 80.80.80.81 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 19.800/19.959/20.053/0.177 ms
Wie gesagt, alle anderen Dienste sind nicht erreichbar. IP Forwarding ist aktiviert und alle Firewallregeln sind gelöscht sowie per Default auf ACCEPT gestellt. Um nun die Dienste auf der PublicIP zur Verfügung zu stellen, musste ich zusätzliche Routen einrichten

Code: Alles auswählen

ip route add default via 80.80.80.1 dev eth2 table dsl2
ip rule add from 80.80.80.81/32 table dsl2
Wenn ich das mache, dann gehen sofort alle Dienste. Ich kann mich per SSH einloggen und Webserver ginge auch. Allerdings bekomme ich dann immer noch kein Portforwarding von dieser IP auf eine andere dahinter hin, obwohl maskieren und sonstigen Kram ausprobiert habe. Auch dann nicht, wenn ich eine Route auf der neuen Firwall einstelle, um die PublicIP über das GW 192.168.1.1 erreichbar zu machen.
Dann dachte ich muss ja mit iptables noch was machen. Also

Code: Alles auswählen

ip rule add fwmark 0x300 table dsl2
angegeben und dann noch mit den Firewallregeln gebastelt

Code: Alles auswählen

iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
iptables -A INPUT -i eth2 -j MARK --set-mark 0x300
iptables -t mangle -A PREROUTING -d 80.80.80.81 -j MARK --set-mark 0x300
Es klappt einfach nicht. Interesanterweise geht das mit dem Ping ganz ohne Firewallregeln.
Warum das ganze? Ich versuche ein winzige Fallbacklösung zu haben, wenn der Hardwarerouter komplett ausgefallen wäre. Oder die Internetleitung, was weiß ich. Klar geht das mit pfsense und multiwan nur darum soll es hier nicht gehen. Es muss ja möglich sein eine zweite Netzwerkkarte auch für sowas nutzen zu können.
Computer würden LINUX kaufen.

eggy
Beiträge: 1559
Registriert: 10.05.2008 11:23:50

Re: zwei Netzwerkkarten, zwei Gateways und keine Verbindung zum PC von Extern

Beitrag von eggy » 02.09.2018 15:05:18

Zeig mal die vollständige Routingtabelle. Ich könnt mir vorstellen, dass die Antwortpakete zum falschen Interface rausgehen.

hronny
Beiträge: 265
Registriert: 29.08.2004 13:07:42
Wohnort: Sonneberg

Re: zwei Netzwerkkarten, zwei Gateways und keine Verbindung zum PC von Extern

Beitrag von hronny » 02.09.2018 15:46:41

Hallo eggy, anbei die Routeninfos:

Code: Alles auswählen

root@linuxpc:~# ip route
default via 192.168.1.254 dev eth1 onlink
80.80.80.254/24 dev eth2 proto kernel scope link src 80.80.80.81
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.1

root@linuxpc:~# ip rule
0:      from all lookup local
100:    from all fwmark 0x300 lookup dsl2
32765:  from 80.80.80.81/24 lookup dsl2
32766:  from all lookup main
32767:  from all lookup default

root@linuxpc:~# route -n
Kernel-IP-Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.254   0.0.0.0         UG    0      0        0 eth1
80.80.80.254    0.0.0.0         255.255.255.0   U     0      0        0 eth2
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
Computer würden LINUX kaufen.

eggy
Beiträge: 1559
Registriert: 10.05.2008 11:23:50

Re: zwei Netzwerkkarten, zwei Gateways und keine Verbindung zum PC von Extern

Beitrag von eggy » 02.09.2018 16:11:07

Kann mich irren, aber irgendwie sieht das falsch aus.
80.80.80.254/24 ... da hätte ich ne andere Ip erwartet, bzw falls das ne einzelne IP und kein Subnetz sein soll: anderes Flag (zumindest Hostroute, evtl was anderes, siehe man route) bzw Subnetzmaske 255.255.255.255. Und die Metriken sehen nicht ganz durchdacht aus.

dufty2
Beiträge: 1510
Registriert: 22.12.2013 16:41:16

Re: zwei Netzwerkkarten, zwei Gateways und keine Verbindung zum PC von Extern

Beitrag von dufty2 » 02.09.2018 17:25:36

Yo, 80.80.80.0/24 würde man normalerweise verweden,
weiß aber nicht, ob das jetzt den großen Unterschied macht.

Was passt an den Metriken nicht?

Genereller Hinweis:
"ip route" (wie auch das alte "/sbin/route -n") zeigen nur die table "main" an,
"local" (meist nicht interessant) wie auch "default" (meist leer) bleiben dabei außen vor.
hronny hat aber noch eine weitere, die 4. angelegt namens "dsl2".

$ ip route show table dsl2

Will mensch wirklich alle sehen:
$ ip route show table all

hronny
Beiträge: 265
Registriert: 29.08.2004 13:07:42
Wohnort: Sonneberg

Re: zwei Netzwerkkarten, zwei Gateways und keine Verbindung zum PC von Extern

Beitrag von hronny » 02.09.2018 17:31:09

Also ich habe nochmal eine VM aufgesetzt und das ganze durchgetestet. Stimmt beim Routing habe ich wohl durch die hundert Versuche was falsches kopiert.

Code: Alles auswählen

root@linuxpc:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth1
iface eth1 inet static
        address 192.168.1.1/24
        gateway 192.168.1.254

auto eth2
iface eth2 inet static
        address 80.80.80.81/24
        post-up ip rule add from 80.80.80.81/24 table dsl2
        post-up ip route add table dsl2 default via 80.80.80.254 dev eth2 metric 100
        post-up ip rule add prio 100 from all fwmark 0x300 lookup dsl2

root@linuxpc:~# ip route
default via 192.168.1.254 dev eth1 onlink
80.80.80.0/24 dev eth2 proto kernel scope link src 80.80.80.81
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.1

root@linuxpc:~# ip rule
0:      from all lookup local
100:    from all fwmark 0x300 lookup dsl2
32765:  from 80.80.80.81/24 lookup dsl2
32766:  from all lookup main
32767:  from all lookup default

root@linuxpc:~# route -n
Kernel-IP-Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.254   0.0.0.0         UG    0      0        0 eth1
80.80.80.0      0.0.0.0         255.255.255.0   U     0      0        0 eth2
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

root@linuxpc:~# ip route show table dsl2
default via 80.80.80.254 dev eth2 metric 100
Wie gesagt, es ist eine Standardinstallation ohne weitere Firewalleinstellungen:

Code: Alles auswählen

root@linuxpc:~# iptables-save
# Generated by iptables-save v1.6.0 on Sun Sep  2 17:30:08 2018
*filter
:INPUT ACCEPT [29131:3112853]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1483:181184]
COMMIT
# Completed on Sun Sep  2 17:30:08 2018
Computer würden LINUX kaufen.

hronny
Beiträge: 265
Registriert: 29.08.2004 13:07:42
Wohnort: Sonneberg

Re: zwei Netzwerkkarten, zwei Gateways und keine Verbindung zum PC von Extern

Beitrag von hronny » 10.09.2018 11:22:13

Also des Rätsels Lösung habe ich auf einer anderen Seite gefunden https://mithrandi.net/blog/2011/10/nat- ... -iptables/
Da Ergebnis in den Netzwerkschnittstellen ist (ich weiß nicht ob die Metriken eine Rolle spielen):

Code: Alles auswählen

auto eth1
iface eth1 inet static
  address 192.168.1.1/24
  gateway 192.168.1.254
  metric 5

auto eth2
iface eth2 inet static
  address 80.80.80.81/24
  gateway 80.80.80.254
  metric 260
  post-up ip rule add fwmark 0x300 table dsl2
  post-up ip route add default via 80.80.80.254 dev eth2 table dsl2
Und in der Firewall musste das nachgetragen werden:

Code: Alles auswählen

iptables -t mangle -A FORWARD --match conntrack --ctstate NEW --in-interface eth2 --jump CONNMARK --set-mark 0x300
iptables -t mangle -A INPUT --match conntrack --ctstate NEW --in-interface eth2 --jump CONNMARK --set-mark 0x300
iptables -t mangle -A POSTROUTING --match conntrack --ctstate NEW --out-interface eth2 --jump CONNMARK --set-mark 0x300
iptables -t mangle -A PREROUTING --in-interface eth1 ! --destination 192.168.1.0/24 --jump CONNMARK --restore-mark
iptables -t mangle -A OUTPUT ! --destination 192.168.1.0/24 --jump CONNMARK --restore-mark
iptables -t nat -A POSTROUTING --out-interface eth2 --jump MASQUERADE
Im Moment funktioniert alles wie es soll und ich konnte keine Einschränkung feststellen. Also der Rechner selbst nutzt das Default Gateway von der eth1. Eine (z.B.) SSH Verbindung ist nun über beide IP Adressen möglich, da nun das Gateway markiert wird und darüber die Rückroute aufgebaut wird. Ich bin darauf gekommen, da ich über conntrack gesehen habe, dass er immer das erste Default Gateway nutzt. Wichtig ist für mich das es geht.

Code: Alles auswählen

conntrack -L --output extended | grep 22 | grep tcp
Computer würden LINUX kaufen.

Antworten