Eu tenho uma configuração de roteamento multicast com encaminhamento no lado receptor, como segue (todo Linux):
+----------------+ +----------------+ +-------------+
| openvpn-server |tun0 tun0| openvpn-client | forward port 53 | application |
| 10.8.0.1 |============| 10.8.0.2 |-------------------| 172.16.3.3 |
+----------------+ +----------------+ +-------------+
joined 239.1.2.3
multicast group
Nesta configuração, o openvpn-server
lado envia pacotes UDP para o grupo multicast 239.1.2.3 na porta 53. Especificamente, os pacotes são mensagens DNS NOTIFY, mas não acho que isso seja relevante aqui. (Existem vários casos em openvpn-client
que o multicast é usado.)
openvpn-client
em seguida, encaminha o tráfego para application
. Este host confirma o recebimento do pacote respondendo com outro pacote UDP.
O pacote de resposta é enviado de volta para openvpn-client
ondeO Linux traduz o IP de origem de volta para o endereço IP de destino do pacote inicial conforme ele chegavado openvpn-server (assumindo que o destino original será agora o remetente da resposta), ou seja, 239.1.2.3.Este é o problema:Devido a este IP de origem, o pacote não é transmitido ao remetente original do primeiro pacote e o remetente pensa que o pacote não foi transmitido. Isso resulta em várias tentativas desnecessárias e muitos registros.
Operguntaé se é possível openvpn-client
instruirreescrever o endereço de origem da resposta 10.8.0.2
para. Mais especificamente, gostaria que fosse o endereço associado interface tun0
, de modo que as coisas permanecessem em ordem caso uma reconexão da VPN levasse a uma alteração do endereço IP.
Eu suspeito que isso seja possível porque o iptables MASQUERADE faz algo semelhante (mas para conexões originadas em application
). Além disso, acredito que se eu configurar isso, o pacote de resposta será entregue. Isso é possível?
Observei que quando faço ping de 10.8.0.1 para 239.1.2.3, o pacote de eco se origina de 10.8.0.2 (e não de 239.1.2.3). (Observe que o caso de ping não envolve encaminhamento de porta.) Como posso obter o mesmo comportamento para meu caso UDP?