Я хочу предоставить операторам, использующим wireguard, доступ к таким сервисам, как PostgreSQL, nginx, ssh и т. д., не сообщая общедоступный IP-адрес хоста.
Я использую nixos, но простая установка с wireguard + iptables мне подойдет.
Туннель установлен и пакеты передаются, как показано (на сервере):
¯ ВГ
интерфейс: WG0
открытый ключ: k4lOk+/rXONPolNI...
закрытый ключ: (скрытый)
порт прослушивания: 51820
узел: VCH3gPI0qu0rUKMR...
конечная точка: ...:51820
разрешенные ips: 10.100.0.2/32
последнее рукопожатие: 32 секунды назад
передача: 53,11 КиБ получено, 1,05 КиБ отправлено
Но не могу подключиться к postgres с помощью psql -h 10.100.0.2 -U постгрес
или веб-сервер с завиток 10.100.0.1
с клиента (с сервера работает).
У меня есть сервер (где находится PostgreSQL):
[Интерфейс]
Адрес = 10.100.0.1/32
Порт прослушивания = 51820
PrivateKey = AIaYgTe...
[Вглядеться]
Публичный ключ = VCH3gPI0qu...
Разрешенные IP-адреса = 10.100.0.2/32
Конечная точка = х.х.х.х:51820
У меня есть клиент (peer1)
[Интерфейс]
PrivateKey = cLUTCqLAj2aq...
Порт прослушивания = 51820
Адрес = 10.100.0.2/32
[Вглядеться]
Публичный ключ = k4lOk+/rXONP...
Разрешенные IP-адреса = 0.0.0.0/0
Конечная точка = х.х.х.х:51820
постоянныйKeepalive = 10
Я пробовал много способов настроить брандмауэр, в настоящее время:
networking.nat.enable = истина;
networking.nat.externalInterface = "eth0";
networking.nat.internalInterfaces = ["wg0"];
networking.wireguard.interfaces = {
wg0 = {
интерфейс.
ips = ["10.100.0.1/32"];
порт прослушивания = 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 state --state NEW -p tcp -m multiport --dports 80,443,22,5432 -j ACCEPT
постустановка = ''
${pkgs.iptables}/bin/iptables -I FORWARD 1 -i wg0 -j ПРИНЯТЬ;
${pkgs.iptables}/bin/iptables -t nat -I POSTROUTING 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
'';
# Это отменяет указанную выше команду
postShutdown = ''
${pkgs.iptables}/bin/iptables -D FORWARD -i wg0 -j ПРИНЯТЬ;
${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";
сверстники = [
# Список разрешенных пиров.
{ # узел1
publicKey = "VCH3gPI0qu0rUK...";
разрешенные IP-адреса = [ "10.100.0.2/32" ];
}
];
};
};
network.firewall = {
включить = правда;
разрешить пинг = истина;
разрешеноUDPPorts = [ 51820 ];
разрешенные TCP-порты = [ 80 443 22 ];
interfaces.wg0.allowedTCPPorts = [993 68 80 443 22 5432];
};