Linux split access (multiple internet connections w/ load balancing)

Solution 1:

As you can see here

  gateway:~# ip route
  150.101.180.24 dev ppp0  proto kernel  scope link  src 150.101.179.XXX
  150.101.180.24 dev ppp1  proto kernel  scope link  src 150.101.177.XXX
  192.168.5.0/24 dev eth1  proto kernel  scope link  src 192.168.5.254
  192.168.1.0/24 dev eth2  proto kernel  scope link  src 192.168.1.2
  192.168.1.0/24 dev eth3  proto kernel  scope link  src 192.168.1.3
> default via 192.168.1.254 dev eth3
> default via 192.168.1.254 dev eth2
> default dev ppp1  scope link
> default dev ppp0  scope link

you have 4 default routes. When you're trying to reach a non-local host, one of these 4 is chosen:

gateway:~# ip route get 5.5.5.5
5.5.5.5 via 192.168.1.254 dev eth3  src 192.168.1.3
    cache  mtu 1500 advmss 1460 hoplimit 64

In this case eth3, which doesn't get you to the desired destination. The gateway you're asking to forward your packets (192.168.1.254) truthfully responds, that it has no path to the destination network:

gateway:~# ping 4.2.2.2
PING 4.2.2.2 (4.2.2.2) 56(84) bytes of data.
From 192.168.1.254 icmp_seq=1 Destination Net Unreachable

I don't know where those default routes via ethX originate from, but you need to get rid of them:

ip route del default via 192.168.1.254 dev eth3
ip route del default via 192.168.1.254 dev eth2

If your setup is not working as intended after that, the output of ip rule show will probably be helpful for further debugging.