91 lines
2.0 KiB
Markdown
91 lines
2.0 KiB
Markdown
# Network and networking modules
|
|
|
|
This directory houses all network, firewall, DHCP, DNS, and all other related networking enablement.
|
|
|
|
## `core.nix`
|
|
|
|
This is where the firewall and NetworkManager live. For the firewall, you have pre-defined options that will open ports for you by enabling some network service.
|
|
|
|
For example:
|
|
|
|
```nix
|
|
tcpPorts.web.enable = true;
|
|
udpPorts.dns.enable = true;
|
|
```
|
|
|
|
Here's a more featureful example of how you would enable a firewall and set up NetworkManager:
|
|
|
|
```nix
|
|
customNetworking = {
|
|
firewall = {
|
|
enable = true;
|
|
|
|
# Open web service ports
|
|
tcpPorts.web.enable = true;
|
|
|
|
# Custom TCP ports
|
|
tcpPorts.allowedPorts = [ 8080 22 ];
|
|
|
|
# Custom UDP ports
|
|
udpPorts.allowedPorts = [ 5000 ];
|
|
};
|
|
|
|
networkManager = {
|
|
enable = true;
|
|
extraPlugins = with pkgs; [
|
|
# Additional NetworkManager plugins
|
|
networkmanager-openvpn
|
|
networkmanager-openconnect
|
|
];
|
|
};
|
|
};
|
|
```
|
|
|
|
As shown above, you'll have to open ports for services you would want to access remotely.
|
|
|
|
## DNS
|
|
|
|
There are two options here: BIND9 (or simply Bind) or Technitium DNS server. Enabling both DNS servers will throw an error and your configuration will not build.
|
|
|
|
You'll have to import `./dns.nix` for the services to be enabled.
|
|
|
|
Here's an example of what configuration might look like:
|
|
|
|
```nix
|
|
dns.bind = {
|
|
enable = true;
|
|
settings = {
|
|
interfaces = [ "127.0.0.1" "192.168.100.100" ];
|
|
zones = [
|
|
{
|
|
name = "example.com";
|
|
type = "master";
|
|
file = "/etc/named/zones/example.com.zone";
|
|
}
|
|
];
|
|
extraConfig = ''
|
|
// Additional BIND configuration
|
|
options {
|
|
directory "/var/named";
|
|
recursion yes;
|
|
}
|
|
'';
|
|
}
|
|
};
|
|
```
|
|
|
|
_or_
|
|
|
|
```nix
|
|
dns.technitium = {
|
|
enable = true;
|
|
settings = {
|
|
address = "192.168.100.0";
|
|
port = 5380;
|
|
extraOptions = {
|
|
LOG_LEVEL = "info";
|
|
};
|
|
}
|
|
};
|
|
```
|