diff --git a/nixos/doc/manual/release-notes/rl-2009.xml b/nixos/doc/manual/release-notes/rl-2009.xml
index 3166f98907cd..e17e8ac24d13 100644
--- a/nixos/doc/manual/release-notes/rl-2009.xml
+++ b/nixos/doc/manual/release-notes/rl-2009.xml
@@ -431,6 +431,16 @@ systemd.services.nginx.serviceConfig.ReadWritePaths = [ "/var/www" ];
networking.hosts = lib.mkForce { "127.0.1.1" = [ config.networking.hostName ]; };.
+
+
+ The hostname (networking.hostName) must now be a valid
+ DNS label (see RFC 1035) and as such must not contain the domain part.
+ This means that the hostname must start with a letter, end with a letter
+ or digit, and have as interior characters only letters, digits, and
+ hyphen. The maximum length is 63 characters. Additionally it is
+ recommended to only use lower-case characters.
+
+
diff --git a/nixos/modules/tasks/network-interfaces.nix b/nixos/modules/tasks/network-interfaces.nix
index 44677d417ead..12cff6b038f8 100644
--- a/nixos/modules/tasks/network-interfaces.nix
+++ b/nixos/modules/tasks/network-interfaces.nix
@@ -376,10 +376,20 @@ in
networking.hostName = mkOption {
default = "nixos";
- type = types.str;
+ # Only allow hostnames without the domain name part (i.e. no FQDNs, see
+ # e.g. "man 5 hostname") and require valid DNS labels (recommended
+ # syntax). Note: We also allow underscores for compatibility/legacy
+ # reasons (as undocumented feature):
+ type = types.strMatching
+ "^[[:alpha:]]([[:alnum:]_-]{0,61}[[:alnum:]])?$";
description = ''
- The name of the machine. Leave it empty if you want to obtain
- it from a DHCP server (if using DHCP).
+ The name of the machine. Leave it empty if you want to obtain it from a
+ DHCP server (if using DHCP). The hostname must be a valid DNS label (see
+ RFC 1035 section 2.3.1: "Preferred name syntax") and as such must not
+ contain the domain part. This means that the hostname must start with a
+ letter, end with a letter or digit, and have as interior characters only
+ letters, digits, and hyphen. The maximum length is 63 characters.
+ Additionally it is recommended to only use lower-case characters.
'';
};