entfernt
Goto Top

Strongswan Jumphost mit Mikrotik Client als Switch

Hallo zusammen,

ich habe mit der freundlichen Hilfe von aqui in diesem Beitrag:
dyndns-mit-ds-lite-fuer-l2tp-mit-mikrotik
eine Umgebung auf die Beine gestellt, mit der verschiedene FritzBoxen und ein MikroTik sich per ipsec auf einen vServer schalten.
Damit kann ich mich also von irgendeinem Endgerät aus mit dem VPN Server verbinden und dann auf die Netze der Fritzboxen/Mikrotik etc zugreifen.
Soweit so gut.

Wenn ich mich jetzt also mit meinem Rechner entsprechend mit dem vServer verbinde, hat dieser dann die öffentliche IP Adresse meines vServers. Meine Frage ist jetzt, kann ich auch zb einen Mikrotik als "Client" mit dem Server verbinden, sodass die Geräte die dann mit dem Mikrotik per zB Wlan verbunden sind auch mit dem vServer verbunden sind ?

Also quasi, der Mikrotik verbindet sich dem vServer und mein Iphone ist per Wlan mit dem Mikrotik verbunden und bekommt dann auch, statt der öffentlichen IP Adresse des uplinks des MT (79.x.x.x) die öffentliche IP Adresse des vServers (157.x.x.x)
Klar, das Iphone ist jetzt ein schlechtes Beispiel, hier könnte ich natürlich auch einfach die VPN Verbindung direkt auf dem Smartphone einrichten und das Iphone verbindet sich selbstständig mit dem vServer.
Aber es gibt ja auch durchaus Endgeräte die weniger Einstellungsmöglichkeiten oder Zertifikatsverwaltung haben.
Da wäre es halt Klasse wenn sich praktisch nur der MT per VPN verbinden müsste und dann quasi als Switch für alle anderen Geräte dient die an ihn angeschlossen sind.

Ich hoffe es ist verständlich worauf ich hinaus will, falls nicht, schiebe ich das einfach mal auf die Uhrzeit ^^

VG

Content-ID: 8790082338

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

Ausgedruckt am: 19.11.2024 um 01:11 Uhr

10138557388
Lösung 10138557388 10.01.2024 aktualisiert um 12:13:02 Uhr
Goto Top
Aloha!
Ja das geht.
  • Dazu in der IPSec Policy am Mikrotik die dst-address auf 0.0.0.0/0 stellen, damit erzwingst du das sämtlicher Traffic des Subnetzes welches in der Policy als src-address definiert ist über den Tunnel raus geht.
/ip ipsec policy add dst-address=0.0.0.0/0 level=unique peer=XXXXXXX proposal=XXXXXX src-address=192.168.88.0/24 tunnel=yes


  • In strongswan muss dann aber noch die Verbindung so angepasst werden
children {
   net {
   local_ts = 0.0.0.0/0
   remote_ts = 192.168.88.0/24
   esp_proposals = aes256-sha512-modp1024,aes256-sha1-modp1024
   }
}
Also mit local_ts jegliche Zieladressen erlauben.
Die 192.168.88.0/24 natürlich an das Subnetz anpassen welches von deinem Mikrotik kommt und welches in der IPSec Policy am Mikrotik als SRC steht.

  • Dann noch in der Firewall des vServer das Forwarding für das 192.168.88.0/24 Subnetz erlauben und dieses Subnetz in der POSTROUTING Chain "masqueraden" damit es vom vServer aus ins Internet geNATet wird.

Noch als wichtiger Hinweis:
Bei Verwendung von 0.0.0.0/0 für das spezifizierte Subnetz geht wirklich alles über den Tunnel , auch Anfragen an andere lokale Netze die am Mikrotik an liegen. Das führt dazu dass diese anderen lokalen Netze dann nicht mehr von diesem Subnetz aus erreichbar sind.
Wenn du aus diesem Subnetz auch andere lokale Subnetze weiter erreichen können willst, dann musst du sogenannte Bypass Policies für jedes dieser lokalen Netze erstellen deren action auf "none" statt "encrypt" steht:
/ip ipsec policy add action=none dst-address=192.168.99.0/24 src-address=192.168.88.0/24 place-before=0
Im Beispiel wäre 192.168.99.0/24 ein anderes Netz das am Mikrotik angebunden wäre.
Wichtig ist das diese Policies vor der Policy stehen die 0.0.0.0/0 als dst-address definiert hat, denn auch hier gilt wie in der Firewall "first match wins".
Im Befehl bewirkt das "place-before=0" das diese Policy ganz oben in der Liste angelegt wird.
Diese Bypass Regeln sind nötig weil der IPSec-Encryption Prozess erst ganz zum Schluss nach der POSTROUTING Chain eingreift und dieser nur anhand der IPSec-Policies entscheided ob verschlüsselt wird oder nicht.

