Existem 2 servidores Windows, Servidor-A e Servidor-B.
O Servidor-A está conectado diretamente à Internet com IP-1 e IP-2.
O Servidor-B está conectado à internet com IP-3, atrás de um roteador NAT.
Gostaria de configurar o WireGuard para encaminhar todo o tráfego público que entra no Servidor-A no IP-2 para o Servidor-B para ser tratado pelo IIS no Servidor-B.
O tráfego público que entra no Servidor-A no IP-1 deve continuar a ser tratado pelo IIS no Servidor-A.
A configuração do Server-A WireGuard é esta:
[Interface]
PrivateKey = ***
ListenPort = 51820
Address = 10.2.2.1/32
[Peer]
PublicKey = <Server-B-Public-Key>
AllowedIPs = <IP-2>/32
A configuração do Server-B WireGuard é esta:
[Interface]
PrivateKey = ***
Address = <IP-2>/32
[Peer]
PublicKey = <Server-A-Public-Key>
AllowedIPs = 10.2.2.1/32
Endpoint = <IP-1>:51820
PersistentKeepalive = 25
A VPN conecta OK, posso ver os handshakes.
No entanto, o tráfego que entra no IP-2 continua a ser tratado pelo IIS no Servidor-A, em vez do Servidor-B.
Se o endereço precisar ser roteado para outro host, ele também não poderá ser atribuído a esse host, pois ele terá prioridade sobre sua rota personalizada.
Portanto, você precisa cancelar a atribuição do endereço da interface de rede do Servidor-A e usar proxy-ARP para fazer com que o Vultr ainda envie tráfego para esse endereço (ou seja, responda a consultas ARP para um endereço que não está atribuído).
Mas embora a funcionalidade esteja presente no Windows, não consegui encontrar nenhuma interface CLI para ela (aparentemente está lá apenas para VPNs RAS integradas), acho que ainda pode ser chamado via powershell usando P/Invoke ou de um programa C. Também pode haver ferramentas proxy-ARP de terceiros para Windows; ainda não procurei.
(Eu sugiro usar Linux ou FreeBSD como seu servidor "roteador" - não o Windows. Este último é tecnicamente capaz de roteamento IP, mas é severamente carente de funcionalidade ao tentar fazer coisas além dos recursos internos de RAS e ICS.)
Como alternativa, se todo o tráfego for baseado em HTTP ou HTTPS, você poderá configurar um servidor web no Servidor-A para atuar como um "proxy reverso" e encaminhar solicitações no nível HTTP. Tanto o IIS quanto o Apache podem atuar como proxies reversos.
Para outro tráfego TCP, o Windows também possui um proxy interno sob o
netsh portproxy
qual pode encaminhar conexões TCP. A desvantagem de usar esse recurso é que seu Servidor-B sempre verá o Servidor-A como a origem de todas as conexões.