Skip to content

Commit e74970c

Browse files
authored
Merge pull request #3572 from talmakion/bugfix/T6403
nat64: T6403: validate source prefix for RFC compliance
2 parents 38fd6b2 + 3ad333f commit e74970c

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

src/conf_mode/nat64.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import os
2121
import re
2222

23-
from ipaddress import IPv6Network
23+
from ipaddress import IPv6Network, IPv6Address
2424
from json import dumps as json_write
2525

2626
from vyos import ConfigError
@@ -103,8 +103,14 @@ def verify(nat64) -> None:
103103
# Verify that source.prefix is set and is a /96
104104
if not dict_search("source.prefix", instance):
105105
raise ConfigError(f"Source NAT64 rule {rule} missing source prefix")
106-
if IPv6Network(instance["source"]["prefix"]).prefixlen != 96:
106+
src_prefix = IPv6Network(instance["source"]["prefix"])
107+
if src_prefix.prefixlen != 96:
107108
raise ConfigError(f"Source NAT64 rule {rule} source prefix must be /96")
109+
if (int(src_prefix[0]) & int(IPv6Address('0:0:0:0:ff00::'))) != 0:
110+
raise ConfigError(
111+
f'Source NAT64 rule {rule} source prefix is not RFC6052-compliant: '
112+
'bits 64 to 71 (9th octet) must be zeroed'
113+
)
108114

109115
pools = dict_search("translation.pool", instance)
110116
if pools:

0 commit comments

Comments
 (0)