INTERNALNIC=eth0 EXTERNALNICA=eth1 EXTERNALNICB=eth2 EXTERNALIP=0.0.0.0 #clean up for restart ip rule del fwmark 1 table interfacea.out ip rule del fwmark 2 table interfaceb.out #add rules to route packets marked with 1 with interfacea routing table #and packets marked with 2 with interfaceb routing table #you will need to have created these routing tables ip rule add fwmark 1 table interfacea.out ip rule add fwmark 2 table interfaceb.out #delete default route ip route del default #add default route through interfacea ip route add default via $externalipaddress dev $EXTERNALNICA table main #set default route for interfacea routing table through interfacea ip route del default table interfacea.out ip route add default via $EXTERNALIPA dev $EXTERNALNICA table interfacea.out #set default route for interfaceb routing table through interfaceb ip route del default table interfaceb.out ip route add default via $EXTERNALIPB dev $EXTERNALNICB table interfaceb.out #mark everything for connection 1 iptables -t mangle -A PREROUTING -i $INTERNALNIC -d 0/0 -j MARK --set-mark 1 #now mark stuff we want to go over connection2 #ssh iptables -A PREROUTING -i internal -t mangle -p tcp --dport 22 -j MARK --set-mark 2 #http(s) iptables -A PREROUTING -i internal -t mangle -p tcp --dport 80 -j MARK --set-mark 2 iptables -A PREROUTING -i internal -t mangle -p tcp --dport 443 -j MARK --set-mark 2 #irc iptables -A PREROUTING -i internal -t mangle -p tcp --dport 6667 -j MARK --set-mark 2 iptables -A PREROUTING -i internal -t mangle -p tcp --dport 6669 -j MARK --set-mark 2 #ssl iptables -A PREROUTING -i internal -t mangle -p tcp --dport 7070 -j MARK --set-mark 2 #freenode alternative port #put a specific machine on one connection iptables -A PREROUTING -i internal -t mangle -p udp -s 192.168.0.30 -j MARK --set-mark 2 iptables -A PREROUTING -i internal -t mangle -p tcp -s 192.168.0.30 -j MARK --set-mark 2