<div dir="ltr"><span style="font-size:12.8px">Dear list,</span><br style="font-size:12.8px"><br>(I accidentally <a href="https://groups.google.com/forum/#!topic/strongswan-users/2ytikPcg7jA">sent a previous message</a> to the read-only <a href="mailto:strongswan-users@googlegroups.com">strongswan-users@googlegroups.com</a>. So let's try the real list.)<br><br style="font-size:12.8px"><span style="font-size:12.8px">I'm working on another NixOS strongswan test. This time I have two roadwarriors alice and carol that set up a connection to gateway moon. They request a virtual IP. The gateway moon assigns virtual IP addresses from a pool per roadwarrior containing a single IP address. Authentication is based on X.509 certificates. In order to test the tunnel alice and carol ping each other. </span><span style="font-size:12.8px">The test configuration can be found in:</span><br style="font-size:12.8px"><span style="font-size:12.8px"><br></span><div><span style="font-size:12.8px"><a href="https://github.com/LumiGuide/nixpkgs/blob/strongswan-swanctl-pubkey-test/nixos/tests/strongswan-swanctl-pubkey.nix">https://github.com/LumiGuide/nixpkgs/blob/strongswan-swanctl-pubkey-test/nixos/tests/strongswan-swanctl-pubkey.nix</a></span><br><br style="font-size:12.8px"><span style="font-size:12.8px">The roadwarriors alice and carol can successfully establish a CHILD_SA with the gateway moon. The problem is that the roadwarriors can't ping eachother. </span><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">This is a tcpdump on alice while initiating the CHILD_SA and trying to ping carol:</span></div><div><span style="font-size:12.8px"><br></span></div><div><div><span style="font-size:12.8px">[alice] $ tcpdump -s 0 -n -i nflog:5</span></div><div><span style="font-size:12.8px">tcpdump: verbose output suppressed, use -v or -vv for full protocol decode</span></div><div><span style="font-size:12.8px">listening on nflog:5, link-type NFLOG (Linux netfilter log messages), capture size 262144 bytes</span></div><div><span style="font-size:12.8px"># </span><span style="font-size:12.8px">swanctl -i --child alice</span></div><div><span style="font-size:12.8px">11:05:07.318185 IP 192.168.1.1.500 > 192.168.1.3.500: isakmp: parent_sa ikev2_init[I]</span></div><div><span style="font-size:12.8px">11:05:07.318291 IP 192.168.1.3.500 > 192.168.1.1.500: isakmp: parent_sa ikev2_init[R]</span></div><div><span style="font-size:12.8px">11:05:07.318296 IP 192.168.1.1.4500 > 192.168.1.3.4500: NONESP-encap: isakmp: child_sa  ikev2_auth[I]</span></div><div><span style="font-size:12.8px">11:05:07.318308 IP 192.168.1.1.4500 > 192.168.1.3.4500: NONESP-encap: isakmp: child_sa  ikev2_auth[I]</span></div><div><span style="font-size:12.8px">11:05:08.346181 IP 192.168.1.3.4500 > 192.168.1.1.4500: NONESP-encap: isakmp: child_sa  ikev2_auth[R]</span></div><div><span style="font-size:12.8px">11:05:08.346196 IP 192.168.1.3.4500 > 192.168.1.1.4500: NONESP-encap: isakmp: child_sa  ikev2_auth[R]</span></div><div><span style="font-size:12.8px"># </span><span style="font-size:12.8px">ping -c 1 10.0.0.2</span></div><div><span style="font-size:12.8px">11:05:15.898172 IP 192.168.1.1 > <a href="http://10.0.0.2">10.0.0.2</a>: ICMP echo request, id 1120, seq 1, length 64</span></div><div><span style="font-size:12.8px">11:05:15.898200 IP 192.168.1.1 > <a href="http://10.0.0.2">10.0.0.2</a>: ICMP echo request, id 1120, seq 1, length 64</span></div><div><span style="font-size:12.8px">11:05:15.898205 IP 192.168.1.1 > <a href="http://192.168.1.3">192.168.1.3</a>: ESP(spi=0xc6877d56,seq=0x1), length 136</span></div><div><br></div><div>So it looks like the ping packet gets encapsulated and send to moon. <span style="font-size:12.8px">This is the dump on moon:</span></div><div><span style="font-size:12.8px"><br></span></div><div><div><span style="font-size:12.8px">[moon] $ tcpdump -s 0 -n -i nflog:5</span></div><div><span style="font-size:12.8px">tcpdump: verbose output suppressed, use -v or -vv for full protocol decode</span></div><div><span style="font-size:12.8px">listening on nflog:5, link-type NFLOG (Linux netfilter log messages), capture size 262144 bytes</span></div><div><span style="font-size:12.8px">11:05:07.170190 IP 192.168.1.1.500 > 192.168.1.3.500: isakmp: parent_sa ikev2_init[I]</span></div><div><span style="font-size:12.8px">11:05:07.170218 IP 192.168.1.3.500 > 192.168.1.1.500: isakmp: parent_sa ikev2_init[R]</span></div><div><span style="font-size:12.8px">11:05:07.170221 IP 192.168.1.1.4500 > 192.168.1.3.4500: NONESP-encap: isakmp: child_sa  ikev2_auth[I]</span></div><div><span style="font-size:12.8px">11:05:07.170227 IP 192.168.1.1.4500 > 192.168.1.3.4500: NONESP-encap: isakmp: child_sa  ikev2_auth[I]</span></div><div><span style="font-size:12.8px">11:05:08.225827 IP 192.168.1.3.4500 > 192.168.1.1.4500: NONESP-encap: isakmp: child_sa  ikev2_auth[R]</span></div><div><span style="font-size:12.8px">11:05:08.225843 IP 192.168.1.3.4500 > 192.168.1.1.4500: NONESP-encap: isakmp: child_sa  ikev2_auth[R]</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">11:05:15.777787 IP 192.168.1.1 > <a href="http://192.168.1.3">192.168.1.3</a>: ESP(spi=0xc6877d56,seq=0x1), length 136</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">So moon receives the encapsulated ping message from alice but it never reroutes it to carol. </span>Is this caused by a bad routing configuration? These are the routes on alice and her auto-generated swanctl configuration:</div></div><div><div><br></div><div><div>[alice] $ ip route list table 220</div><div><a href="http://10.0.0.0/24">10.0.0.0/24</a> via 192.168.1.3 dev eth1 proto static src 192.168.1.1 </div></div><div><br></div><div><span style="font-size:12.8px">[alice] $ cat /etc/swanctl/swanctl.conf</span></div><div><div><span style="font-size:12.8px">connections {</span></div><div><span style="font-size:12.8px">  alice {</span></div><div><span style="font-size:12.8px">    children {</span></div><div><span style="font-size:12.8px">      alice {</span></div><div><span style="font-size:12.8px">        remote_ts = <a href="http://10.0.0.0/24">10.0.0.0/24</a></span></div><div><span style="font-size:12.8px">        start_action = trap</span></div><div><span style="font-size:12.8px">        updown = /nix/store/jdcviy5z25xamq35g8k9qbdpskkx3w9g-strongswan-5.6.0/libexec/ipsec/_updown iptables</span></div><div><span style="font-size:12.8px">      }</span></div><div><span style="font-size:12.8px">    }</span></div><div><span style="font-size:12.8px">    local-main {</span></div><div><span style="font-size:12.8px">      auth = pubkey</span></div><div><span style="font-size:12.8px">      certs = aliceCert.der</span></div><div><span style="font-size:12.8px">      id = alice</span></div><div><span style="font-size:12.8px">    }</span></div><div><span style="font-size:12.8px">    remote-main {</span></div><div><span style="font-size:12.8px">      auth = pubkey</span></div><div><span style="font-size:12.8px">      id = moon</span></div><div><span style="font-size:12.8px">    }</span></div><div><span style="font-size:12.8px">    remote_addrs = moon</span></div><div><span style="font-size:12.8px">    version = 2</span></div><div><span style="font-size:12.8px">    vips = 0.0.0.0</span></div><div><span style="font-size:12.8px">  }</span></div><div><span style="font-size:12.8px">}</span></div></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Routing table 220 is empty on moon. Is that how it's supposed to be? This is its auto-generated swanctl configuration:</span></div><div><br></div><div><div><div><span style="font-size:12.8px">[moon] $ cat /etc/swanctl/swanctl.conf </span></div><div><span style="font-size:12.8px">connections {</span></div><div><span style="font-size:12.8px">  alice {</span></div><div><span style="font-size:12.8px">    children {</span></div><div><span style="font-size:12.8px">      alice {</span></div><div><span style="font-size:12.8px">        local_ts = <a href="http://10.0.0.0/24">10.0.0.0/24</a></span></div><div><span style="font-size:12.8px">        updown = /nix/store/jdcviy5z25xamq35g8k9qbdpskkx3w9g-strongswan-5.6.0/libexec/ipsec/_updown iptables</span></div><div><span style="font-size:12.8px">      }</span></div><div><span style="font-size:12.8px">    }</span></div><div><span style="font-size:12.8px">    local-main {</span></div><div><span style="font-size:12.8px">      auth = pubkey</span></div><div><span style="font-size:12.8px">      certs = moonCert.der</span></div><div><span style="font-size:12.8px">      id = moon</span></div><div><span style="font-size:12.8px">    }</span></div><div><span style="font-size:12.8px">    pools = alice</span></div><div><span style="font-size:12.8px">    remote-main {</span></div><div><span style="font-size:12.8px">      auth = pubkey</span></div><div><span style="font-size:12.8px">      id = alice</span></div><div><span style="font-size:12.8px">    }</span></div><div><span style="font-size:12.8px">    version = 2</span></div><div><span style="font-size:12.8px">  }</span></div><div><span style="font-size:12.8px">  carol {</span></div><div><span style="font-size:12.8px">    children {</span></div><div><span style="font-size:12.8px">      carol {</span></div><div><span style="font-size:12.8px">        local_ts = <a href="http://10.0.0.0/24">10.0.0.0/24</a></span></div><div><span style="font-size:12.8px">        updown = /nix/store/jdcviy5z25xamq35g8k9qbdpskkx3w9g-strongswan-5.6.0/libexec/ipsec/_updown iptables</span></div><div><span style="font-size:12.8px">      }</span></div><div><span style="font-size:12.8px">    }</span></div><div><span style="font-size:12.8px">    local-main {</span></div><div><span style="font-size:12.8px">      auth = pubkey</span></div><div><span style="font-size:12.8px">      certs = moonCert.der</span></div><div><span style="font-size:12.8px">      id = moon</span></div><div><span style="font-size:12.8px">    }</span></div><div><span style="font-size:12.8px">    pools = carol</span></div><div><span style="font-size:12.8px">    remote-main {</span></div><div><span style="font-size:12.8px">      auth = pubkey</span></div><div><span style="font-size:12.8px">      id = carol</span></div><div><span style="font-size:12.8px">    }</span></div><div><span style="font-size:12.8px">    version = 2</span></div><div><span style="font-size:12.8px">  }</span></div><div><span style="font-size:12.8px">}</span></div><div><span style="font-size:12.8px">pools {</span></div><div><span style="font-size:12.8px">  alice {</span></div><div><span style="font-size:12.8px">    addrs = 10.0.0.1</span></div><div><span style="font-size:12.8px">  }</span></div><div><span style="font-size:12.8px">  carol {</span></div><div><span style="font-size:12.8px">    addrs = 10.0.0.2</span></div><div><span style="font-size:12.8px">  }</span></div><div><span style="font-size:12.8px">}</span></div></div></div><div><br></div></div></div><div>I'm sure I'm not configuring something correctly. Can somebody point me in the right direction to get this test succeeding?</div><div><br></div><div>Regards,</div><div><br></div><div>Bas</div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px"><br></span></div></div></div>