[strongSwan] Tunnels with dynamic IP and another route issue

Noel Kuntze noel.kuntze+strongswan-users-ml at thermi.consulting
Fri May 5 21:38:40 CEST 2017


Hello Dusan,

On 05.05.2017 08:55, Dusan Ilic wrote:
> Okey, so I have tried different things now and I think that Charon source routing seem to work better (atleast it looks like if after a couple of reboots of the gateway). Im not source what did it, because I have both added an Iptable mangling rule for UDP port 500 (IKE) marrking out the WAN interface I want to use for IPsec, and changed settings so that Charon ignores all but one routing table and also only listens to this interface (and LAN), not the other WAN-interfaces. I have tried to force it in every possible way to only do it's route lookup/next hop in ONE table for the right WAN-interface.

You could try to disable the installation of routes in strongswan.conf (charon.install_routes = no).

> 
> However, the more I try the more I seem to understand that Strongswan seems not to be good at handling a bit more advanced routing setups. My new issue is that my other LAN (have two local subnets/VLANs) is also routed out the 0.0.0.0 ipsec connection now, even though it isn't part of the TS-selectors. My main LAN is on br0 and my second LAN on br1. I have even tried creating a separate passthrough for the second LAN, but Charon oddly creates the passthrough route out on the WAN IP-sec interface (instead of br1).

Weird. To be honest, if you make charon not install any routes, just the policies are added and traffic isn't routed differently.