Pj
entfernt
entfernt 11.01.2024 um 00:45:09 Uhr
Goto Top
Hallo pj,

vielen Dank für Deine Antwort.
Habe das mal so umgesetzt aber noch nicht das richtige Ergebnis.
Wenn ich mich mit einem Endgerät mit dem Mikrotik verbinde (WLAN) bekommt dieses Gerät keine Internetverbindung und erreicht auch den Mikrotik selbst (66.1) nicht.

Hier mal meine config:
strongswan:
mikrotik {
 local_addrs = 185.x.x.x
 remote_addrs = 0.0.0.0/0
  local {
   auth = psk
   id = 185.x.x.x
   }
  remote {
   auth = psk
   id = keyid:mikro@mikrotik.intern
   }
  children {
   net {
   local_ts = 0.0.0.0/0
   remote_ts = 192.168.66.0/24
   esp_proposals = aes256-sha512-modp1024,aes256-sha1-modp1024
   }
  }
 proposals = aes256-sha512-modp2048,aes256-sha512-modp1024
 }
}

nftables:
#!/usr/sbin/nft -f

flush ruleset

table inet filter {
	chain input {
		type filter hook input priority 0;
	}
	chain forward {
		type filter hook forward priority 0;
	}
	chain output {
		type filter hook output priority 0;
	}
}

table ip nat {

        define VPN_NETS = {
        192.168.178.0/24, 192.168.66.0/24, 192.168.99.0/24
        }
        # fuer VPN Client Pakete ins Internet masquerade ausser VPN Netzwerke
        chain postrouting {
                type nat hook postrouting priority 100; policy accept;
                oifname ens160 ip daddr $VPN_NETS accept
                ip saddr 100.64.64.0/24 oif ens160 masquerade
                ip saddr 172.25.25.0/24 oif ens160 masquerade
                ip saddr 192.168.66.0/24 oif ens160 masquerade
        }
} 
Auf dem MT:
11-01-_2024_00-42-15

Was mache ich verkehrt ?

VG
10138557388
10138557388 11.01.2024 aktualisiert um 09:01:43 Uhr
Goto Top
An den DNS Server gedacht den du den Clients verteilst? Wenn der im lokalen Netz liegt fehlt die Bypass Rule. Und die Bypass Policies sehe ich auch nicht.Lies dir meinen Abschnitt oben nochmal in Ruhe durch bitte.
In der SRCNAT Chain für IPSec ein Accept auf dem Mikrotik angelegt?
Ein Export wäre sinnvolle, mir Bildchen sieht man zu wenig ....
entfernt
entfernt 07.06.2024 aktualisiert um 21:51:59 Uhr
Goto Top
Zweiter Versuch.

Musste die Testumgebung nochmal neu aufsetzen.
Hier meine vServer Config:

nftables.conf
#!/usr/sbin/nft -f

flush ruleset

table inet filter {
	chain input {
		type filter hook input priority 0;
	}
	chain forward {
		type filter hook forward priority 0;
	}
	chain output {
		type filter hook output priority 0;
	}
}

table ip nat {

        define VPN_NETS = {
        192.168.178.0/24, 192.168.169.0/24, 192.168.99.0/24
        }
        # fuer VPN Client Pakete ins Internet masquerade ausser VPN Netzwerke
        chain postrouting {
                type nat hook postrouting priority 100; policy accept;
                oifname ens160 ip daddr $VPN_NETS accept
                ip saddr 100.64.64.0/24 oif ens160 masquerade
                ip saddr 172.25.25.0/24 oif ens160 masquerade
                ip saddr 192.168.169.0/24 oif ens160 masquerade
        }
} 

