Ao instalar pivpn
no Raspberry Pi ele criará uma regra de iptables:
pi@RPi64:~ $ sudo iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 10.122.242.0/24 anywhere /* wireguard-nat-rule */
Acho que faz isso inserindo a regra via iptables-persistant
:
pi@RPi64:~ $ cat /etc/iptables/rules.v4
# Generated by iptables-save v1.8.7 on Fri Aug 12 08:07:21 2022
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.122.242.0/24 -o eth0 -m comment --comment wireguard-nat-rule -j MASQUERADE
COMMIT
# Completed on Fri Aug 12 08:07:21 2022
Isso está no lado do servidor, é claro. Se eu quiser me conectar totalmente de um cliente a este servidor, preciso adicionar mascaramento no cliente inserindo uma regra semelhante no cliente:
pi@schwarz:~ $ sudo iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- anywhere anywhere
Eu faço assim:
pi@schwarz:~ $ sudo cat /etc/wireguard/schwarz.conf
[Interface]
PrivateKey =
Address = 10.122.242.4/24
PostUp = iptables -t nat -A POSTROUTING -o schwarz -j MASQUERADE
PreDown = iptables -t nat -D POSTROUTING -o schwarz -j MASQUERADE
DNS = 9.9.9.9, 149.112.112.112
[Peer]
...
Em seguida, adiciono rotas estáticas em ambos os roteadores, para que o tráfego para a respectiva LAN seja roteado para o servidor wireguard ou para o cliente de outros clientes nessas LANs.
Dessa forma, posso me conectar totalmente a todos os dispositivos nas duas LANs de qualquer cliente nas duas LANs.
O problema com esta abordagem é que os clientes perdem o IP original da LAN original e, em vez disso, aparecem na outra rede com o IP do cliente wireguard (mais uma porta). É claro que isso se deve ao NAT (mascaramento).
Tudo funciona bem desta forma.
Exceto um serviço: Logitechmediaserver. Este servidor não consegue lidar com todos os clientes que vêm de uma LAN remota porque agora eles têm o mesmo IP. Para ser mais específico, o problema são apenas alguns clientes Logitech (Rádio). Os clientes se conectam bem no servidor, mas não veem o servidor respondendo. Outros clientes (Boom) conectam-se bem. Eles usam um protocolo diferente.
Isso me fez pensar por que pivpn
está mascarando os IPs. Não deveria ser suficiente ter rotas estáticas das LANs para o cliente/servidor e desses clientes/servidor para os túneis que eles criam?
Por que o mascaramento? Isso é feito para o caso do servidor Wireguard atuar também como roteador ISP para a internet? Este não é o caso aqui. O roteador está sempre em uma máquina diferente.
Para encurtar a história, eu queria saber se seria possível, em geral, remover o mascaramento com pivpn
. Além disso, talvez alguém possa apontar para um erro que tenho na minha configuração.
O mascaramento em geral é usado para acesso a uma rede a partir de uma segunda rede, onde a primeira rede não está configurada para rotear respostas de volta para a segunda. Você aplica o mascaramento aos pacotes que saem do gateway para a primeira rede (reescrevendo o endereço de origem dos pacotes para usar o endereço do gateway), para que outros hosts nessa rede respondam de volta ao gateway (o que traduzirá o destino dos pacotes de resposta de volta para o endereço de origem original).
Você não precisa de mascaramento se estiver conectando duas LANs e cada LAN estiver configurada para rotear a outra por meio de seu próprio gateway WireGuard (a configuração clássica do WireGuard site a site).
Você precisa de mascaramento se estiver conectando uma LAN (ou rede WireGuard) à Internet (ou seja, roteamento para a Internet, não apenas túnel através da Internet).
Com uma conexão site a site, se o roteador LAN em cada LAN também for o gateway WireGuard, você normalmente não usaria o mascaramento; normalmente você apenas configuraria a interface WireGuard em cada roteador LAN com uma rota (e
AllowedIPs
configuração apropriada) para a outra LAN e adicionaria regras de firewall aos roteadores que permitem o acesso apropriado de um site para outro.No seu caso, onde parece que você tem um gateway (seu Pis) em cada site que é diferente do roteador LAN, você pode eliminar a necessidade de mascaramento 1) adicionando a rota para o outro site a cada roteador LAN (ou alternativamente para cada dispositivo individual que precisa acessar o outro site) e 2) adicionar a rede LAN do outro site à
AllowedIPs
configuração no gateway WireGuard.Parece que você já deve ter feito isso; mas para dar um exemplo concreto, se você estiver conectando duas LANs, 10.100.100.0/24 e 10.200.200.0/24, e o gateway WireGuard na LAN 1 for 10.100.100.123 e o gateway WireGuard na LAN 2 for 10.200.200.234, você adicionaria uma rota ao roteador LAN (ou dispositivos individuais) na LAN 1 como a seguir (usando a interface conectada à LAN apropriada para o roteador ou dispositivo, como eth1):
E uma rota correspondente para o roteador LAN (ou dispositivos individuais) na LAN 2 como a seguir:
Na configuração do WireGuard para LAN 1, você incluiria a rede do outro site na
AllowedIPs
configuração do outro site:E correspondentemente, na configuração do WireGuard para LAN 2, você incluiria a rede da LAN 1 na
AllowedIPs
configuração da LAN 1:Com essa configuração implementada, você pode remover com segurança as regras de mascaramento de seus gateways WireGuard e o tráfego pode ser roteado de um site para outro e vice-versa sem qualquer NAT.
Se você ainda quiser usar um dos gateways WireGuard como gateway para a Internet, poderá manter a regra de mascaramento, mas simplesmente criar uma exceção para pacotes destinados à própria LAN do gateway; por exemplo, assim no gateway WireGuard para LAN 2:
Um detalhe menor e não relacionado sobre a configuração do WireGuard que você postou: você quase nunca deseja incluir a
DNS
configuração em uma configuração site a site. Normalmente, você usaria apenas aDNS
configuração no lado "ponto" de uma configuração ponto a site, com a finalidade de usar um resolvedor DNS diferente no endpoint quando sua interface WireGuard estiver ativa e quando estiver inativa.