> It looks like the biggest problem now is the 0.0.0.0 tunnel, by default a default route is added to table 220. If I change charon routing table to main table, Charon adds two new routes (I think cover the whole Internet) and leaves the default main route (multipath netxhop route). However, because the second LAN isn't a part of the 0.0.0.0 connection TS-selector, it won't be allowed out this default route and tunnel (and that's how I want it). I would like the second LAN to use the ordinary default routes to reach the internet, and I'm really lost here how to handle Strongswan with multiple default routes and/or routing tables with policy routing.

See above.

> 
> I know you said that Strongswan isn't adapted to work with multipath routes and that sort of routing (loadbalancing), however, it seems that it has issues with systems with several routing tables too. Do you have any recommendations how I should go on from here, or is it just that simple that Strongswan isn't going to be working reliably in an advanced routing setup?

See above.

> 
> I'm pasting all of my gateways routing and policy routing setup below, if that is of any help.
> 
> # ip route show
> 90.225.194.1 dev vlan845  scope link
> 85.24.240.1 dev vlan847  scope link
> 85.24.244.1 dev vlan846  scope link
> 10.248.0.x dev ppp1  scope link
> 10.1.1.0/26 dev br0  proto kernel  scope link  src 10.1.1.1
> 10.1.2.0/26 dev br1  proto kernel  scope link  src 10.1.2.1
> 90.225.194.0/24 dev vlan845  proto kernel  scope link  src 90.225.194.x
> 85.24.244.0/24 dev vlan846  proto kernel  scope link  src 85.24.244.x
> 85.24.240.0/24 dev vlan847  proto kernel  scope link  src 85.24.240.x
> 127.0.0.0/8 dev lo  scope link
> default
>         nexthop via 90.225.194.1  dev vlan845 weight 1
>         nexthop via 10.248.0.21  dev ppp1 weight 256
>         nexthop via 85.24.240.1  dev vlan847 weight 1
> default via 85.24.244.1 dev vlan846  metric 1

Besides from the superfluous loopback route, it looks fine. You should probably set a src hint on the route to ppp1.

> # ip rule
> 0:      from all lookup local
> 101:    from 90.225.194.x lookup WAN1
> 102:    from 10.248.0.x lookup WAN2
> 103:    from 85.24.240.x lookup WAN3
> 121:    from all fwmark 0x100/0xf00 lookup WAN1
> 122:    from all fwmark 0x200/0xf00 lookup WAN2
> 123:    from all fwmark 0x300/0xf00 lookup WAN3
> 124:    from all fwmark 0x400/0xf00 lookup WAN4
> 32766:  from all lookup main
> 32767:  from all lookup default
> 
> Strongswan isn't running at the moment, that's way route table 220 is missing above.
> 
> 
> Den 2017-05-04 kl. 14:52, skrev Dusan Ilic:
>> Okey, I will try some things out and see if it gets better. If not I will return with some logs :)
>> I'm just thinking out loud here regarding Charon source route selection, because you proposed leaving out the "left"-parameter (defaulting to %any I think) and my router is multihomed, what about if I mangle the output packets on UDP port 500 through the right WAN interface routing table? Will that force charon traffic out the right interface too?
>> Or maybe if I exlude all routing tables present on the gateway (except the one I want) in strongswan.conf, then that shoud force Charon to do source route lookups in this table only?
>>
>> I have made some completely different observations, I tried running Strongswan with libipsec instead of kernel modules and noticed two things.
>>
>> 1. The shunt policy doesn't work anymore, the route for local LAN gets created with dev ipsec0 (instead of br0). Is this a known bug? I had to add a manual route to table 220.
>>
>> 2. It's easier to route, maintain and so on because all traffic goes in/out on a dedicated interface (ipsec0), so no need for IP-tables policy matching. However, it's noticeable slower (througput) and when transferring traffic my routers almost hits 100% cpu load. Is this normal?
>>
>> With kernel modules I can reach double the througput (20 vs 50Mbps), however then the CPU is only around 50%. What do you think is the bottle neck here for achieving higher throughput? The remote endpoint? With Android Strongswan client it's even slower than that (tested on WiFi).
>> Both sides of the WAN-connection in this case have 100Mbps, so that's ruled out.
>>
>>
>> Den 2017-05-03 kl. 16:23, skrev Noel Kuntze:
>>>
>>> On 03.05.2017 13:51, Dusan Ilic wrote:
>>>> By the way, it seems the order of shunt connections do matter.
>>> They don't. XFRM doesn't care about what order any policies are inserted, only the TS and the priority.
>>>
>>>> If I put it at the end after all other connections the network gets completely cut off...looks like I have to put it directly after the 0.0.0.0 <tel:0.0.0.0> connection.
>>> Sounds like you have a race condition between charon and the software that gets your network connection(s) up. Make charon start after that software is done.
>>> I can't tell for certain though, because you don't share the logs.
>>>
>>>> ---- Noel Kuntze skrev ----
>>>>
>>>>
>>>>
>>>> On 02.05.2017 17:41, Dusan Ilic wrote:
>>>>> I see, thank you.
>>>>>
>>>>> Well, I seem to have random issues now with my new configuration.
>>>>>
>>>>> After restartin Strongswan sometiems it works, sometimes it don't Very unreliable.
>>>>> Sometimes it connects with right source interface, sometimes sending packet: from 0.0.0.0[500] to 94.x.x.x[500] (1316 bytes) and this won't work obviously. Why 0.0.0.0?
>>>>> When it connects from the right public WAN IP, sometimes it connects, sometimes just retransmittings a bunch of packets. Never had these problemse before, and I'm confused what's started causing them now.
>>>>>
>>>> Read your logs and compare them.
>>>>>
>>>>> *Regarding shunt connections, does it matter in which order they are put in ipsec.conf? Like at the top, or the bottom and so on?*
>>>>>
>>>> No.
>>>> *
>>>> *
>>>>>
>>>>> Den 2017-05-02 kl. 09:41, skrev Noel Kuntze:
>>>>>> Yes, that's the reason why that happens. No, you need to start using another subnet.
>>>>>>
>>>>>> On 02.05.2017 02:02, Dusan Ilic wrote:
>>>>>>> I seem to have found the problem, it was on my local endpoint. The gateway have default IP-table rules in prerouting table dropping traffic entering any WAN-interface destined to a LAN-subnet, which I understand is normal as long as their isn't any IPsec involved :) Below exlude rule solves it.
>>>>>>>
>>>>>>> iptables -t mangle -I PREROUTING -d 10.1.1.0/26 -i $(nvram get wan3_ifname) -m policy --dir in --pol ipsec --proto esp -j ACCEPT
>>>>>>>
>>>>>>>
>>>>>>> Now routing everything over IP-sec tunnel works great, but instead a new issue have risen. My VPN remote access users cannot reach the internet anymore (or the local subnet for that matter) when the gateway are routing all traffic over another IPsec-tunnel, and from the LAN I cannot ping the VPN-client (Android Strongswan) either. I'm wildly guessing this is because my VPN-clients are getting IP's from the local subnet (rightsourceip=%dhcp), the same subnet that I have to create a passthrough connection for. Is this solvable in an easy way, or am I forced put my VPN-clients on a separate subnet?
>>>>>>>
>>>>>>> Den 2017-05-01 kl. 14:57, skrev Noel Kuntze:
>>>>>>>> I can't  help you further easily. You need to check what happens to the packets and what actually needs to happen.
>>>>>>>>
>>>>>>>> On 30.04.2017 23:25, Dusan Ilic wrote:
>>>>>>>>> I have added following on local router
>>>>>>>>>
>>>>>>>>> iptables -t nat -I POSTROUTING -s 10.1.1.0/26 -o vlan847 -m policy --dir out --pol ipsec --proto esp -j ACCEPT
>>>>>>>>> (before it was iptables -t nat -I POSTROUTING -s 10.1.1.0/26 -d 192.168.1.0/24 -o vlan847 -m policy --dir out --pol ipsec --proto esp -j ACCEPT)
>>>>>>>>>
>>>>>>>>> And on remote router
>>>>>>>>>
>>>>>>>>> iptables -I FORWARD -s 10.1.1.0/26 -j ACCEPT
>>>>>>>>> iptables -t nat -I POSTROUTING -s 10.1.1.0/26 -j MASQUERADE
>>>>>>>>>
>>>>>>>>> And now when the tunnel is up, internet doesnt work at all (all pings time out), however I can still reach the remote subnet 192.168.1.0. What is the best way to troubleshoot, if the error is on the local gateway or on the remote?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Den 2017-04-30 kl. 20:39, skrev noel.kuntze+strongswan-users-ml at thermi.consulting:
>>>>>>>>>> Fix your NAT rules.
>>>>>>>>>>
>>>>>>>>>> Am 30. April 2017 12:28:48 MESZ schrieb Dusan Ilic <dusan at comhem.se>:
>>>>>>>>>>
>>>>>>>>>>       Okey, so I found info about adding a "passthrough" connection for my
>>>>>>>>>>       local LAN. I have done this now and when i start the connection the
>>>>>>>>>>       network connection isn't cut off, however, it seems like my internet
>>>>>>>>>>       traffic i still using my local gateway (browsed to a check my ip-page).
>>>>>>>>>>       I can however still ping the remote network.
>>>>>>>>>>
>>>>>>>>>>       Here is my tabel 220
>>>>>>>>>>
>>>>>>>>>>       # ip route show table 220
>>>>>>>>>>       10.1.1.0/26 <http://10.1.1.0/26> dev br0  proto static  src 10.1.1.1 <http://10.1.1.1> # LAN passthrough?
>>>>>>>>>>       default via 85.24.x.x dev vlan847  proto static  src 10.1.1.1 <http://10.1.1.1>
>>>>>>>>>>
>>>>>>>>>>       So instead of a route to 192.168.1.0/24 <http://192.168.1.0/24> a default route is added, but it
>>>>>>>>>>       looks like it doesn't go through the tunnel... traffic to 192.168.1.0/24 <http://192.168.1.0/24>
>>>>>>>>>>       do get tunneled still though.
>>>>>>>>>>
>>>>>>>>>>       Den 2017-04-30 kl. 11:59, skrev Dusan Ilic:
>>>>>>>>>>
>>>>>>>>>>           Hello again, It worked with the hack! Thank you! Last question (hopefully! :P)), if I would like to use the remote endpoint to route *all* traffic over the vpn, is below the correct way? I have changed rightsubnet locally to 0.0.0.0/0 and leftsubnet remotely to 0.0.0.0/0, I have also added NAT on the remote router for the local subnet on the local endpoint, and finally I have added the local subnet to table 220 on the local router. I have also replaced the Iptable forward rule on local endpoint with 0.0.0.0/0 instead of only the remote subnet. However, when I up the connection on the local router in a couple of seconds my SSH connection stops responding, and I cannot reach the local gateway or internet any longer. I have to reboot the local router to get access again. Is this familiar to you? What could be happening here? Den 2017-04-29 kl. 18:44, skrev Noel Kuntze:
>>>>>>>>>>
>>>>>>>>>>               Hello Dusan, On 29.04.2017 18:34, Dusan Ilic wrote:
>>>>>>>>>>
>>>>>>>>>>                   It works! I found a hidden setting under Phase 1 in Fortigate where i could add the local ID. Added it's dynamic dns hostname and now it connects.
>>>>>>>>>>
>>>>>>>>>>               Great!
>>>>>>>>>>
>>>>>>>>>>                   However, I still have issues with another endpoint I'm testing. My local endpoint have Strongswan 5.5.1 and the remote endpoint have 4.5.2. Would that present any issues or incompatibilites? Unfortunately it's not possible to upgrade the remote endpoint (Strongswan).
>>>>>>>>>>
>>>>>>>>>>               Pluto resolves IDs that are FQDNs. I think there was a hack, where you add the at-character in front of the FQDN in the ID settings and that stops it from doing that. Might apply to charon, too in such a low version number. Try the hack.
>>>>>>>>>>
>>>>>>>>>>                   I tried below, per your suggestion left=%local.example leftid=local.example right=%remote.example rightid=remote.example remote.example : PSK "PSKGOESHERE" Log when local sides initiates connection: parsed IKE_AUTH response 1 [ N(AUTH_FAILED) ] received AUTHENTICATION_FAILED notify error
>>>>>>>>>>
>>>>>>>>>>               You need to read the remote logs when the remote side sends you an error message.
>>>>>>>>>>
>>>>>>>>>>                   Log when remote side initiates connection: Apr 29 16:32:20 R6250 daemon.info <http://daemon.info> charon: 10[CFG] looking for peer configs matching 85.24.x.x[85.24.x.x]...94.254.x.x[94.254.x.x] Apr 29 16:32:20 R6250 daemon.info <http://daemon.info> charon: 10[CFG] no matching peer config found It looks like the same issue, the remote endpoint doesnt send the configured ID?
>>>>>>>>>>
>>>>>>>>>>               Yes.
>>>>>>>>>>
>>>>>>>>>>                   And another question, when using dynamic hostnames instead of IP's as "right", how often does Strongswan make a new DNS-lookup? How does Strongswan handle the situation where let's say the remote endpoint suddenly receives a new IP? Or if the local side receives a new IP during established connection?
>>>>>>>>>>
>>>>>>>>>>               strongSwan does a DNS lookup whenever it tries to select a configuration. Well, depends on if mobike is used or no and if the peer who's IP changed can't send any traffic anymore. Mobike and connectivity: IKE_SA and CHILD_SAs are migrated No mobike and connectivity: Don't know. Maybe a new IKE_SA is negotiated, because the one peer knows the local address has vanished (and the CHILD_SAs migrated?). No mobike and no connectivity: Timeout, if DPD is used. Otherwise the IKE_SA and CHILD_SAs remain until the remote peer connects again. Mobike and no connectivity: Timeout, if DPD is used. Otherwise the IKE_SA and CHILD_SAs remain until the remote peer connects again. Kind regards, Noel
>>>>>>>>>>
>>>>>>>>>>
>>>> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>>>>
>>>>>>>>>>           Users mailing list Users at lists.strongswan.org https://lists.strongswan.org/mailman/listinfo/users
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Sent from mobile
>>>>
>>>
>>
>>
> 
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://lists.strongswan.org/pipermail/users/attachments/20170505/c1a679be/attachment.sig>


More information about the Users mailing list