Zwei IPSec-Netze miteinander verbinden

Started by groove21, January 01, 2021, 01:24:45 PM

Previous topic - Next topic
Hallo zusammen,

ich habe die letzten Tage eine OPNSense aufgesetzt und soweit läuft es auch.
Ich habe folgenden Use-Case. Ich habe mehrere FritzBoxen die ich mit einem VPN verbinden will. Ebenfalls will ich von jedem der Remote-Netze auf das andere Remote-Netz zugriefen können. Das klappt leider nicht. Ich habe schon viel gelesen mit zusätzlichen Phase2-Einträge usw. aber leider will es nicht. Was macht ich falsch?

Was funktioniert:

Zugriff auf jedes dezentrale Netz über 10.201.64.0/24 und umgekehrt in beide Richtungen

Nun würde ich aber gerne aus dem Standort B auf eine IP des Standort A zugreifen.
Konkret beispielsweise: Von 192.168.161.29 auf 192.168.160.1

Innerhalb des IPsec habe ich bereits zu Testzwecken eine Any-Any-Allow Regel angelegt. Hat leider aber auch nicht geholfen.

Das geht leider nicht.
Im Anhang zwei Screenshots.

Meine importierte Fritz-Config sieht so aus:

Standort A:

vpncfg {
        connections {
                enabled = yes;
                conn_type = conntype_lan;
                name = "VPN zu OPNSense-Server";
                always_renew = yes;
                reject_not_encrypted = no; 
                dont_filter_netbios = yes;
                localip = 0.0.0.0;
                local_virtualip = 0.0.0.0;
                remoteip = 0.0.0.0;
                remote_virtualip = 0.0.0.0;
                remotehostname = "FQDN Opensense";
                localid {
                        fqdn = "FQDN Standort A";
                }
                remoteid {
                        fqdn = "FQDN Opensense";
                }
                mode = phase1_mode_idp;
                phase1ss = "dh14/aes/sha"; 
phase2ss = "esp-aes256-3des-sha/ah-no/comp-lzs-no/pfs";
                keytype = connkeytype_pre_shared;
                key = "KEY"; 
                cert_do_server_auth = no;
                use_nat_t = no; 
                use_xauth = no;
                use_cfgmode = no;
                phase2localid {
                        ipnet {
                                ipaddr = 192.168.160.0;
                                mask = 255.255.255.0;
                        }
                }
                phase2remoteid {
                        ipnet {
                                ipaddr = 10.201.64.0;
                                mask = 255.255.255.0;
                        }
                }
                phase2ss = "esp-aes256-3des-sha/ah-no/comp-lzs-no/pfs";
                accesslist = "permit ip any 10.201.64.0 255.255.255.0",
"permit ip any 192.168.158.0 255.255.255.0",
"permit ip any 192.168.159.0 255.255.255.0",
"permit ip any 192.168.161.0 255.255.255.0",
"permit ip any 192.168.162.0 255.255.255.0",
"permit ip any 192.168.163.0 255.255.255.0",
"permit ip any 192.168.164.0 255.255.255.0",
"permit ip any 192.168.165.0 255.255.255.0",
"permit ip any 192.168.166.0 255.255.255.0",
"permit ip any 192.168.167.0 255.255.255.0",
"permit ip any 192.168.168.0 255.255.255.0",
"permit ip any 192.168.169.0 255.255.255.0",
"permit ip any 192.168.170.0 255.255.255.0",
"permit ip any 192.168.171.0 255.255.255.0",
"permit ip any 192.168.172.0 255.255.255.0",
"permit ip any 192.168.173.0 255.255.255.0",
"permit ip any 192.168.174.0 255.255.255.0",
"permit ip any 192.168.175.0 255.255.255.0",
"permit ip any 192.168.178.0 255.255.255.0";
        }
        ike_forward_rules = "udp 0.0.0.0:500 0.0.0.0:500",
                            "udp 0.0.0.0:4500 0.0.0.0:4500";
}


Standort B:

vpncfg {
        connections {
                enabled = yes;
                conn_type = conntype_lan;
                name = "VPN zu OPNSense-Server";
                always_renew = yes;
                reject_not_encrypted = no; 
                dont_filter_netbios = yes;
                localip = 0.0.0.0;
                local_virtualip = 0.0.0.0;
                remoteip = 0.0.0.0;
                remote_virtualip = 0.0.0.0;
                remotehostname = "FQDN Opensense";
                localid {
                        fqdn = "FQDN Standort B";
                }
                remoteid {
                        fqdn = "FQDN Opensense";
                }
                mode = phase1_mode_idp;
                phase1ss = "dh14/aes/sha"; 
phase2ss = "esp-aes256-3des-sha/ah-no/comp-lzs-no/pfs";
                keytype = connkeytype_pre_shared;
                key = "KEY"; 
                cert_do_server_auth = no;
                use_nat_t = no; 
                use_xauth = no;
                use_cfgmode = no;
                phase2localid {
                        ipnet {
                                ipaddr = 192.168.161.0;
                                mask = 255.255.255.0;
                        }
                }
                phase2remoteid {
                        ipnet {
                                ipaddr = 10.201.64.0;
                                mask = 255.255.255.0;
                        }
                }
                phase2ss = "esp-aes256-3des-sha/ah-no/comp-lzs-no/pfs";
                accesslist = "permit ip any 10.201.64.0 255.255.255.0",
"permit ip any 192.168.160.0 255.255.255.0";
        }
        ike_forward_rules = "udp 0.0.0.0:500 0.0.0.0:500",
                            "udp 0.0.0.0:4500 0.0.0.0:4500";
}




