Você precisa ativar o encaminhamento no servidor OpenVPN no kernel ( /proc/sys/net/ipv4/ip_forward
) e você precisa permitir o encaminhamento global ou seletivamente no firewall (iptables), por exemplo:
# there is probably already a rule allowing all established connections
# iptables -A FORWARD -m conntrack --ctstate ESTABLISHED -j ACCEPT
# the next rules for every OpenVPN interface (or once for the respective address block)
iptables -A FORWARD -i tun0 -d 10.0.0.0/8 -j ACCEPT
iptables -A FORWARD -i tun0 -d 172.16.0.23 -j ACCEPT
# if the local network shall be accessible
# iptables -A FORWARD -i tun0 -d 172.16.20.0/24 -j ACCEPT
Você não precisa definir rotas no servidor se apenas clientes simples se conectarem. Se 172.16.20.1 se conecta como um gateway para a rede local, então você precisa de uma rota para 172.16.20.0/24, mas isso é provavelmente (e melhor) definido na configuração do OpenVPN para 172.16.20.1.
Editar 1
Se você não puder configurar o roteamento em determinados sistemas e seu roteamento não enviar o tráfego de volta corretamente, será necessário NAT (mais preciso: SNAT):
iptables -t nat -A POSTROUTING -d $PROBLEM_HOST_IP \! -s $LOCAL_IP \
-j SNAT --to-source $LOCAL_IP
com as variáveis definidas de acordo. Supondo que você só pode definir o roteamento correto para destinos em 172.16.20.0/24, você pode fazer isso mais facilmente desta maneira:
iptables -t nat -I POSTROUTING 1 -s $LOCAL_IP -j ACCEPT
iptables -t nat -I POSTROUTING 2 -d 172.16.20.0/24 -j ACCEPT
iptables -t nat -I POSTROUTING 3 -j SNAT --to-source $LOCAL_IP