Skip to content

Commit 471441d

Browse files
authored
Merge pull request #4637 from alexandr-san4ez/T7562-current
ipsec: T7562: Add support for `disable-uniqreqids` option in IPsec configs
2 parents 98e0b88 + c84c7cf commit 471441d

File tree

6 files changed

+49
-8
lines changed

6 files changed

+49
-8
lines changed

data/templates/ipsec/swanctl.conf.j2

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,17 @@
44
{% import 'ipsec/swanctl/peer.j2' as peer_tmpl %}
55
{% import 'ipsec/swanctl/remote_access.j2' as remote_access_tmpl %}
66

7+
{% set uniqreqids = 'never' if disable_uniqreqids is vyos_defined else None %}
8+
79
connections {
810
{% if profile is vyos_defined %}
911
{% for name, profile_conf in profile.items() if profile_conf.disable is not vyos_defined and profile_conf.bind.tunnel is vyos_defined %}
10-
{{ profile_tmpl.conn(name, profile_conf, ike_group, esp_group) }}
12+
{{ profile_tmpl.conn(name, profile_conf, ike_group, esp_group, uniqreqids) }}
1113
{% endfor %}
1214
{% endif %}
1315
{% if site_to_site.peer is vyos_defined %}
1416
{% for peer, peer_conf in site_to_site.peer.items() if peer not in dhcp_no_address and peer_conf.disable is not vyos_defined %}
15-
{{ peer_tmpl.conn(peer, peer_conf, ike_group, esp_group) }}
17+
{{ peer_tmpl.conn(peer, peer_conf, ike_group, esp_group, uniqreqids) }}
1618
{% endfor %}
1719
{% endif %}
1820
{% if remote_access.connection is vyos_defined %}
@@ -21,7 +23,7 @@ connections {
2123
{% endfor %}
2224
{% endif %}
2325
{% if l2tp %}
24-
{{ l2tp_tmpl.conn(l2tp, l2tp_outside_address, l2tp_ike_default, l2tp_esp_default, ike_group, esp_group) }}
26+
{{ l2tp_tmpl.conn(l2tp, l2tp_outside_address, l2tp_ike_default, l2tp_esp_default, ike_group, esp_group, uniqreqids) }}
2527
{% endif %}
2628
}
2729

data/templates/ipsec/swanctl/l2tp.j2

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{% macro conn(l2tp, l2tp_outside_address, l2tp_ike_default, l2tp_esp_default, ike_group, esp_group) %}
1+
{% macro conn(l2tp, l2tp_outside_address, l2tp_ike_default, l2tp_esp_default, ike_group, esp_group, uniqreqids) %}
22
{% set l2tp_ike = ike_group[l2tp.ike_group] if l2tp.ike_group is vyos_defined else None %}
33
{% set l2tp_esp = esp_group[l2tp.esp_group] if l2tp.esp_group is vyos_defined else None %}
44
l2tp_remote_access {
@@ -8,6 +8,9 @@
88
dpd_timeout = 45s
99
rekey_time = {{ l2tp_ike.lifetime if l2tp_ike else l2tp.ike_lifetime }}s
1010
reauth_time = 0
11+
{% if uniqreqids is vyos_defined %}
12+
unique = {{ uniqreqids }}
13+
{% endif %}
1114
local {
1215
auth = {{ 'psk' if l2tp.authentication.mode == 'pre-shared-secret' else 'pubkey' }}
1316
{% if l2tp.authentication.mode == 'x509' %}

data/templates/ipsec/swanctl/peer.j2

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{% macro conn(peer, peer_conf, ike_group, esp_group) %}
1+
{% macro conn(peer, peer_conf, ike_group, esp_group, uniqreqids) %}
22
{% set name = peer.replace("@", "") | dot_colon_to_dash %}
33
{# peer needs to reference the global IKE configuration for certain values #}
44
{% set ike = ike_group[peer_conf.ike_group] %}
@@ -32,6 +32,9 @@
3232
{% endif %}
3333
{% if peer_conf.force_udp_encapsulation is vyos_defined %}
3434
encap = yes
35+
{% endif %}
36+
{% if uniqreqids is vyos_defined %}
37+
unique = {{ uniqreqids }}
3538
{% endif %}
3639
local {
3740
{% if peer_conf.authentication.local_id is vyos_defined %}

data/templates/ipsec/swanctl/profile.j2

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{% macro conn(name, profile_conf, ike_group, esp_group) %}
1+
{% macro conn(name, profile_conf, ike_group, esp_group, uniqreqids) %}
22
{# peer needs to reference the global IKE configuration for certain values #}
33
{% set ike = ike_group[profile_conf.ike_group] %}
44
{% set esp = esp_group[profile_conf.esp_group] %}
@@ -13,6 +13,9 @@
1313
dpd_timeout = {{ ike.dead_peer_detection.timeout }}
1414
dpd_delay = {{ ike.dead_peer_detection.interval }}
1515
{% endif %}
16+
{% if uniqreqids is vyos_defined %}
17+
unique = {{ uniqreqids }}
18+
{% endif %}
1619
{% if profile_conf.authentication.mode is vyos_defined('pre-shared-secret') %}
1720
local {
1821
auth = psk

smoketest/scripts/cli/test_vpn_ipsec.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,9 @@ def test_site_to_site(self):
233233
self.cli_set(peer_base_path + ['tunnel', '2', 'remote', 'prefix', '10.2.0.0/16'])
234234
self.cli_set(peer_base_path + ['tunnel', '2', 'priority', priority])
235235

236+
# Passing the 'unique = never' for StrongSwan's `connections.<conn>.unique` parameter
237+
self.cli_set(base_path + ['disable-uniqreqids'])
238+
236239
self.cli_commit()
237240

238241
# Verify strongSwan configuration
@@ -259,6 +262,7 @@ def test_site_to_site(self):
259262
f'priority = {priority}',
260263
f'mode = tunnel',
261264
f'replay_window = 32',
265+
'unique = never',
262266
]
263267
for line in swanctl_conf_lines:
264268
self.assertIn(line, swanctl_conf)
@@ -634,6 +638,9 @@ def test_dmvpn(self):
634638
self.cli_set(base_path + ['profile', 'NHRPVPN', 'esp-group', esp_group])
635639
self.cli_set(base_path + ['profile', 'NHRPVPN', 'ike-group', ike_group])
636640

641+
# Passing the 'unique = never' for StrongSwan's `connections.<conn>.unique` parameter
642+
self.cli_set(base_path + ['disable-uniqreqids'])
643+
637644
self.cli_commit()
638645

639646
swanctl_conf = read_file(swanctl_file)
@@ -646,7 +653,8 @@ def test_dmvpn(self):
646653
f'local_ts = dynamic[gre]',
647654
f'remote_ts = dynamic[gre]',
648655
f'mode = transport',
649-
f'secret = {nhrp_secret}'
656+
f'secret = {nhrp_secret}',
657+
'unique = never',
650658
]
651659
for line in swanctl_lines:
652660
self.assertIn(line, swanctl_conf)

smoketest/scripts/cli/test_vpn_l2tp.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919
from base_accel_ppp_test import BasicAccelPPPTest
2020
from configparser import ConfigParser
2121
from vyos.utils.process import cmd
22+
from vyos.utils.file import read_file
23+
24+
25+
swanctl_file = '/etc/swanctl/swanctl.conf'
2226

2327

2428
class TestVPNL2TPServer(BasicAccelPPPTest.TestCase):
@@ -57,11 +61,16 @@ def test_l2tp_server_authentication_protocols(self):
5761
def test_vpn_l2tp_dependence_ipsec_swanctl(self):
5862
# Test config vpn for tasks T3843 and T5926
5963

64+
outside_address = '203.0.113.1'
65+
6066
base_path = ['vpn', 'l2tp', 'remote-access']
6167
# make precondition
6268
self.cli_set(['interfaces', 'dummy', 'dum0', 'address', '203.0.113.1/32'])
6369
self.cli_set(['vpn', 'ipsec', 'interface', 'dum0'])
6470

71+
# Passing the 'unique = never' for StrongSwan's `connections.<conn>.unique` parameter
72+
self.cli_set(['vpn', 'ipsec', 'disable-uniqreqids'])
73+
6574
self.cli_commit()
6675
# check ipsec apply to swanctl
6776
self.assertEqual('', cmd('echo vyos | sudo -S swanctl -L '))
@@ -76,14 +85,27 @@ def test_vpn_l2tp_dependence_ipsec_swanctl(self):
7685
self.cli_set(base_path + ['ipsec-settings', 'authentication', 'pre-shared-secret', 'SeCret'])
7786
self.cli_set(base_path + ['ipsec-settings', 'ike-lifetime', '8600'])
7887
self.cli_set(base_path + ['ipsec-settings', 'lifetime', '3600'])
79-
self.cli_set(base_path + ['outside-address', '203.0.113.1'])
88+
self.cli_set(base_path + ['outside-address', outside_address])
8089
self.cli_set(base_path + ['gateway-address', '203.0.113.1'])
8190

8291
self.cli_commit()
8392

8493
# check l2tp apply to swanctl
8594
self.assertTrue('l2tp_remote_access:' in cmd('echo vyos | sudo -S swanctl -L '))
8695

96+
swanctl_conf = read_file(swanctl_file)
97+
swanctl_lines = [
98+
f'local_addrs = {outside_address}',
99+
'proposals = aes256-sha1-modp1024,3des-sha1-modp1024',
100+
'dpd_delay = 15s',
101+
'dpd_timeout = 45s',
102+
'rekey_time = 8600s',
103+
'reauth_time = 0',
104+
'unique = never',
105+
]
106+
for line in swanctl_lines:
107+
self.assertIn(line, swanctl_conf)
108+
87109
self.cli_delete(['vpn', 'l2tp'])
88110
self.cli_commit()
89111

0 commit comments

Comments
 (0)