As decisões de encaminhamento "normais" baseiam-se nos prefixos e máscaras da tabela de destino e de encaminhamento. Se você quiser fazer decisões de roteamento com base em outros dados (por exemplo, portas TCP), será necessário usar ip rule
.
Com ip rule
, você pode basicamente pedir ao kernel para usar uma tabela de roteamento alternativa quando alguma condição ocorrer. Você normalmente usa marcação de pacotes no iptables para isso.
Aqui está um exemplo, não testado, você pode querer tentar isso (não brinque com isso se você tiver apenas uma conexão remota com o seu servidor!).
# Create an alternate routing table
echo "1 NOVPN" >> /etc/iproute2/rt_tables
# Create the routes for this table
# Actually, you just want to set the default gateway
ip route add default via 192.168.1.1 dev eth0 table NOVPN
# Check results with
ip route show table NOVPN
# Now tell the kernel that this routing table should be used when
# a packet waiting to be routed has a specific "mark"
ip rule add from all fwmark 0x1 lookup NOVPN
# Then mark all the required packets with the same mark use above
iptables -t mangle -I OUTPUT -p tcp --sport 22 -j MARK --set-mark 1
iptables -t mangle -I OUTPUT -p tcp --sport 80 -j MARK --set-mark 1
Boa sorte.
EDITAR:
Talvez seja necessário ajustar seu endereço de origem também:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.10
Se isso não funcionar, verifique o que acontece com:
tcpdump -enieth0 port 80
(Eu suponho nas minhas respostas que a interface Ethernet de outbount adequada é eth0)