Seu diagnóstico está correto: o contato inicial é através de seu roteador doméstico, a resposta através do OpenVPN, seu computador o descarta por razões de segurança óbvias.
O que você está pedindo é chamado de Policy-based-
ou Source-based-
de roteamento. Basicamente, isso significa ter duas (ou mais) tabelas de roteamento distintas e alternar entre elas de acordo com algumas regras predefinidas. Ele existe no Linux e existe no FreeBSD / OpenBSD graças ao PF, veja este artigo da Wikipedia . No entanto, o PF existe no Mac ( veja aqui as instruções sobre como configurá-lo ), pensei em dizer como fazer isso no PF, embora, estritamente falando, eu tenha feito isso apenas no OpenBSD (e Linux, é claro).
Basicamente, a referência citada acima diz que você tem duas opções para onde colocar as regras para o seu FP. Seja qual você escolher, adicione essas regras ao arquivo:
ext_if1 = "ether"
ext_if2 = "tun"
ext_gw1 = "192.168.1.100"
ext_gw2 = "10.0.0.3"
pass out on $ext_if1 from $ext_if2 route-to ($ext_if2 $ext_gw2)
pass out on $ext_if2 from $ext_if1 route-to ($ext_if1 $ext_gw1)
Aqui * ext_if1 "é sua conexão ethernet via seu roteador, e 192.168.1.100 seu endereço IP, enquanto ext_if2 é sua interface virtual (tun ou tap, o que for) , com endereço IP 10.0.0.3 . Você deve substituir os endereços apropriados de acordo com suas necessidades.
BTW, isso é retirado diretamente do manual do usuário do PF, aqui , exceto que simplifiquei para acomodar sua solicitação (mais simples).