Die Standorte brauchen dann natürlich auch mehrere Phase2 Einträge. Jeder Standort muss alle anderen Standorte kennen (auf die er zugreifen soll).
,,The S in IoT stands for Security!" :)

Hallo Gauss23,

erst mal ein frohes neues Jahr und danke für die Antwort.
Ich hatte im ersten Beitrag zwei Screenshots angehängt wie ich es verstanden hatte das es eingerichtet werden soll.

Kannst du prüfen, ob ich dies korrekt eingestellt habe?

Gruß

Dir auch ein frohes neues Jahr.

Ja, das sieht soweit gut aus. Hast Du das denn auf der Fritzbox-Seite auch gemacht?
,,The S in IoT stands for Security!" :)

Scheinbar kann die Fritzbox nicht mehrere Subnetze in einer Verbindung haben.

Jedenfalls laut:
https://forum.opnsense.org/index.php?topic=9222.0

,,The S in IoT stands for Security!" :)

Hallo Gauss23,

ich habe dir einen Screen von der Fritz-Seite vom Standort A in den Anhang gepackt. Dort steht "nur" das entfernte Netz 10.201.64.0/24 drin. In der Config habe ich allerdings "permit ip any 192.168.161.0 255.255.255.0", reingepackt, reicht das nicht?

Oder muss zwingend eine zweite Kopplung angelegt werden mit dem Netz 192.168.161.0/24? Dies wollte ich eigentlich vermeiden und es alles über eine Kopplung abwickeln, da die Fritz ab gewissen Anzahl Connections an die Grenze kommt (ich will ein Netzwerk mit 15 Fritz vernetzen, so viel unterstützt AVM nicht offiziell).

Oder muss ich an der Fritz noch was anders einstellen oder habe ich wo anders einen Denkfehler?
Passt aus deiner Sicht die Fritz-Config?

Gruß

Schande über mein Haupt. Ich habe eigentlich alles richtig gemacht und auch die SPD-Entries waren zumindest bei mir nicht nötig.

Ich hatte im Standort A neben dieser Regel noch eine weiteres aktives VPN zum Standort B. Da ist die Fritz dann wohl durcheinander gekommen. Nachdem ich diese deaktiviert hatte, tut nun alles wie es soll.

Trotzdem vielen Dank!

Dein Denkansatz muss beinhalten wie ein Router funktioniert.

Damit ein Router weiß, wo er Pakete hinschicken kann, muss er durch eine Route (also den Weg) wissen, den das Paket gehen soll.

In deinem Fall mal ein Setup aus 3 Routern:


Fritzbox EINS                        <-IPSEC-> Opnsense                                 <-IPSEC->  Fritzbox ZWEI
Netzwerk 192.168.1.0/24                        Netzwerk 172.16.1.0/24                              Netzwerk 10.0.1.0/24
IPv4 Adresse 192.168.1.254                    IPv4 Adresse 172.16.1.254                          IPv4 Adresse 10.0.1.254


Jetzt kann man den Weg eines Pakets darstellen.

Die Fritzbox EINS bekommt ein Paket, welches an Destination 172.16.0.23 adressiert ist. Da der IPSEC VPN Tunnel durch einen SA Eintrag dieses Netzwerk angegeben hat, existiert eine statische Route auf der Fritzbox EINS zu diesem Netz. Das Paket wird von Fritzbox EINS also in den Tunnel geschickt, und kommt bei der OPNsense an. Die Opnsense gibt das Paket an 172.16.0.23 weiter. Die Antwort wird von der OPNsense zurück in den IPSEC Tunnel zur Fritzbox EINS geschickt, da auch die OPNsense einen SA Eintrag für das Netz der Fritzbox hat, und somit die Route zurück zum Fritzbox EINS Netzwerk kennt.

Jetzt nehmen wir an, ein Paket kommt bei der Fritzbox EINS an, welches als Destination 10.0.1.23 Fritzbox ZWEI hat. Die Fritzbox bekommt das Paket, vergleicht es mit dem Routing Table, und erkennt das es das Paket nirgendwo hinschicken kann, weil es das Ziel gar nicht kennt. Es wird verworfen, es wird niemals in den IPSEC Tunnel geschickt werden. Genauso wenig würde jemals eine Antwort zurück kommen, da auch Fritzbox Zwei die Fritzbox eins nicht kennt.

Ich würde dir empfehlen ein Netzwerk Schaubild zu zeichnen, und den Weg eines Pakets durchzuspielen, und überall dort SAs oder statische Routen einzutragen, wo ein Router das Ziel nicht kennt. Traceroute zeigt dir viele potentielle Stellen auf, an denen ein Paket nicht mehr weitergereicht wird.





Hardware:
DEC740