|
|
|
@@ -47,57 +47,70 @@ in
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
image.modules.linode = { };
|
|
|
|
image.modules.linode = { };
|
|
|
|
networking.hostName = "vps";
|
|
|
|
|
|
|
|
services.smartd.enable = lib.mkForce false;
|
|
|
|
services.smartd.enable = lib.mkForce false;
|
|
|
|
environment.systemPackages = [ ];
|
|
|
|
environment.systemPackages = [ ];
|
|
|
|
networking.nftables.enable = true;
|
|
|
|
networking = {
|
|
|
|
networking.firewall = {
|
|
|
|
hostName = "vps";
|
|
|
|
enable = true;
|
|
|
|
nat = {
|
|
|
|
filterForward = true;
|
|
|
|
inherit externalInterface;
|
|
|
|
checkReversePath = "loose";
|
|
|
|
enable = true;
|
|
|
|
allowedTCPPorts = [ sshPort ] ++ webPorts;
|
|
|
|
internalInterfaces = [ "wg0" ];
|
|
|
|
allowedUDPPorts = [ wgPort ];
|
|
|
|
forwardPorts = [
|
|
|
|
extraForwardRules = ''
|
|
|
|
{
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgFriend1}/32 ip daddr ${homeServer}/32 tcp dport ${syncthingPort} accept
|
|
|
|
sourcePort = giteaSshPort;
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgFriend2}/32 ip daddr ${homeServer}/32 tcp dport ${syncthingPort} accept
|
|
|
|
proto = "tcp";
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgFriend3}/32 ip daddr ${homeServer}/32 tcp dport ${syncthingPort} accept
|
|
|
|
destination = "${homeServer}:${giteaSshPortStr}";
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgFriend4}/32 ip daddr ${homeServer}/32 tcp dport ${syncthingPort} accept
|
|
|
|
}
|
|
|
|
iifname "${wgInterface}" ip saddr ${homeServer}/32 ip daddr ${wgFriend1}/32 tcp dport ${syncthingPort} accept
|
|
|
|
];
|
|
|
|
iifname "${wgInterface}" ip saddr ${homeServer}/32 ip daddr ${wgFriend2}/32 tcp dport ${syncthingPort} accept
|
|
|
|
};
|
|
|
|
iifname "${wgInterface}" ip saddr ${homeServer}/32 ip daddr ${wgFriend3}/32 tcp dport ${syncthingPort} accept
|
|
|
|
nftables = {
|
|
|
|
iifname "${wgInterface}" ip saddr ${homeServer}/32 ip daddr ${wgFriend4}/32 tcp dport ${syncthingPort} accept
|
|
|
|
enable = true;
|
|
|
|
|
|
|
|
tables."vps-snat" = {
|
|
|
|
|
|
|
|
family = "ip";
|
|
|
|
|
|
|
|
content = ''
|
|
|
|
|
|
|
|
chain postrouting {
|
|
|
|
|
|
|
|
type nat hook postrouting priority srcnat;
|
|
|
|
|
|
|
|
iifname "${externalInterface}" oifname "${wgInterface}" ip daddr ${homeServer}/32 tcp dport ${giteaSshPortStr} masquerade comment "snat ssh forward"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
'';
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
firewall = {
|
|
|
|
|
|
|
|
enable = true;
|
|
|
|
|
|
|
|
filterForward = true;
|
|
|
|
|
|
|
|
checkReversePath = "loose";
|
|
|
|
|
|
|
|
allowedTCPPorts = [ sshPort ] ++ webPorts;
|
|
|
|
|
|
|
|
allowedUDPPorts = [ wgPort ];
|
|
|
|
|
|
|
|
extraForwardRules = ''
|
|
|
|
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgFriend1}/32 ip daddr ${homeServer}/32 tcp dport ${syncthingPort} accept
|
|
|
|
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgFriend2}/32 ip daddr ${homeServer}/32 tcp dport ${syncthingPort} accept
|
|
|
|
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgFriend3}/32 ip daddr ${homeServer}/32 tcp dport ${syncthingPort} accept
|
|
|
|
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgFriend4}/32 ip daddr ${homeServer}/32 tcp dport ${syncthingPort} accept
|
|
|
|
|
|
|
|
iifname "${wgInterface}" ip saddr ${homeServer}/32 ip daddr ${wgFriend1}/32 tcp dport ${syncthingPort} accept
|
|
|
|
|
|
|
|
iifname "${wgInterface}" ip saddr ${homeServer}/32 ip daddr ${wgFriend2}/32 tcp dport ${syncthingPort} accept
|
|
|
|
|
|
|
|
iifname "${wgInterface}" ip saddr ${homeServer}/32 ip daddr ${wgFriend3}/32 tcp dport ${syncthingPort} accept
|
|
|
|
|
|
|
|
iifname "${wgInterface}" ip saddr ${homeServer}/32 ip daddr ${wgFriend4}/32 tcp dport ${syncthingPort} accept
|
|
|
|
|
|
|
|
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgFriendsSubnet} ip daddr ${homeServer}/32 tcp dport { ${synapseClientPort}, ${synapseFederationPort}, ${syncplayPort} } accept
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgFriendsSubnet} ip daddr ${homeServer}/32 tcp dport { ${synapseClientPort}, ${synapseFederationPort}, ${syncplayPort} } accept
|
|
|
|
|
|
|
|
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgFriendsSubnet} ip daddr ${homeServer}/32 icmp type echo-request accept
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgFriendsSubnet} ip daddr ${homeServer}/32 icmp type echo-request accept
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgFriend1}/32 ip daddr ${homeServer}/32 tcp dport ${stashPort} accept
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgFriend1}/32 ip daddr ${homeServer}/32 tcp dport ${stashPort} accept
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgGuest1}/32 ip daddr ${homeServer}/32 tcp dport ${stashPort} accept
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgGuest1}/32 ip daddr ${homeServer}/32 tcp dport ${stashPort} accept
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgGuestsSubnet} ip daddr ${homeServer}/32 icmp type echo-request accept
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgGuestsSubnet} ip daddr ${homeServer}/32 icmp type echo-request accept
|
|
|
|
|
|
|
|
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgFriendsSubnet} oifname "${externalInterface}" accept
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgFriendsSubnet} oifname "${externalInterface}" accept
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgGuestsSubnet} oifname "${externalInterface}" accept
|
|
|
|
iifname "${wgInterface}" ip saddr ${wgGuestsSubnet} oifname "${externalInterface}" accept
|
|
|
|
|
|
|
|
|
|
|
|
iifname "${externalInterface}" ip daddr ${homeServer}/32 tcp dport ${giteaSshPortStr} accept
|
|
|
|
iifname "${externalInterface}" ip daddr ${homeServer}/32 tcp dport ${giteaSshPortStr} accept
|
|
|
|
|
|
|
|
|
|
|
|
ip saddr ${wgFriendsSubnet} ip daddr ${wgServerSubnet} drop
|
|
|
|
ip saddr ${wgFriendsSubnet} ip daddr ${wgServerSubnet} drop
|
|
|
|
ip saddr ${wgServerSubnet} ip daddr ${wgFriendsSubnet} drop
|
|
|
|
ip saddr ${wgServerSubnet} ip daddr ${wgFriendsSubnet} drop
|
|
|
|
ip saddr ${wgGuestsSubnet} ip daddr ${wgServerSubnet} drop
|
|
|
|
ip saddr ${wgGuestsSubnet} ip daddr ${wgServerSubnet} drop
|
|
|
|
ip saddr ${wgServerSubnet} ip daddr ${wgGuestsSubnet} drop
|
|
|
|
ip saddr ${wgServerSubnet} ip daddr ${wgGuestsSubnet} drop
|
|
|
|
ip saddr ${wgGuestsSubnet} ip daddr ${wgFriendsSubnet} drop
|
|
|
|
ip saddr ${wgGuestsSubnet} ip daddr ${wgFriendsSubnet} drop
|
|
|
|
ip saddr ${wgFriendsSubnet} ip daddr ${wgGuestsSubnet} drop
|
|
|
|
ip saddr ${wgFriendsSubnet} ip daddr ${wgGuestsSubnet} drop
|
|
|
|
'';
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
};
|
|
|
|
networking.nat = {
|
|
|
|
|
|
|
|
enable = true;
|
|
|
|
|
|
|
|
inherit externalInterface;
|
|
|
|
|
|
|
|
internalInterfaces = [ "wg0" ];
|
|
|
|
|
|
|
|
forwardPorts = [
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
sourcePort = giteaSshPort;
|
|
|
|
|
|
|
|
proto = "tcp";
|
|
|
|
|
|
|
|
destination = "${homeServer}:${giteaSshPortStr}";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
};
|
|
|
|
};
|
|
|
|
security.sudo-rs.extraRules = [
|
|
|
|
security.sudo-rs.extraRules = [
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|