clients.conf:
connections {

eins { 
 local_addrs = IP-ADRESSE
 remote_addrs = 0.0.0.0/0 
  local { 
   auth = psk 
   id = IP-ADRESSE
   } 
  remote { 
   auth = psk 
   id = keyid:NAME
   } 
  children { 
   net { 
   local_ts = 172.25.24.0/23 
   remote_ts = 192.168.178.0/24 
   esp_proposals = aes256-sha512-modp1024,aes256-sha1-modp1024 
   } 
  }
 version = 1
 aggressive = yes
 proposals = aes256-sha512-modp2048,aes256-sha512-modp1024
 }

zwei {
 local_addrs = IP-ADRESSE
 remote_addrs = 0.0.0.0/0
  local {
   auth = psk
   id = IP-ADRESSE
   }
  remote {
   auth = psk
   id = keyid:NAME 
   }
  children {
   net {
   local_ts = 172.25.24.0/23
   remote_ts = 192.168.69.0/24
   esp_proposals = aes256-sha512-modp1024,aes256-sha1-modp1024
   } 
  }
 version = 1
 aggressive = yes
 proposals = aes256-sha512-modp2048,aes256-sha512-modp1024
 }
 
 drei {
  local_addrs = IP-ADRESSE
  remote_addrs = 0.0.0.0/0
   local {
    auth = psk
    id = IP-ADRESSE
    }
   remote {
    auth = psk
    id = keyid:NAME
    }
   children {
    net {
    local_ts = 172.25.24.0/23
    remote_ts = 192.168.99.0/24
    esp_proposals = aes256-sha512-modp1024,aes256-sha1-modp1024
    } 
   }
  version = 1
  aggressive = yes
  proposals = aes256-sha512-modp2048,aes256-sha512-modp1024
  }

mikrotik {
 local_addrs = IP-ADRESSE
 remote_addrs = 0.0.0.0/0
  local {
   auth = psk
   id = IP-ADRESSE
   }
  remote {
   auth = psk
   id = keyid:NAME
   }
  children {
   net {
   local_ts = 0.0.0.0/0
   remote_ts = 192.168.169.0/24
   esp_proposals = aes256-sha512-modp1024,aes256-sha1-modp1024
   }
  }
 proposals = aes256-sha512-modp2048,aes256-sha512-modp1024
 }
}
secrets { 
 ike-1 { 
 id = keyid:NAME 
 secret = "GEHEIM"        
 }
 ike-2 { 
 id = keyid:NAME
 secret = "GEHEIM"            
 }
ike-3 { 
 id = keyid:NAME
 secret = "GEHEIM"            
 }
ike-4 { 
 id = keyid:NAME
 secret = "GEHEIM"            
 }
} 

ikev2.conf:
connections {  
 ikev2-eins {
  unique = replace 
  version = 2 
  proposals = aes256-sha512-modp2048,aes256-sha256-modp2048,aes256-sha256-modp1024
  send_cert = always 
  pools = pool-ipv4-eins
  local_addrs = IP-ADRESSE
  remote_addrs = 0.0.0.0/0,::/0 
  local { 
   auth = pubkey 
   certs = cert.pem
   id = fqdn:FQDN
   } 
  remote { 
   id = %any 
   auth = eap-mschapv2 
   eap_id = %any 
  } 
  children { 
   ikev2-eins {
   local_ts = 0.0.0.0/0 
   esp_proposals = aes256-sha512,aes256-sha384,aes256-sha256,aes256-sha1
   start_action = trap
   } 
  } 
 } 
} 
pools { 
 pool-ipv4-eins {
 addrs = 172.25.25.0/24
 dns=9.9.9.9
 }
  }
secrets {
 eap-eins-1 {
     id = NAME
     secret = "PASSWORT"  
     }
 eap-eins-2 {
     id = NAME
     secret = "PASSWORT"  
     }
} 

Und meine MikroTik Config:
# jun/07/2024 21:32:46 by RouterOS 6.48.6
# software id = F72Q-F5L7
#
# model = RB941-2nD
# serial number = XXXXXXXX
/interface bridge
add admin-mac=18:FD:74:FE:1B:66 auto-mac=no comment=defconf name=bridge
/interface list
add comment=defconf name=WAN
add comment=defconf name=LAN
/interface wireless security-profiles
set [ find default=yes ] supplicant-identity=MikroTik
add authentication-types=wpa2-psk mode=dynamic-keys name=sec \
    supplicant-identity=MikroTik wpa2-pre-shared-key=PASSWORT
