Después de buscar un poco más, encontré este hilo:https://forum.linode.com/viewtopic.php?p=50114&sid=b440414422596bb7dbc96cf7c9ee511f#p50114
Ahora modifiqué mi secuencia de comandos OpenVPN de "ruta ascendente" de la siguiente manera, ¡y finalmente está funcionando! Eliminé todas las demás reglas desordenadas (iptable PREROUTING, MASQUERADE, etc.).
Aquí está mi script final de "ruta ascendente":
ip route flush table 100
ip route flush cache
ip rule add from x.x.x.x table 100
ip route add table 100 to y.y.y.y/y dev ethX
ip route add table 100 default via z.z.z.z
Donde x.x.x.x es la IP pública de mi servidor, y.y.y.y/y es la subred de la dirección IP pública de mi servidor, ethX es la interfaz Ethernet pública de mi servidor y z.z.z.z es la puerta de enlace predeterminada.
Espero que esto pueda ayudar a alguien más.
Después de pasar por el mismo calvario, encontré al menos un problema con el script de enrutamiento.
iptables -t mangle -A PREROUTING ...
debería ser:
iptables -t mangle -A OUTPUT ...
Lea sobre por qué aquí:http://www.iptables.info/en/structure-of-iptables.html
No tuve que activar el reenvío de IP.