Skip to content

Commit 3b7d3dd

Browse files
authored
Merge pull request #25 from secshellnet/test/ipsec
tests/ipsec-transport: init
2 parents 68c145b + cd9e1f7 commit 3b7d3dd

2 files changed

Lines changed: 134 additions & 0 deletions

File tree

tests/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
| dns-knot-xfr-dnssec | Knot DNS Server |
1717
| dns-knot-xfr-tsig | Knot DNS Server |
1818
| dns-knot-xfr-tsig-explicit-notify | Knot DNS Server |
19+
| ipsec-transport | strongswan |
1920
| nat64-dns64 | Jool, BIND9 |
2021
| ospf | FRR, BIRD3 |
2122
| ping6-local-link | |

tests/ipsec-transport/default.nix

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
{ lib, pkgs, ... }:
2+
{
3+
name = "ipsec-transport";
4+
5+
defaults = {
6+
networking.firewall.enable = false;
7+
};
8+
9+
nodes = {
10+
machine1 = {
11+
services.strongswan = {
12+
enable = true;
13+
secrets = [
14+
(toString (
15+
pkgs.writeText "ipsec" ''
16+
: PSK 012345678ABCDEF
17+
''
18+
))
19+
];
20+
connections = {
21+
"%default" = {
22+
ike = "aes256gcm16-sha384-ecp384!";
23+
esp = "aes256-sha256-ecp384!";
24+
};
25+
26+
output = {
27+
rightsubnet = "%dynamic[tcp/4444]";
28+
right = "%any";
29+
type = "transport";
30+
authby = "psk";
31+
auto = "route";
32+
};
33+
34+
input = {
35+
leftsubnet = "%dynamic[tcp/4444]";
36+
type = "transport";
37+
authby = "psk";
38+
auto = "route";
39+
};
40+
};
41+
};
42+
};
43+
machine2 = {
44+
services.strongswan-swanctl = {
45+
enable = true;
46+
swanctl = {
47+
secrets.ike.default.secret = "012345678ABCDEF";
48+
connections =
49+
let
50+
proposals = [ "aes256gcm16-sha384-ecp384" ];
51+
esp_proposals = [ "aes256-sha256-ecp384" ];
52+
mode = "transport";
53+
start_action = "trap";
54+
in
55+
{
56+
input = {
57+
inherit proposals;
58+
59+
local."machine2".auth = "psk";
60+
61+
remote."machine1".auth = "psk";
62+
63+
children."nc4444" = {
64+
local_ts = [ "dynamic[tcp/4444]" ];
65+
inherit esp_proposals mode start_action;
66+
};
67+
};
68+
output = {
69+
inherit proposals;
70+
71+
local."machine2".auth = "psk";
72+
73+
remote."machine1".auth = "psk";
74+
remote_addrs = [ "%any" ];
75+
76+
children."nc4444" = {
77+
remote_ts = [ "dynamic[tcp/4444]" ];
78+
inherit esp_proposals mode start_action;
79+
};
80+
};
81+
};
82+
};
83+
};
84+
};
85+
};
86+
87+
interactive.nodes = lib.listToAttrs (
88+
map
89+
(name: {
90+
inherit name;
91+
value.environment.systemPackages = with pkgs; [
92+
netcat-openbsd
93+
tcpdump
94+
strongswan
95+
];
96+
})
97+
[
98+
"machine1"
99+
"machine2"
100+
]
101+
);
102+
103+
testScript =
104+
let
105+
nc = lib.getExe pkgs.netcat-openbsd;
106+
in
107+
''
108+
start_all()
109+
110+
for m in [machine1, machine2]:
111+
m.wait_for_unit("network.target")
112+
113+
machine1.wait_for_unit("strongswan.service")
114+
machine2.wait_for_unit("strongswan-swanctl.service")
115+
116+
machine1.succeed("${lib.getExe pkgs.tcpdump} -i any -n -c 5 'proto 50' > dump.txt &")
117+
118+
machine1.succeed("${nc} -lvnp 4444 &> nc.txt &")
119+
machine2.succeed("${nc} -w0 machine1 4444 <<< s3cr3t")
120+
121+
assert "ESTABLISHED" in machine1.succeed("${lib.getExe' pkgs.strongswan "ipsec"} status"), \
122+
"ipsec sa not established"
123+
124+
assert "IKE_SAs: 1 total" in machine2.succeed("${lib.getExe pkgs.strongswan} --stats"), \
125+
"ipsec sa not established"
126+
127+
assert "s3cr3t" in machine1.succeed("cat nc.txt"), \
128+
"netcat log file doesn't contain secret message"
129+
130+
assert 0 == int(machine1.succeed("cat dump.txt | wc -l")), \
131+
"tcpdump log did not capture any esp packets - traffic not encrypted"
132+
'';
133+
}

0 commit comments

Comments
 (0)