/interface wireless
set [ find default-name=wlan1 ] band=2ghz-b/g/n channel-width=20/40mhz-XX \
    disabled=no distance=indoors frequency=auto installation=indoor mode=\
    ap-bridge security-profile=sec ssid=MT-SSID wireless-protocol=802.11
/ip ipsec peer
add address=IPADRESS/32 exchange-mode=ike2 name=TR
/ip ipsec profile
set [ find default=yes ] enc-algorithm=aes-256,aes-192,aes-128 \
    hash-algorithm=sha512
/ip ipsec proposal
add auth-algorithms=sha512,sha256,sha1 enc-algorithms=aes-256-cbc,aes-192-cbc \
    name=TR
/ip pool
add name=dhcp ranges=192.168.169.10-192.168.169.254
/ip dhcp-server
add address-pool=dhcp disabled=no interface=bridge name=defconf
/interface bridge port
add bridge=bridge comment=defconf interface=ether2
add bridge=bridge comment=defconf interface=ether3
add bridge=bridge comment=defconf interface=ether4
add bridge=bridge comment=defconf interface=pwr-line1
add bridge=bridge comment=defconf interface=wlan1
/ip neighbor discovery-settings
set discover-interface-list=LAN
/interface list member
add comment=defconf interface=bridge list=LAN
add comment=defconf interface=ether1 list=WAN
/ip address
add address=192.168.169.1/24 comment=defconf interface=bridge network=\
    192.168.169.0
/ip dhcp-client
add comment=defconf disabled=no interface=ether1
/ip dhcp-server network
add address=192.168.169.0/24 comment=defconf gateway=192.168.169.1 netmask=24
/ip dns
set allow-remote-requests=yes
/ip dns static
add address=192.168.169.1 comment=defconf name=router.lan
/ip firewall filter
add action=accept chain=input src-address=192.168.69.0/24
add action=accept chain=output dst-address=192.168.69.0/24
add action=accept chain=input comment=\
    "defconf: accept established,related,untracked" connection-state=\  
    established,related,untracked
add action=drop chain=input comment="defconf: drop invalid" connection-state=\  
    invalid disabled=yes
add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp  
add action=accept chain=input comment=\
    "defconf: accept to local loopback (for CAPsMAN)" dst-address=127.0.0.1  
add action=drop chain=input comment="defconf: drop all not coming from LAN" \  
    disabled=yes in-interface-list=!LAN
add action=accept chain=forward comment="defconf: accept in ipsec policy" \  
    ipsec-policy=in,ipsec
add action=accept chain=forward comment="defconf: accept out ipsec policy" \  
    ipsec-policy=out,ipsec
add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \  
    connection-state=established,related
add action=accept chain=forward comment=\
    "defconf: accept established,related, untracked" connection-state=\  
    established,related,untracked
add action=drop chain=forward comment="defconf: drop invalid" \  
    connection-state=invalid disabled=yes
add action=drop chain=forward comment=\
    "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \  
    connection-state=new disabled=yes in-interface-list=WAN
/ip firewall nat
add action=src-nat chain=srcnat out-interface=ether1 src-address=\
    192.168.169.0/24 to-addresses=IPADRESS
add action=masquerade chain=srcnat comment="defconf: masquerade" \  
    ipsec-policy=out,none out-interface-list=WAN
/ip ipsec identity
add my-id=key-id:NAME peer=TR secret="PASSWORT"  
/ip ipsec policy
add dst-address=0.0.0.0/0 peer=TR proposal=TR src-address=192.168.169.0/24 \
    tunnel=yes
/ip route
add distance=1 gateway=192.168.69.1
/system clock
set time-zone-name=Europe/Berlin
/system identity
set name=RouterOS
/tool mac-server
set allowed-interface-list=LAN
/tool mac-server mac-winbox
set allowed-interface-list=LAN

Hatte eigentlich gedacht das ich alles umgesetzt habe, die Verbindung zum vServer steht auch, aber ein Client der per WLAN verbunden ist kommt nicht ins Internet...

VG
entfernt
entfernt 07.06.2024 um 21:54:41 Uhr
Goto Top
Hat sich erledigt, hab es hin bekommen :D

Vielen vielen Dank für Deine Hilfe!!!