Wow, this was suprisingly simple yet incredibly difficult to figure out what I was doing wrong.
Situation:
Server X has two NICs, one in a DMZ VLAN (192.168.1.0/24 on eth0) and one in a private VLAN (192.168.2.0/24 on eth1). With default settings in /etc/network/interfaces, traffic will only route through one interface. No matter what, you won’t be able to ping 192.168.2.0/24.
Solution:
In the interfaces config, add a metric for each interface. This is what it /etc/network/interfaces should look like:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
metric 0
address 192.168.1.29
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8
auto eth1
iface eth1 inet static
metric 1
address 192.168.2.31
netmask 255.255.255.0
gateway 192.168.2.1
dns-nameservers 192.168.2.1
dns-search default.net
Just run ifdown eth1 && ifup eth1 && ifdown eth0 && ifup eth0 and you should be good to go.
Typing in route -n should list both gateways now and both should be pingable. No need to do any fancy routing, port forwarding or using iproute2.