Vreau să dau acces operatorilor care folosesc wireguard la servicii precum PostgreSQL, nginx, ssh etc, fără a da IP-ul public al gazdei.
Folosesc nixos, dar o configurare simplă cu wireguard + iptables poate funcționa pentru mine.
Tunelul este stabilit și pachetele sunt transferate, așa cum se arată (pe server):
⯠wg
interfață: wg0
cheie publică: k4lOk+/rXONPolNI...
cheie privată: (ascunsă)
port de ascultare: 51820
peer: VCH3gPI0qu0rUKMR...
punct final: ...:51820
ips permise: 10.100.0.2/32
ultima strângere de mână: acum 32 de secunde
transfer: 53,11 KiB primit, 1,05 KiB trimis
Dar nu se poate conecta la postgres cu psql -h 10.100.0.2 -U postgres
sau serverul web cu curl 10.100.0.1
de la client (de pe server merge).
Am serverul (unde se află PostgreSQL):
[Interfață]
Adresa = 10.100.0.1/32
ListenPort = 51820
PrivateKey = AIaYgTe...
[Peer]
PublicKey = VCH3gPI0qu...
IP-uri permise = 10.100.0.2/32
Punct final = x.x.x.x:51820
Am clientul (peer1)
[Interfață]
PrivateKey = cLUTCqLAj2aq...
ListenPort = 51820
Adresa = 10.100.0.2/32
[Peer]
PublicKey = k4lOk+/rXONP...
AllowedIPs = 0.0.0.0/0
Punct final = x.x.x.x:51820
persistentKeepalive = 10
Am încercat mai multe moduri de a configura firewall-ul, în prezent:
networking.nat.enable = adevărat;
networking.nat.externalInterface = "eth0";
networking.nat.internalInterfaces = [ "wg0" ];
networking.wireguard.interfaces = {
wg0 = {
interfata.
ips = [ "10.100.0.1/32" ];
listenPort = 51820;
# ${pkgs.iptables}/bin/iptables -t nat -A PREROUTING -i wg0 -p tcp --match multiport --destination-ports 22,5432,443,80 -j DNAT --to-destination 192.168.88.1
# ${pkgs.iptables}/bin/iptables -A INPUT -i wg0 -m stare --state NOU -p tcp -m multiport --dports 80,443,22,5432 -j ACCEPT
postSetup = ''
${pkgs.iptables}/bin/iptables -I FORWARD 1 -i wg0 -j ACCEPT;
${pkgs.iptables}/bin/iptables -t nat -I POSTRUTING 1 -o eth0 -j MASQUERADE
${pkgs.iptables}/bin/iptables -t nat -A PREROUTING -i wg0 -p tcp --match multiport --destination-ports 22,5432,443,80 -j DNAT --to-destination 127.0.0.1
'';
# Aceasta anulează comanda de mai sus
postShutdown = ''
${pkgs.iptables}/bin/iptables -D FORWARD -i wg0 -j ACCEPT;
${pkgs.iptables}/bin/iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
${pkgs.iptables}/bin/iptables -t nat -D PREROUTING -i wg0 -p tcp --match multiport --destination-ports 22,5432,443,80 -j DNAT --to-destination 127.0.0.1
'';
privateKeyFile = "/root/wireguard_private";
colegi = [
# Lista colegilor permisi.
{ # peer1
publicKey = "VCH3gPI0qu0rUK...";
IP-uri permise = [ "10.100.0.2/32" ];
}
];
};
};
networking.firewall = {
enable = adevărat;
allowPing = adevărat;
permitUDPPorts = [51820];
permitTCPPorts = [ 80 443 22 ];
interfaces.wg0.allowedTCPPorts = [ 993 68 80 443 22 5432 ];
};