[strongSwan] Fun with IKEv2, ip route and ip xfrm policy
Niccolò Belli
darkbasic at linuxsystems.it
Sun Feb 26 02:01:18 CET 2012
I was going mad with Openswan and IKEv1, then I discovered that IKEv2
*really* rocks and I start playing with Strongswan because of the NAT
support.
Server A is a server with a 16 ip public subnet and some networks attached.
Server B is another server, but it's *behind nat* and it has two interfaces:
eth0 has ip 192.168.20.1/24, this is network where lies the nat router
eth1 has ip 172.16.1.1/24 (another private network)
What I want to achieve:
- Server B has a public ip (2.118.245.45)
- Server B surfs the net using the public ip
- Server B reaches server A and its networks
- 172.16.1.0/24 reaches server B, server A and its networks
- 192.168.20.0/24 reaches server B, but it doesn't reach server A and
its networks
- Server A reaches server B and 172.16.1.0/24.
SERVER A
conn server1-server2
keyexchange=ikev2
authby=psk
left=217.162.38.19
leftsubnet=0.0.0.0/0
right=%any
rightsubnet=172.16.1.0/24,2.118.245.45/32
type=tunnel
auto=add
There is nothing else to do on server A, but server B is much more
interesting.
SERVER B
conn server1-server2
keyexchange=ikev2
authby=psk
left=%defaultroute
leftsubnet=172.16.1.0/24,2.118.245.45/32
right=217.162.38.19
rightsubnet=0.0.0.0/0
type=tunnel
auto=start
Server B needs some tweaks because there are the following problems:
1) 192.168.20.0/24 doesn't reach server B.
SOLUTION:
ip route add 192.168.20.0/24 via 192.168.20.150 dev eth0 proto static
src 192.168.20.150 table 220
2) 172.16.1.0/24 doesn't reach server A.
SOLUTION:
ip route add 172.16.1.0/24 via 172.16.1.1 dev eth1 proto static src
172.16.1.1 table 220
3) 172.16.1.0/24 doesn't reach server B.
SOLUTION:
(ip route add 172.16.1.0/24 via 172.16.1.1 dev eth1 proto static src
172.16.1.1 table 220)
ip xfrm policy add src 172.16.1.0/24 dst 172.16.1.0/24 dir in
ip xfrm policy add src 172.16.1.0/24 dst 172.16.1.0/24 dir out
4) Server B tries to surf the net with the local ip (172.16.1.1) instead
of the public ip (2.118.245.45).
SOLUTION:
ip addr add 2.118.245.45/32 dev eth0
ip route del default via 192.168.20.1 dev eth0 proto static src
172.16.1.1 table 220
ip route add default via 192.168.20.1 dev eth0 proto static src
2.118.245.45 table 220
Everything works as expected now, but I'd like to automate the
additional rules when server B connects to the vpn.
It should be possible to avoid at least the "ip xfrm policy" rules using
a type=passthrough route in strongswan, but when I tried it didn't work.
Does strongswan support type=passthrough with IKEv2?
Also, what about the additional routes? How can I create them when
establishing the vpn connection?
I hope my efforts will help someone else because there isn't much
documentation on the net.
Cheers,
Niccolò Belli
More information about the Users
mailing list