Sim, é possível fazer isso usando iptables
e ip
juntos. No meu caso, todas as caixas Linux em questão rodam o Debian Stable, então eu escrevi um script personalizado para /etc/network/if-up.d
.
# First set up two routing-tables
ip route add to default table 11 via 192.0.2.1 dev $IFACE
ip route add to default table 33 via 192.0.2.62 dev $IFACE
# ... and rules to use them.
ip rule add priority 99 table 11 fwmark 11
ip rule add priority 99 table 33 fwmark 33
# Copy connmark to fwmark for applicable outgoing packets.
iptables -t mangle -A OUTPUT ! -d 192.0.2.0/26 \
-m addrtype --dst-type UNICAST -j CONNMARK --restore-mark
# Set connmark for applicable incoming packets.
iptables -A INPUT -i $IFACE ! -s 192.0.2.0/26 \
-m addrtype --src-type UNICAST \
-m mac --mac-source 00:00:5E:00:53:05 \
-j CONNMARK --set-mark 11
iptables -A INPUT -i $IFACE ! -s 192.0.2.0/26 \
-m addrtype --src-type UNICAST \
-m mac --mac-source 00:00:5E:00:53:07 \
-j CONNMARK --set-mark 33
Note que é definido nessa ordem para que a coisa toda tenha efeito com os dois últimos comandos. 00:00:5E:00:53:05
e 00:00:5E:00:53:07
seriam os endereços no link dos dois dispositivos NAT.